1. 程式人生 > >通俗理解TCP握手次數是三次?

通俗理解TCP握手次數是三次?

是否 class track group 至少 信道 ogl 準備 view

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/richardzrc/article/details/37567793 理解之後。應該說是至少三次就能夠保證可靠傳輸了。


看到網上一篇帖子http://www.cnblogs.com/TechZi/archive/2011/10/18/2216751.html
是這麽說的。“我Google該問題答案後發現。網絡上對於“三次握手”的過程都有非常具體的描寫敘述,但對於為什麽須要“三次握手”來建立連接卻沒有非常好的答案。僅僅能求助於書本了。”
後面有謝希德樹和還有一本書的解釋。事實上還是太書面化,不夠通俗,可是看到後面引到google論壇看到一個讓我非常愜意的答案。




https://groups.google.com/forum/#!topic/pongba/kF6O7-MFxM0/discussion




這是通信其中的基本問題, 看明確Two Generals‘ Problem:
http://en.wikipedia.org/wiki/Two_Generals‘_Problem
就非常easy明確為什麽三次握手是必須的了.
這個問題的本質是, 通過一個不全然可靠的信道, 最少須要幾次消息傳輸, 信道兩邊的人能夠對一個問題達成一致. 對於TCP來說, 不管有沒有初始

序號的要求, 想要兩邊都允許開始傳出數據, 就至少須要3次消息的交換:
0次: 顯然不行
1次: A->B, A不知道B是否允許
2次: A->B, B->A. B不知道A是否收到自己的消息, 由於信道不全然可靠
3次: A->B, B->A, A->B. 兩邊都收到了對方的ACK, 意味著各自都了解了對方的意圖, 從而能夠對是否開始通信這個最簡單的問題
達成一致.


簡單而言,就是0次顯然不行。1次B未必收到,2次。B不知道A是否收到,事實上更準確的說。是B的reply未必到A。A是不敢發的,由於不確信B是否做好準備,3次的話剛好,B->A表示B做好了準備
第三次A->B A收到了B的reply,兩方都知道對方要做什麽,A知道B準備好收,B知道A準備好發,第三次A->B沒到也沒關系,由於系統關註的是A試圖發第三次。這個應該是TCP-IP有個變量
記錄下來第三次確實發了,至於收不收到沒關系。




當然4次也能夠,但僅僅要3次就能夠確認了,所以為何不減少代價呢。TCP請求也是非常耗資源的。


從http的過程來看。首先DNS找IP,應該是GFW屏蔽了域名有google.com的url。然後更快的返回一個假的IP。雖然真實的能夠查到。可是總是比假的要慢非常多到client,所以被墻了,還沒到TCPIP這一步,這是第二步。找到IP之後才幹TCPIP。當然。GFW也可能直接屏蔽IP

通俗理解TCP握手次數是三次?