TCP 爲何三次握手而不是兩次握手(面試淺顯口述版本)

按照個人理解說一下TCP 爲何三次握手而不是兩次握手。
一步一步來。ios

1. TCP是可靠的

TCP是可靠的傳輸,握手指的是TCP創建連接,怎麼才能夠可靠的創建連接呢?git

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

A-------->B
A要發送數據給B,若是沒有創建連接就直接發送,大機率石沉大海。因此至少要創建連接。
A先發一個創建連接的請求,B收到後告訴A:「我收到了」。因此須要A發送一次 B發送一次來確保A發送給B是通的。
(這樣真的可靠嗎?也有可能B告訴A「我收到了」後,這個通道不通了,接下來發送數據給B,B收不到,可是這種狀況極少,TCP 有其餘機制來得知這種狀況)github

3.AB互相創建連接須要發送多少個包

A-------->B
B-------->A
從2得知,A到B創建連接須要A給B發一次 B給A發一次兩個包,那麼AB互相創建連接須要4次,可是,B告訴A它收到了和B請求跟A創建連接這兩個包能夠合成一個,因此須要3次便可tcp

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)開發

相關文章
相關標籤/搜索