TIME_WAIT简介
在TCP斷開的過程中會(huì)有四個(gè)狀態(tài)變化過程,如下圖所示:
在連接撤銷過程中,有如下過程:??????????????????????????????????????????
1.HOST1上的應(yīng)用程序關(guān)閉己方的連接導(dǎo)致TCP發(fā)送一個(gè)FIN消息給HOST2。
2.HOST2發(fā)送一個(gè)確認(rèn)消息給HOST1,并且HOST2把FIN作為EOF遞交給HOST2上的應(yīng)用程序。
3.一段時(shí)間過后,HOST2上的應(yīng)用程序關(guān)閉它那邊的連接,引發(fā)一個(gè)FIN消息給HOST1。
4.HOST1給HOST2發(fā)送一個(gè)確認(rèn)消息,然后HOST2關(guān)閉連接并釋放資源,然而,HOST1卻沒有關(guān)閉連接,而是進(jìn)入了TIME_WAIT狀態(tài),并為兩個(gè)最大段生存時(shí)間(2MSL)保留在此狀態(tài).
?
為什么需要TIME_WAIT?
1.因?yàn)樵诘谒牟降臅r(shí)候,HOST1發(fā)送的ACK可能丟失并導(dǎo)致HOST2重新發(fā)送FIN消息,TIME_WAIT維護(hù)連接狀態(tài).
??如果執(zhí)行主動(dòng)關(guān)閉的一方HOST1 不進(jìn)入到TIME_WAIT狀態(tài)就關(guān)閉連接那會(huì)發(fā)生什么呢?當(dāng)重傳的FIN消息到達(dá)時(shí),因?yàn)門CP已經(jīng)不再有連接的信息了,所以就用RST(重新啟動(dòng))消息應(yīng)答,導(dǎo)致HOST2進(jìn)入錯(cuò)誤的狀態(tài)而不是有序終止?fàn)顟B(tài),如果發(fā)送最后ACK消息的一方處于TIME_WAIT狀態(tài)并仍然記錄著連接的信息,它就可以正確的響應(yīng)對等方HOST2的FIN消息了.
2.TIME_WAIT為連接中”離群的段”提供從網(wǎng)絡(luò)中消失的時(shí)間.
??考慮一下,如果延遲或者重傳段在連接關(guān)閉后到達(dá)時(shí)會(huì)發(fā)生什么呢?通常情況下,因?yàn)門CP僅僅丟棄該數(shù)據(jù)并響應(yīng)RST消息,所以這不會(huì)造成任何問題。當(dāng)RST消息到達(dá)發(fā)出延時(shí)段的主機(jī)時(shí),因?yàn)樵撝鳈C(jī)也沒有記錄連接的任何信息,所以它也丟棄該段。然而,如果兩個(gè)相同主機(jī)之間又建立了一個(gè)具有相同端口號(hào)的新連接,那么離群的段就可能被看成是新連接的,如果離群的段中數(shù)據(jù)的任何序列號(hào)恰恰在新連接的當(dāng)前接收窗口中,數(shù)據(jù)就會(huì)被重新接收,其結(jié)果就是破壞新連接
總結(jié)
以上是生活随笔為你收集整理的TIME_WAIT简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP的ACK原理和延迟确认机制
- 下一篇: SOCKET CLOSE_WAIT 搜集