TCP協議關閉時為什麼需要TIME WAIT

時間 2021-05-11 13:08:05

1樓:l7dpi

1.協議沒有按你說的那有設計,如果按你這個思路設計,會有什麼弊端?前者在一定時間內time_wait後進入close狀態,會話結束,後者會話結束時間不確定。

2.本地埠會重複使用,如果有舊會話報文,收到亂序序列號,可能以為包丟了,會觸發快速重傳機制,造成一定干擾。

2樓:胡俊飛

如果是主機對主機直連,且主機一直保持開啟,序列號一直遞增,有可能可以根據序列號來判斷。但是:

1、序列號在不同TCP連線間並不一定是絕對遞增的。協議只規定TCP內部序列號遞增的情況,但不同TCP連線的初始序列號(ISN)不要求絕對有序。而且考慮到安全性,不同TCP連線的ISN是隨機產生的。

所以使用同樣的四元組(源IP、源埠、目的IP、目的埠)建立新的連線時,可能會出現新連線的ISN比舊連線小的情況。具體可以搜尋「TCP ISN」

2、NAT的場景中,乙個出口IP後面可能有多個內網IP及主機。假設A和C都是NAT後的主機,A主機請求B主機結束之後,C主機再請求B主機,經NAT轉換後可能會重用NAT上的同一埠號請求B主機。這時,前後兩個請求在B看來雖然來自同一出口IP的同一埠號,但實際上是兩個客戶端過來的連線,而ISN之間是沒有關係的。

以上是我的理解,不知道有沒有問題或者幫助

補充說明:回答中的1、2不對應提問中的1、2,主要是回答的問題2。回答了問題2,問題1應該也就好理解了,必須知道來的FIN是哪個連線的、是主動FIN還是被動FIN、是正常連線還是待關閉狀態連線的才能決定怎麼處理。

引用:NAT:https://

TCP的被動關閉端為什麼不需要類似TIME WAIT的狀態?

問題1那被動關閉端也有可能發出了ACK對端沒收到,為什麼不需要進入類似TIME WAIT的狀態,而是直接CLOSED了呢?TIME WAIT 正是被動關閉端發起後才出現的。遇到這個情況通過超時重傳,如果還是不行,對方傳送rst的包。直接放棄。問題2 這種情況下,對端也即主動關閉端是否會一直停留在CL...

為什麼MOBA 「吃雞」遊戲不推薦用tcp協議?

不懂if moba,吃雞 遊戲對延遲要求很高,一般最好控制在延遲在30到70,超過70就會影響遊戲體驗。在乙個較差的流動網路環境下,丟包比較相對較多,而tcp本身重傳預設時間是200ms,而且指數退避的方式,這個很要命的,這種場景下很影響遊戲體驗。當然很好平穩的網路環境用tcp一樣有較好的體驗,如果...

為什麼UDP需要有長度字段,而TCP不需要長度欄位呢?

whoami TCP頭部大小是可變的,到TCP頭部有4bit用來表示資料偏移 單位是4位元組 其實也就是頭部的大小,這樣上層協議就知道TCP資料部分的開始位置,知道怎麼去重整資料。UDP頭部確實是多餘的,他是固定的八字節,很明顯8位元組後面的就是UDP資料部分,這樣上層應用就可以得到這些資料,後續由...