h1 為什么TCP要三次握手掸茅?
如果兩次握手椅邓,會出現(xiàn)如下情況:
Client發(fā)送的請求連接,因為網(wǎng)絡(luò)問題昧狮,在某個網(wǎng)絡(luò)節(jié)點堵塞了很長時間景馁。長到Client該次的重傳請求都斷開連接了。之后的某一個時間節(jié)點逗鸣,server收到了該次連接請求合住。然后回復(fù)ACK
如果只有兩次绰精,則直接建立連接。此時client端根本不care此次事件聊疲,將不往連接中喂數(shù)據(jù)茬底。而server端一直在傻等數(shù)據(jù),造成資源浪費获洲。
h1 為什么TCP要四次揮手?
因為TCP是全雙工的殿如,建立連接的時候贡珊,Server端可以在ACK的時候同時將SYN置位1。而斷開連接的時候涉馁,由于Client不再寫數(shù)據(jù)的時候门岔,Server端可能會繼續(xù)寫數(shù)據(jù),所以ACK和FIN是要分開的烤送,因此是四次而不是三次寒随。
h1 為什么TCP四次揮手后,要Wait 2MSL再關(guān)閉連接
2MSL是網(wǎng)絡(luò)中數(shù)據(jù)報文最大存活時間等待的原因有兩點:
- 如果直接關(guān)閉帮坚,另一端未收到ACK妻往,超時重傳后,此時鏈接關(guān)閉了试和,因此找不到鏈接讯泣,會導(dǎo)致鏈接錯亂。
- 等待該次連接的數(shù)據(jù)包都消失在網(wǎng)絡(luò)中阅悍,避免下次鏈接使用相同的端口號時好渠,錯誤的收到臟數(shù)據(jù)。