TCP建立連接 原

寫在前面

對TCP "面向連接" 特性的學習研究。什麼是面向連接? TCP爲什麼要進行面向連接的通信? TCP 連接建立的過程是怎樣的?

 

面向連接的通信

建立連接的通信過程 : 打電話是面向連接的通信 , A 呼叫 B , B 接受並且此時 A 還沒有掛斷,連接建立成功, A 、B 雙方正常通信。如果 B 不接受呼叫,連接無法建立 , 整個通信過程就不會成立。

無連接的通信 : 發短信是無連接的通信 , A 向 B 發短信 , A 並不知道 B 的通信狀態是否一切正常(比如,手機有電、有信號、手機沒丟) , 此時 A 可以不受 B 的通信狀態的限制自由的發送短信給 B 。整個通信過程不需要建立連接就可以實現。

 

面向連接通信的優點、缺點

優點 : 可靠性高

缺點 : 爲了對可靠性做出保障,整個過程十分複雜 (魚和熊掌不可兼得,最重要的是找到平衡)

 

TCP 狀態碼

S指代服務器,C指代客戶端,S&C表示兩者,S/C表示兩者之一 。

LISTEN - S : 服務器等待從任意遠程TCP端口的連接請求。偵聽狀態。

SYN-SENT - C : 客戶端在發送連接請求後等待匹配的連接請求。客戶端向服務器發出一個同步(SYNC)信號後進入此狀態。

SYN-RECEIVED - S : 服務器已經收到客戶端的同步(SYNC)信號,併發送同步(SYNC)信號之後等待客戶端確認(ACK)請求。

ESTABLISHED - S&C : 服務端與客戶端的連接已經打開,服務端收到的數據可以發給應用層。數據傳輸步驟的正常情況。此時連接兩端是平等的。這稱作全連接。

FIN-WAIT-1 - S&C : (服務端或客戶端)主動關閉發出FIN請求包,表示本方的數據發送全部結束,等待TCP連接另一端的ACK確認包或FIN&ACK請求包。

FIN-WAIT-2 - S&C : 主動關閉端在FIN-WAIT-1狀態下收到ACK確認包,進入等待遠程TCP的連接終止請求的半關閉狀態。這時可以接收數據,但不再發送數據。

CLOSE-WAIT - S&C  : 被動關閉端接到FIN後,就發出ACK以迴應FIN請求,並進入等待本地用戶的連接終止請求的半關閉狀態。這時可以發送數據,但不再接收數據。

CLOSING - S&C : 在發出FIN後,又收到對方發來的FIN後,進入等待對方對己方的連接終止(FIN)的確認(ACK)的狀態。少見。

LAST-ACK - S&C : 被動關閉端全部數據發送完成之後,向主動關閉端發送FIN,進入等待確認包的狀態。

TIME-WAIT -  S/C : 主動關閉端接收到FIN後,就發送ACK包,等待足夠時間以確保被動關閉端收到了終止請求的確認包。

CLOSED - S&C : 完全沒有連接。

 

TCP 三次握手建立連接

                     

連接建立的過程總共需要進過三次通信,三次通信都成功之後連接建立成功。三次通信是爲了確認通信雙方的狀態都正常纔會建立連接。就像是打電話的過程。

連接建立過程抓包分析:

              

 

客戶端發起連接 , SYN = 1 

           

 

服務端接收到連接請求發送應答數據包 , SYN = 1 , ACK = 1 

         

 

客戶端收到服務端應答包後發送應答包 , ACK = 1

          

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章