網絡協議TCP 的三次握手和四次揮手

TCP協議來自RFC793 。 https://www.ietf.org/rfc/rfc793.txt網絡

1。 爲何三次握手?this

正確答案:TCP三次握手,其實是雙方各握手一次,各作一次確認,其中一次握手和確認合併在一塊兒。(就這樣簡單,徹底沒有別的幺兒子)。計算機網絡

來此上面連接的Page27頁。three

1) A --> B  SYN my sequence number is X
2) A <-- B  ACK your sequence number is X
3) A <-- B  SYN my sequence number is Y
4) A --> B  ACK your sequence number is Y

答案解釋:TCP有2個特性1. 「全雙工」 2.「通訊穩定」ip

特性1須要雙向確認,特性2引入了SEQ(sequence numbers 序列號),用SEQ肯定報文的先後順序。ci

--錯誤答案:引用謝希仁著《計算機網絡》第四版中,講 「三次握手」 的目的是 「爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤」。這句話來自文首連接的Page 32的「The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion」。rem

這句針對的問題應該是「若是協議只發SYN,不須要ACK就完成創建鏈接步驟可行嗎?「get

即:it

1) A --> B  SYN my sequence number is X
   2) A <-- B  SYN my sequence number is Y

後面一句很重要 「To deal with this, a special control message, reset, has been devised.」 io

連一塊兒解釋就是若是2次握手,會出現失效的重複連接問題。3次握手+reset能夠避免」失效的重複連接問題「!

 

2。 爲何四次揮手?

正確答案:雙方各揮手一次,各作一次確認。幾乎和握手如出一轍,只是中間的2,3由於存在時間差沒法合併。

1) A --> B  FIN my sequence number is X
2) A <-- B  ACK your sequence number is X
3) A <-- B  FIN my sequence number is Y
4) A --> B  ACK your sequence number is Y

RFC793給出的討論在page38 

There are essentially three cases:

    1) The user initiates by telling the TCP to CLOSE the connection

    2) The remote TCP initiates by sending a FIN control signal

    3) Both users CLOSE simultaneously

就是說,只有case3的狀況下,第2,3兩步驟不存在時間差,能夠作到3次揮手。但這種特例顯然不該該被推薦爲通用標準。更合理的4次揮手標準誕生了。

相關文章
相關標籤/搜索