按照個人理解說一下TCP 爲何三次握手而不是兩次握手。
一步一步來。ios
TCP是可靠的傳輸,握手指的是TCP創建連接,怎麼才能夠可靠的創建連接呢?git
A-------->B
A要發送數據給B,若是沒有創建連接就直接發送,大機率石沉大海。因此至少要創建連接。
A先發一個創建連接的請求,B收到後告訴A:「我收到了」。因此須要A發送一次 B發送一次來確保A發送給B是通的。
(這樣真的可靠嗎?也有可能B告訴A「我收到了」後,這個通道不通了,接下來發送數據給B,B收不到,可是這種狀況極少,TCP 有其餘機制來得知這種狀況)github
A-------->B
B-------->A
從2得知,A到B創建連接須要A給B發一次 B給A發一次兩個包,那麼AB互相創建連接須要4次,可是,B告訴A它收到了和B請求跟A創建連接這兩個包能夠合成一個,因此須要3次便可tcp
從2和3知道,兩個包,兩次握手只能確保單通道是可靠的,TCP是雙工的,須要互相確認均可以發包和收包,因此不能兩次握手。視頻
我的簡介:高級開發工程師,興趣和領域(Unity、Unreal、cocos creator、安卓終端開發、ios終端開發、音視頻開發、圖形學),歡迎加W:wlxklyh 探討問題。(歡迎star:https://github.com/wlxklyh/SoftRenderer)開發