Ⅰ socket,tcp,http三者之間的區別和原理
http、TCP/IP協議與socket之間的區別
網路由下往上分為:
物理層--
數據鏈路層--
網路層-- IP協議
傳輸層-- TCP協議
會話層--
表示層和應用層-- HTTP協議
(1)TCP/IP連接
手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。
建立起一個TCP連接需要經過「三次握手」
第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一
方主動關閉連接之前,TCP
連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客
戶端交互,最終確定斷開).
(2)HTTP連接
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。
2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。
由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接
請求。通常的做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回
復,表明知道客戶端「在線」。若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。
(3)SOCKET原理
3-1套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。
應用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序進程提供並發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個
TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了套接字(Socket)介面。應
用層可以和傳輸層通過Socket介面,區分來自不同應用程序進程或網路連接的通信,實現數據傳輸的並發服務。
3-2建立socket連接
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描
述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
(4)SOCKET連接與TCP/IP連接
創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。
socket則是對TCP/IP協議的封裝和應用(程序員層面上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據 如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關系,網路有一段比較容易理解的介紹:
「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如
果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也
可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面
(API),通過Socket,我們才能使用TCP/IP協議。 實際上,Socket跟TCP/IP協議沒有必然的聯系。Socket編程接
口在設計的時候,就希望也能適應其他的網路協議。所以說,Socket的出現
只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數介面,比如create、
listen、connect、accept、send、read和write等等。網路有一段關於socket和TCP/IP協議關系的說法比較容易理解:
「TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作介面。這個就像操作系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程序員做網路開發所用的介面,這就是Socket編程介面。」
實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面。socket是對埠通信開發的工具,它要更底層一些.
(5)Socket連接與HTTP連接
由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。
而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。
很多情況下,需要伺服器端主動向客戶端推送數據,保持客戶端與伺服器數據的實時與同步。此時若雙方建立的是Socket連接,伺服器就可以直接
將數據傳送給客戶端;若雙方建立的是HTTP連接,則伺服器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向伺服器端發送連接請
求,不僅可以保持在線,同時也是在「詢問」伺服器是否有新的數據,如果有就將數據傳給客戶端。
http協議是應用層的協義
有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網路通信的能力。
兩個計算機之間的交流無非是兩個埠之間的數據通信,具體的數據會以什麼樣的形式展現是以不同的應用層協議來定義的`如HTTP`FTP`...
Ⅱ iOS開發網路篇—Socket編程
一、網路各個協議:TCP/IP、SOCKET、HTTP等
網路七層由下往上分別為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。
其中物理層、數據鏈路層和網路層通常被稱作媒體層,是網路工程師所研究的對象;
傳輸層、會話層、表示層和應用層則被稱作主機層,是用戶所面向和關心的內容。
http協議對應於應用層
tcp協議對應於傳輸層
ip協議對應於網路層
三者本質上沒有可比性。 何況HTTP協議是基於TCP連接的。
TCP/IP是傳輸層協議,主要解決數據如何在網路中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。
我 們在傳輸數據時,可以只使用傳輸層(TCP/IP),但是那樣的話,由於沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用應用層 協議,應用層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用層協議。WEB使用HTTP作傳輸層協議,以封裝HTTP文本信息,然 後使用TCP/IP做傳輸層協議將它發送到網路上。Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。
二、Http和Socket連接區別
相信不少初學手機聯網開發的朋友都想知道Http與Socket連接究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。
2.1、TCP連接
要想明白Socket連接,先要明白TCP連接。手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。
建立起一個TCP連接需要經過「三次握手」:
第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握
手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連
接之前,TCP
連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客
戶端交互,最終確定斷開)
2.2、HTTP連接
HTTP協議即超文本傳送協議(HypertextTransfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。
2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。
由
於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接請求。通常的
做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回復,表明知道客
戶端「在線」。若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。
三、SOCKET原理
3.1、套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。
應
用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序進程提供並發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個
TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了套接字(Socket)介面。應
用層可以和傳輸層通過Socket介面,區分來自不同應用程序進程或網路連接的通信,實現數據傳輸的並發服務。
3.2 、建立socket連接
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
連
接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶
端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
3.3、SOCKET連接與TCP連接
創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。
3.4、Socket連接與HTTP連接
由
於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用
中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致
Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。
而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。
很
多情況下,需要伺服器端主動向客戶端推送數據,保持客戶端與伺服器數據的實時與同步。此時若雙方建立的是Socket連接,伺服器就可以直接將數據傳送給
客戶端;若雙方建立的是HTTP連接,則伺服器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向伺服器端發送連接請求,不僅可以
保持在線,同時也是在「詢問」伺服器是否有新的數據,如果有就將數據傳給客戶端。
這里我們使用Socket實現一個聊天室的功能,關於伺服器這里的就不介紹了
@interfaceViewController (){
NSInputStream *_inputStream;//對應輸入流
NSOutputStream *_outputStream;//對應輸出流
}
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputViewConstraint;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *chatMsgs;//聊天消息數組
@end
懶載入這個消息數組
//從主運行循環移除
//1.建立連接
//定義C語言輸入輸出流
//把C語言的輸入輸出流轉化成OC對象
//設置代理
//把輸入輸入流添加到主運行循環
//不添加主運行循環 代理有可能不工作
//打開輸入輸出流
//登錄
//發送用戶名和密碼
//在這里做的時候,只發用戶名,密碼就不用發送
//如果要登錄,發送的數據格式為 "iam:zhangsan";
//如果要發送聊天消息,數據格式為 "msg:did you have dinner";
//登錄的指令11NSString *loginStr =@"iam:zhangsan";
//把Str轉成NSData
//建立一個緩沖區 可以放1024個位元組
//返回實際裝的位元組數
//把位元組數組轉化成字元串
//從伺服器接收到的數據
//聊天信息
//刷新表格
//發送數據
//發送完數據,清空textField
//數據多,應該往上滾動
}
//監聽鍵盤
//獲取窗口的高度
//鍵盤結束的Frm
//獲取鍵盤結束的y值
Ⅲ 【計算機網路】Socket
socket進行通信的方式如下:
使用socket()系統調用能夠創建一個socket,它返回一個用來在後續系統調用中引用該socket的文件描述符。
socket存在於一個通信domain中,它確定:
現在操作系統支持下列domain:
每個socket實現都至少提供了兩種socket:流和數據報。這兩種類型在UNIX和Internet domain中都得到了支持。
流socket提供了一個可靠的雙向的位元組流通信信道:
數據報socket允許數據以數據報的形式進行交換。在使用時無需與另一個socket簡歷連接。
傳入bind()的addr比較復雜,每種socket domain都使用了不同的地址格式,如UNIX domain socket使用路徑名,而Internet domain socket 使用IP地址和埠號。struct sockaddr適用於所有domain,將各種domain特定的地址結構轉換成單個類型以供socket系統調用中的各個參數使用。
socket I/O 可以使用傳統的read()和write()系統調用或使用一組socket特有的系統調用send() recv() sendto() recvfrom()。默認情況下,這些系統調用在I/O操作無法被立即完成時阻塞,使用fcntl() F_SETFL 操作用啟用 O_NONBLOCK 打開文件狀態標記可以執行非阻塞I/O
listen()系統調用將文件描述符sockfd引用的流socket標記為被動,這個socket後面會被用來接受來自其他(主動的)socket的鏈接。
無法再一個已連接的socket(已成功執行connect()的socket或由accept()調用返回的socket)上執行 listen()
如果伺服器正忙於處理其他客戶端,那麼客戶端的connect()可能並不能馬上被accept(),這將產生一個未決的連接。
內核必須要記錄所有未決的連接請求的相關信息,backlog參數允許限制這種未決連接的數量。在這個限制之內的連接請求會立即成功,之外的連接請求就會阻塞直到一個未決的連接被接受,並從未決連接隊列中刪除。
accept()系統調用會文件描述符sockfd引用的監聽流socket上接受一個連入連接。如果在調用accept時不存在未決的連接,那麼調用會阻塞直到有連接請求到達為止。
返回的結果是已連接的socket的文件描述符。addr參數指向一個用來返回socket地址的結構。
一對連接的流 socket 在兩個端點之間提供了一個雙向通信信道。
關閉一個連接之後,對等應用程序讀取數據時將會收到文件結束(所有緩沖數據都讀取之後),如果要寫入數據,會收到一個SIGPIPE信號,並且系統調用返回EPIPE錯誤。
無法保證順序,也無法保證能夠到達。由於底層協議有時會重新傳包,也可能多次到達。
盡管數據報socket是無連接的,但在數據報socket上應用connect()系統調用仍然起作用,會導致內核記錄這個socket的對等socket地址。
當一個數據報socket已連接後:
在UNIX domain中,socket地址以路徑名來表示,domain特定的socket地址結構的定義如下:
為將一個UNIX domain socket綁定到一個地址上,需要初始化一個sockaddr_un結構,然後將指向這個結構的一個指針作為addr參數傳入bind()並將addrlen指定為這個結構的大小。
當用來綁定UNIX domain socket時,bind()會在文件系統中創建一個條目,作為socket路徑名的一部分的目錄需要可訪問和可寫。這個文件會被標記為一個socket,當再這個路徑名上應用stat()時,它會在stat結構的st_mode欄位中的文件類型部分返回值S_IFSOCK。
盡管UNIX domain socket是通過路徑名來標識的,但這些socket上發生的I/O無須對底層設備進行操作。
有關綁定一個UNIX domain socket的注意點:
伺服器流程:
客戶端流程:
對於UNIX domain socket來說,數據報的傳輸是在內核中發生的,也是可靠的,所有消息都會按序被遞送並且不會發生重復的狀況。
伺服器創建socket後並綁定後,進入一個無線循環,在循環中使用recvfrom()接收來自客戶端的數據報,將接收到的文本轉換成大小格式並使用通過recvfrom()獲取的地址將轉換過的文本返回給客戶端。
socket文件的所有權和許可權決定了哪些進程能夠與這個socket進行通信
有時候讓單個進程創建一對socket並將它們連接起來是比較有用的。
允許將一個UNIX domain socket綁定到一個名字上但不會在文件系統中創建的名字
要傳輸數據,數據鏈路層需要將網路層傳遞過來的數據報封裝進被稱為幀的一個一個單元。最大傳輸單元MTC是改層所能傳輸的幀大小的上限。
網路層任務:
網路層的協議是IP,IPv4使用32位地址來標識子網和主機,IPv6則使用了128位的地址。
一個裸socket(SOCK_RAW),允許程序直接與IP層進行通信,但大多數都會基於一種傳輸層協議之上的socket。
IP以數據報(包)的形式來傳輸數據。在兩個主機之間發送的每一個數據報都是在網路上獨立傳輸的,它們經過的路徑可能會不同。一個IP數據報包含一個頭,其大小范圍為20位元組到60位元組。包含目標主機的地址,源地址。
一個IP實現可能會給它所支持的數據報的大小設定一個上限。所有IP實現都必須做到數據報的大小上限至少與規定的IP最小重組緩沖區大小一樣大。IPv4限制值是576位元組,IPv6是1500位元組。
IP是一種無連接協議,並沒有在相互連接的兩個主機之間提供一個虛擬電路。
IP是一種不可靠的協議:盡最大可能將數據報從發送者傳輸給接收者,但並不保證包到達的順序與它們被傳輸的順序一致,也不保證是否重復,甚至到達。IP也美譽錯誤恢復。可靠性是通過使用TCP來保證的。
IPv4為IP頭提供了一個校驗和,這樣能夠檢測出頭中的錯誤,但並沒有為包中所傳輸的數據提供任何錯誤檢測機制。IPv6並沒有為IP頭提供校驗和,它依賴高層協議來完成錯誤檢測和可靠性。
IP數據報的重復使可能發生的,數據鏈路層採用一些技術確保可靠性以及IP數據報可能會以隧道形式穿越採用了重傳機制。
IP會將數據報分段成一個個大小合適的傳輸單元,這些分段在到達最終目的之後會被重組成原始的數據報(每個IP分段本身就包含一個偏移量)
Ⅳ socket和http間的區別
socket連接和連接的區別
HTTP協議:簡單對象訪問協議,對應於應用層 ,HTTP協議是基於TCP連接的
tcp協議: 對應於傳輸層
ip協議: 對應於網路層
TCP/IP是傳輸層協議,主要解決數據如何在網路中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。
Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,才能使用TCP/IP協議。
連接:連接就是所謂的短連接,即客戶端向伺服器端發送一次請求,伺服器端響應後連接即會斷掉;
socket連接:socket連接就是所謂的長連接,理論上客戶端和伺服器端一旦建立起連接將不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:伺服器端或客戶端主機down了,網路故障,或者兩者之間長時間沒有數據傳輸,網路防火牆可能會斷開該連接以釋放網路資源。
最大區別socket是網路層,是應用成。。 socket是一個程序組件,它支持TCP,UDP等網路通訊協議,也就是通過socket這個東西你可以和任何互聯網或區域網上的計算機通訊。。。TCP,UDP是一個網路層協議,網路層協議不管你發的內容是啥,他只負責把...
是屬於應用層的網路協議,應用廣泛,目前我們的webservice服務網路中傳輸就是通過HTTP協議。
socket是屬於網路層的,可以編程tcp或者UDP協議傳輸數據,協議其實就是基於tcp協議的。
1、HTTP:超文本傳輸協議,首先它是一個協議,並且是基於TCP/IP協議基礎之上的應用層協議。
TCP/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,HTTP是應用層協議,主要解決如何包裝數據。HTTP協議詳細規定了瀏覽器與伺服器之間相互通信的規則,是萬維網交換信息的基礎。HTTP是基於請求-響應形式並且是短連接,並且是無狀態的協議。針對其無狀態特性,在實際應用中又需要有狀態的形式,因此一般會通過session/cookie技術來解決此問題。
2、Socket:Socket不屬於協議范疇,而是一個調用介面(API),Socket是對TCP/IP協議的封裝,通過調用Socket,才能使用TCP/IP協議。
Socket連接是長連接,理論上客戶端和伺服器端一旦建立連接將不會主動斷開此連接。Socket連接屬於請求-響應形式,服務端可主動將消息推送給客戶端。
socket屬於傳輸層;HTTP屬性應用層協議;
HTTP使用Socket TCP進行傳輸;
打個比方:Socket是車,而HTTP是坐在車里的人
你好樓主#10086❦#
jsp頁面中通過get方式發送請求給後台服務,可能會出現亂碼,需要做URL傳遞參數內容編碼,你也可以來後盾網一流導師指導你如: URLEncoder.encode("北京","GBK"); GBK為編碼字元集,也可以為UTF-8隻要能解析中文都可以。
是短連接,直接工作在應用層,終端發送請求就聯通,服務請求完就斷開。
socket是長連接,將tcp/ip協議封裝後傳輸,安全性高,而且兩端終端聯通後一直連接。
HTTP協議:簡單對象訪問協議,對應於應用層 ,HTTP協議是基於TCP連接的
tcp協議: 對應於傳輸層
ip協議: 對應於網路層
TCP/IP是傳輸層協議,主要解決數據如何在網路中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。
Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,才能使用TCP/IP協議。
連接:連接就是所謂的短連接,即客戶端向伺服器端發送一次請求,伺服器端響應後連接即會斷掉;
socket連接:socket連接就是所謂的長連接,理論上客戶端和伺服器端一旦建立起連接將不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:伺服器端或客戶端主機down了,網路故障,或者兩者之間長時間沒有數據傳輸,網路防火牆可能會斷開該連接以釋放網路資源。
Ⅳ Socket屬於TCP/IP中的哪一層
socket的實現部分, 就是系統協議棧部分, 應該包含了 網路層 (ip), 傳輸層(tcp/udp)等等。
用socket寫程序的人, 就要看用socket那部分了。 如果你直接用ip層, rawsocket, 假如你自己寫個tcp協議, 那你應該做的就是傳輸層。
如果你是用tcp/udp等協議, 做網路應用, 那應該是應用層。
其實如果按osi的模型來分。 每個從事軟體或者硬體開發的人, 都應該能找到自己工作在那一層。
Ⅵ socket是什麼呀
套接字(Socket),就是對網路中不同主機上的應用進程之間進行雙向通信的端點的抽象。
一個套接字就是網路上進程通信的一端,提供了應用層進程利用網路協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網路協議棧,是應用程序通過網路協議進行通信的介面,是應用程序與網路協議根進行交互的介面。
套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。
可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網路間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。
套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。
Socket(套接字)可以看成是兩個網路應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網路環境中進程間通信的API(應用程序編程介面),也是可以被命名和定址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。
通信時其中一個網路應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網路介面卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。
Socket是由IP地址和埠結合的,提供向應用層進程傳送數據包的機制。
類型
1、數據報套接字
無連接套接字,使用用戶數據報協議(UDP)。在數據報套接字上發送或接收的每個數據包都單獨定址和路由。數據報套接字不能保證順序和可靠性,因此從一台機器或進程發送到另一台機器或進程的多個數據包可能以任何順序到達或可能根本不到達。在數據報套接字上發送廣播可能需要特殊配置。
為了接收廣播數據包,數據報套接字不應該綁定到特定地址,盡管在某些實現中,當數據報套接字綁定到特定地址時也可能接收廣播數據包。
2、流套接字
面向連接的套接字,使用傳輸控制協議(TCP)、流控制傳輸協議(SCTP) 或數據報擁塞控制協議(DCCP)。流套接字提供了無記錄邊界的有序且獨特的無錯誤數據流,並具有用於創建和銷毀連接以及報告錯誤的明確定義的機制。
流套接字以帶外功能可靠地、有序地傳輸數據。在 Internet 上,流套接字通常使用 TCP 實現,以便應用程序可以使用 TCP/IP 協議在任何網路上運行。
3、原始套接字
允許直接發送和接收 IP 數據包,無需任何特定於協議的傳輸層格式。對於其他類型的套接字,根據選擇的傳輸層協議(例如 TCP、UDP)自動封裝有效載荷,並且套接字用戶不知道與有效載荷一起廣播的協議頭的存在。從原始套接字讀取時,通常包含標頭。
從原始套接字傳輸數據包時,自動添加標頭是可選的。
大多數套接字應用程序編程介面(API),例如基於Berkeley 套接字的那些,支持原始套接字。Windows XP於 2001 年發布,在Winsock介面中實現了原始套接字支持,但三年後,微軟出於安全考慮限制了 Winsock 的原始套接字支持。
原始套接字用於與安全相關的應用程序,如Nmap。原始套接字的一個用例是在用戶空間中實現新的傳輸層協議。
原始套接字通常在網路設備中可用,用於路由協議,例如Internet 組管理協議(IGMP) 和開放最短路徑優先(OSPF),以及用於Internet 控制消息協議(ICMP) 等事情,由ping 實用程序。
以上內容參考網路-套接字
Ⅶ socket屬於網路的哪個層
傳輸層
應用層通過傳輸層進行數據通信時,TCP和UDP會遇到同時為多個應用程序進程提供並發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了稱為套接字(Socket)的介面。
Ⅷ socket工作與TCP/IP的哪一層
傳輸層
要想明白 Socket,必須要理解 TCP 連接。
TCP 三次握手:握手過程中並不傳輸數據,在握手後伺服器與客戶端才開始傳輸數據,理想狀態下,TCP 連接一旦建立,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。
Socket是對 TCP/IP 協議的封裝,Socket 只是個介面不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞數據。
創建 Socket連接的時候,可以指定傳輸層協議,可以是 TCP 或者 UDP,當用 TCP 連接,該Socket就是個TCP連接,反之。
Socket原理
Socket連接,至少需要一對套接字,分為 clientSocket,serverSocket
連接分為3個步驟:
(1) 伺服器監聽:伺服器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;
(2) 客戶端請求:客戶端的套接字要描述它要連接的伺服器的套接字,提供地址和埠號,然後向伺服器套接字提出連接請求;
(3) 連接確認:當伺服器套接字收到客戶端套接字發來的請求後,就響應客戶端套接字的請求,並建立一個新的線程,把伺服器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式建立連接。而伺服器套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求.
Socket為長連接:通常情況下Socket 連接就是 TCP 連接,因此 Socket 連接一旦建立,通訊雙方開始互發數據內容,直到雙方斷開連接。在實際應用中,由於網路節點過多,在傳輸過程中,會被節點斷開連接,因此要通過輪詢高速網路,該節點處於活躍狀態。
很多情況下,都是需要伺服器端向客戶端主動推送數據,保持客戶端與服務端的實時同步。
若雙方是 Socket 連接,可以由伺服器直接向客戶端發送數據。
若雙方是 HTTP 連接,則伺服器需要等客戶端發送請求後,才能將數據回傳給客戶端。
因此,客戶端定時向伺服器端發送請求,不僅可以保持在線,同時也詢問伺服器是否有新數據,如果有就將數據傳給客戶端。
參考來源:
HTTP 和 Socket 的區別
HTTP與 Socket 的區別
OSI七層協議模型、TCP/IP四層模型學習筆記