1. 程式人生 > >網路協議TCP 的三次握手和四次揮手

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

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

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

1。 為什麼三次握手?

正確答案:TCP三次握手,實際上是雙方各握手一次,各做一次確認,其中一次握手和確認合併在一起。(就這樣簡單,完全沒有別的么兒子)。

來此上面連結的Page27頁。

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.“通訊穩定”

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

--錯誤答案:.謝希仁著《計算機網路》第四版中,講 “三次握手” 的目的是 “為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”,這個只能算是表因,並不涉及本質。

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次揮手標準誕生了。