TCP三次握手及关闭时的2MSL分析
TCP/IP三次握手四次揮手,是非常重要的,這個鏈接與關閉過程也是很簡單的,但為什么是三次握手?以及為什么要等待2MSL的狀態?大部分人也許聽到這個問題就蒙了,這篇博客就綜合《TCP/IP詳解:卷一》來分析一下原因:
下面看TCP三次握手四次揮手的原理圖:
1.為什么要三次握手?
? ? ?為了避免已失效的連接報文段又到達可服務器。考慮這樣一個正常的情況:
? ?假設TCP連接是兩次握手。當客戶端發送了一個請求連接的報文時,由于網絡原因這個報文丟失了,那么客戶端一段時間內沒有收到服務器的確認就會再次發送請求連接報文,這次服務器收到了,雙方都建立了連接,然后數據傳輸,最后關閉連接。
? 但是考慮一下,上文中的丟失數據包若沒有丟失,只是在一個網絡節點長時間滯留了,這時雙方都已經關閉了連接,此時服務器又收到了丟掉了的數據包,認為客戶端又要建立連接,因為是兩次握手所以服務器向客戶端發送了確認報文,并變 為 建立連接狀態。
? ?可想而知客戶端并沒有發起連接所以會忽略服務器的確認,這樣就浪費了服務器的資源。
2.為什么要等待2MSL時間?
? ? ??1. ?當客戶端的最后一次確認連接的報文丟失(第四次揮手發送的),服務器會再次發送FIN報文,等待客戶端的確認,客戶端在2MSL內收到服務器重傳的報文再次確認(防止此時客戶端已經關閉)。
? ? ? 2. ?2MSL 的時間可以使所有已失效的報文都消失(防止對新建的連接造成影響),若在不等待2MSL,馬上建立新的連接,那么在關閉連接前發送的失效報文段很可能影響本次連接。
? ?然而,TCP規定處于2MSL狀態的的插口對(客戶端IP/端口和服務器IP和端口)不能再次被使用。?若在2MSL狀態下新建連接可以使用這個插口對,當已失效的數據包再次到達這個新連接,判斷插口一致就會接受這個報文,但實際上這不是新建連接交互的數據,因此不能使用此無效數據包。
總結
以上是生活随笔為你收集整理的TCP三次握手及关闭时的2MSL分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全面解读java虚拟机
- 下一篇: 基本套接字TCP和UDP