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