TCP爲什麼三次握手又爲什麼四次揮手

結論

爲了實現可靠的數據傳輸,TCP協議的通信雙方,都必須維護一個序列號,以標識發送出去數據包,有哪些已經被對方收到。三次握手的過程就是雙方相互告知序列號的起始值,並確認對方已經收到起始值的必經步驟。
如果只有兩次,至多隻有連接發起方的起始序列號能被確認,另一方的序列號起始值不能被確認。

爲什麼TCP需要握手

  • 爲什麼TCP需要握手,能不能不握手?

對比UDP和TCP通信流程,可以發現,在UCP協議中,是沒有握手這個操作的。這就引起TCP和UDP的一個基本區別。

  • TCP是可靠通信協議:接收方收到的數據是完整、有序、無差錯的。
  • UDP不可靠傳輸:接收方收到的數據可能存在丟失,順序也不一定能保證。
    爲什麼TCP能實現可靠傳輸,UDP不能?
    TCP爲了實現可靠傳輸,通信雙方需要判斷自己已經發送的數據包能否被接收方收到,如果沒有收到,就需要重發。爲了實現這個需求,很自然的引出序號(SYN)建立連接確認號ACK
    TCP數據包結構圖

爲什麼是三次握手

爲了實現可靠傳輸,發送方和接收方始終需要同步SYN序號,注意的是, 序號並不是從 0 開始的, 而是由發送方隨機選擇的初始序列號 ( Initial Sequence Number, ISN )開始 , 由於 TCP 是一個雙向通信協議, 通信雙方都有能力發送信息, 並接收響應。 因此, 通信雙方都需要隨機產生一個初始的序列號, 並且把這個起始值告訴對方
在這裏插入圖片描述

爲什麼是四次揮手?

因爲TCP通信是全雙工通信。
要實現可靠的連接關閉
A發請求斷開,發送結束報文FIN
B確認A的斷開。但是此時A還可以接收數據,B還可以發送數據。B此時不會立即關閉socket,先回復一個ack告訴A我接收到了FIN,等到全部報文發送完了,我再發送FINB請求斷開。
A確認B斷開。真正的斷開連接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章