TCP 為什么三次握手而不是兩次握手(面試淺顯口述版本)


按照我的理解說一下TCP 為什么三次握手而不是兩次握手。
一步一步來。

1. TCP是可靠的

TCP是可靠的傳輸,握手指的是TCP建立鏈接,怎么才可以可靠的建立鏈接呢?

2. 最簡單的建立一個可靠發送通道

A-------->B
A要發送數據給B,如果沒有建立鏈接就直接發送,大概率石沉大海。所以至少要建立鏈接。
A先發一個建立鏈接的請求,B收到后告訴A:“我收到了”。所以需要A發送一次 B發送一次來確保A發送給B是通的。
(這樣真的可靠嗎?也有可能B告訴A“我收到了”后,這個通道不通了,接下來發送數據給B,B收不到,但是這種情況極少,TCP 有其他機制來得知這種情況)

3.AB互相建立鏈接需要發送多少個包

A-------->B
B-------->A
從2得知,A到B建立鏈接需要A給B發一次 B給A發一次兩個包,那么AB互相建立鏈接需要4次,但是,B告訴A它收到了和B請求跟A建立鏈接這兩個包可以合成一個,所以需要3次即可

4.AB互相建立鏈接2個包可以嗎?

從2和3知道,兩個包,兩次握手只能確保單通道是可靠的,TCP是雙工的,需要互相確認都可以發包和收包,所以不能兩次握手。

5.正式的過程

  1. A向B請求建立鏈接,SYN標志位標記,seq填充為x。
  2. B收到A的建立請求,然后發送SYN標志位標記,ACK標記,ack=x+1,seq=y 給A
  3. A收到B的收到包和建立請求包,然后發送ACK標記表示接收到SYN包,ack=y+1,seq=x+1

個人簡介:高級開發工程師,興趣和領域(Unity、Unreal、cocos creator、安卓終端開發、ios終端開發、音視頻開發、圖形學),歡迎加W:wlxklyh 探討問題。(歡迎star:https://github.com/wlxklyh/SoftRenderer)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM