TCP爲什麼請求連接時是三次握手,而終止連接時是四次握手?

TCP請求連接時進行三次握手:

第一次握手:客戶端給服務端發送SYN(同步信號)信號,請求連接。

第二次握手:服務端接收到客戶端的SYN信號後,給客戶端發送SYN和ACK應答信號,確認連接。

第三次握手:客戶端收到服務端的應答信號後,給服務端發送ACK信號,確認連接,這樣客戶端與服務端建立連接。


  • 爲什麼不是兩次或者四次握手?

    如果兩次握手,即客戶端發送SYN請求連接信號,服務器接收信號後發送SYN+ACK應答信號,客戶端與服務端建立連接。如果遇到客戶端的請求信號發生延遲現象,或者已經失效的連接請求突然又發送收到了客戶端,產生錯誤。

    如果四次握手,即三次握手之後,服務端再次給客戶端發送ACK信號,則服務端資源會被浪費。所以三次握手是能夠建立安全連接的最少次數。

TCP終止連接時是四次握手:

第一次握手:客戶端已經發送完數據,並且知道服務端已經接收完數據,想要終止連接,給服務端發送FIN終止信號。

第二次握手:服務端接收到終止信號後,會發送一個ACK確認收到的應答信號,但是由於服務端的數據還在發送中,所以無法在接收到終止連接請求時立即終止連接。

第三次握手:服務端等到數據發送完畢後,會發送FIN終止連接信號給客戶端。

第四次握手:客戶端接收到FIN信號後,知道服務端數據發送完畢,發送ACK確認收到信號。客戶端等待2MSL後,如果沒有收到服務端傳來的任何消息,就表明服務端已經收到確認消息,客戶端關閉連接,服務端也關閉連接。

  • 客戶端爲什麼要等待2MSL?
    在客戶端第四次握手時發送ACK後,信號有可能丟失,如果服務端沒有收到ACK,將會不斷的發送FIN信號。所以客戶端並不能在發送了ACK信號後就立即關閉,它必須確認服務端收到了ACK信號。客戶端在發送ACK信號後進入到TIME_WAIT狀態,且會設置一個計時器,等待2MSL的時間段。如果在該時間內再次收到FIN,則客戶端會重發ACK信號並再次等待2SML時間。如果等待期間一直沒有收到FIN,則可以推斷服務端已經成功接收ACK信號,結束連接。MSL(Maximum Segment Lifetime)是一個信號在網絡中最大的存活時間。2MSL是一個信號發送和回覆所需的最大時間。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章