TCP三次握手建立連接和四次揮手斷開連接(個人理解)

TCP三次握手建立連接和四次揮手斷開連接(個人理解)

TCP協(xié)議通過三次握手的方式建立連接:

1.客戶端(李二狗)發(fā)送SYN請求給服務器(小紅):喂,小紅,我是李二狗,我想和你說話

2.服務器收到SYN,并回復給客戶端一個確認字段ACK:(我是小紅),我聽到了

3.客戶端收到ACK字段,發(fā)送第二個SYN請求給服務器:嘿嘿,小紅,我聽到了,咱倆開聊吧,嘻嘻!

于是服務器將這個連接狀態(tài)更改為established,并將連接加入backlog隊列,等待應用層收取數(shù)據(jù)包。

三次握手的目的是互相確認雙方之間的信道暢通,有互相發(fā)送消息的能力,不是聾子或者啞巴。

TCP協(xié)議通過四次揮手斷開連接:

還是李二狗和小紅,這次要說再見了:

1.客戶端(李二狗)發(fā)送FIN請求給服務器(小紅):小紅我有點事兒先不跟你聊了吧,咱倆掛斷吧,你還有啥想說的嗎

2.服務器收到FIN,立刻回復一個確認字段ACK:嗯,那行吧。

3.服務器緊接著主動向客戶端發(fā)送一個FIN請求:我也沒啥想說的了,今天咱先這樣吧。

4.客戶端收到服務器發(fā)送的FIN請求,再次回復一個ACK確認字段:好,再見。

隨后客戶端仍然需要繼續(xù)等待2MSL的時間,期間沒有收到任何回復,再徹底斷開連接。2MSL是網(wǎng)絡報文在網(wǎng)絡上存活的最長時間,一般是一個經(jīng)驗值,從30秒到幾分鐘不等:我再等等吧,萬一小紅那邊有什么事沒說呢,啊,等30秒了,什么也沒收到,她應該確實是掛斷了,我也掛了吧

雙方就通過這樣四次交互徹底斷開連接。

之所以要四次揮手,就是要保證雙方都收到了彼此的斷開確認

要點:

1.如果因為網(wǎng)絡故障,客戶端多次發(fā)送了FIN,那么只要收到一個服務器的ACK,就可以確認服務器知道要斷開了。如果服務器先回復FIN,那么客戶端就不能保證這個FIN是因為自己發(fā)送的FIN而觸發(fā)的。所以服務器必須先回復ACK

2.如果服務器不回復ACK,那么客戶端可以繼續(xù)單方面接收服務器發(fā)送的任何信息,這種連接叫做半連接

3.客戶端在收到服務器的FIN之后,不回復ACK,服務器也可以繼續(xù)單向接收客戶端的信息,也繼續(xù)保持半連接。

4.最后一個ACK,服務器因為網(wǎng)絡故障,很久才收到,或者沒有收到,只要在2MSL的時間內(nèi),都可以再次向客戶端發(fā)送一次FIN,再確認一次,反復確認直到雙方都確實斷開了連接。

5(重點,考試要考的).在2MSL時間內(nèi),雙方原來使用的通信端口不能再次建立連接,任何試圖綁定該端口的SOCKET請求都會失敗。因此,服務器應該設置允許2MSL復用端口,客戶端應選擇新的端口與服務器建立連接(一般操作系統(tǒng)會隨機生成一個新端口,用戶不必操心)

TCP協(xié)議這樣設計的目的,就是為了最大限度的保證網(wǎng)絡連接的可靠性。

以上都是個人的理解,憑借記憶的知識點手敲出來的,如有紕漏和錯誤請見諒

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容