1. 程式人生 > >TCP,UDP,HTTP,IP,SOCKET

TCP,UDP,HTTP,IP,SOCKET

限制 -c 開始 java.net 現在 認識 sock 特性 鏈接

近日對各網絡協議進行了一番學習,宏觀認識上有收獲。

網絡由下往上分為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。(引用)
IP 協議對應於網絡層,
TCP/UDP協議對應於傳輸層,

HTTP協議對應於應用層,

SOCKET則是對TCP/IP協議的封裝和應用。

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的三次握手在最低限度上(實際上也很大程度上保證了)保證了連接的可靠性;
而UDP不是面向連接的,UDP傳送數據前並不與對方建立連接,對接收到的數據也不發送確認信號,
發送端不知道數據是否會正確接收,當然也不用重發,所以說UDP是無連接的、不可靠的一種數據傳輸協議
也正由於上面的特點,使得UDP的開銷更小數據傳輸速率更高,因為不必進行收發數據的確認,所以UDP的實時性更好。

HTTP

HTTP默認端口號為80,HTTPS的端口號為443

技術分享

HTTP協議永遠都是客戶端發起請求,服務器回送響應。見下圖:

技術分享

這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。

HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系。

TCP,UDP,HTTP,IP,SOCKET