tcp3次握手4次揮手分析

一.三次握手

在這裏插入圖片描述
流程

  1. client發送syn
  2. server發送syn,ack
  3. client發送ack

問題

  1. 爲什麼需要三次握手,兩次不行嗎?

需要三次握手的目的是爲了減少服務端資源浪費,開啓無用的連接,假設只有1,2兩步,則會出現如下問題

  1. 如果2丟失,那麼server會建立無用的連接,其實client根本沒有收到ack
  2. 由於網絡原因,client發送的syn,server沒有收到,client以爲超時了,會重新連接,過了一會後,之前發送的syn又被server收到了,server會建立無用的連接

總之,如果是兩次握手,會出現server認爲已經建立連接了,但是client卻不知道,也不會使用;如果是三次,則上面的問題都不會出現

二.四次揮手

在這裏插入圖片描述
流程

  1. client發送fin
  2. server發送ack
  3. server發送fin,ack
  4. client發送ack

問題

1. 爲什麼握手是三次,揮手是四次?

握手的第二次,發生了syn和ack,二揮手的第二次只發送了ack,爲什麼?連接建立建立時,server不需要做什麼準備,可以直接返回syn和ack,而釋放連接時,server收到fin後,有可能還有數據要處理,所以先發送ack,等處理完數據了,再發送fin,ack

2. 爲什麼客戶端在TIME-WAIT階段要等2MSL?

爲的是確認服務器端是否收到客戶端發出的ACK確認報文;
當客戶端發出最後的ACK確認報文時,並不能確定服務器端能夠收到該段報文。所以客戶端在發送完ACK確認報文之後,會設置一個時長爲2MSL的計時器。MSL指的是Maximum Segment Lifetime:一段TCP報文在傳輸過程中的最大生命週期。2MSL即是服務器端發出爲FIN報文和客戶端發出的ACK確認報文所能保持有效的最大時長。
服務器端在1MSL內沒有收到客戶端發出的ACK確認報文,就會再次向客戶端發出FIN報文;
如果客戶端在2MSL內,再次收到了來自服務器端的FIN報文,說明服務器端由於各種原因沒有接收到客戶端發出的ACK確認報文。客戶端再次向服務器端發出ACK確認報文,計時器重置,重新開始2MSL的計時;
否則客戶端在2MSL內沒有再次收到來自服務器端的FIN報文,說明服務器端正常接收了ACK確認報文,客戶端可以進入CLOSED階段,完成“四次揮手”。

所以,客戶端要經歷時長爲2SML的TIME-WAIT階段;這也是爲什麼客戶端比服務器端晚進入CLOSED階段的原因

三.參考網址

https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc

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