摘要:而上面兩種情況,如果使用三次握手就可以成功避免,三次握手完成的兩個重要功能既要雙方做好發送數據的準備工作雙方都知道彼此已準備好允許雙方就初始序列號進行協商,這個序列號在握手過程中被發送和確認
我們都知道tcp協議需要三次握手,那為什么不是兩次握手呢,關于這個疑問我查了很多資料,看到很多的解釋,現歸納總結如下,方便我們理解記憶
如果是兩次握手,我們一起來看看下面兩種場景
1.造成資源浪費
Client向Server發送了一個a1的包
假如這時由于傳輸鏈路上遇到故障,導致a1傳輸到Server的時間特別長 假設1min
在這一分鐘的時間內,由于Client沒有收到Server對于a1包的確認,Client會以為上一個包發送丟了或者失敗
那么Client會再發送一個a2的包
Client又向Server發送了一個a2的包
這次Server正常收到
于是Server向Client發送了一個b2的確認包
Client和Server建立鏈接
而隨后滯后的a1包傳到了Server,Server又會返回b1包確認
但是由于Client已經清除了a1包,所以Client會丟棄掉這個包,但是Server又會保持這個相當于“僵尸”的連接
這樣就會造成白白浪費資源
在謝希仁著《計算機網絡》第四版中講“三次握手”的目的是“為了防止已失效的連接請求報文段又突然傳送到服務器,因為產生錯誤”在另一部經典的《計算機網絡》(AndrewS.Tanenbaum著,第四版)一書中講“三次握手”的目的是為了解決“網絡中存在延遲的重復分組”的問題。
我們會發現這兩種不同的表述其實闡明的是同一個問題。
2.死鎖可能發生
Client向Server發送了一個連接請求分組
Server收到這個分組,并發送了確認應答分組
按照兩次握手的協定,Server認為已經成功的建立連接,可以開始發送數據分組
而此時Server的應答分組傳輸丟失了,Client不知道Server是否已準備好,不知道Server建立什么樣的序列號
Client甚至懷疑Server是否收到了自己的連接請求分組,在這種情況下,Client認為連接還未建立成功,將忽略Server發來的任何數據請求,只等待連接確認影帶分組。而Server在發出的分組超時后,重復發送同樣的分組,資源就形成了死鎖。
而上面兩種情況,如果使用三次握手就可以成功避免,三次握手完成的兩個重要功能
既要雙方做好發送數據的準備工作(雙方都知道彼此已準備好)
允許雙方就初始序列號進行協商,這個序列號在握手過程中被發送和確認
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104281.html
摘要:而上面兩種情況,如果使用三次握手就可以成功避免,三次握手完成的兩個重要功能既要雙方做好發送數據的準備工作雙方都知道彼此已準備好允許雙方就初始序列號進行協商,這個序列號在握手過程中被發送和確認 我們都知道tcp協議需要三次握手,那為什么不是兩次握手呢,關于這個疑問我查了很多資料,看到很多的解釋,現歸納總結如下,方便我們理解記憶 如果是兩次握手,我們一起來看看下面兩種場景 1.造成資源浪費...
摘要:原理套接字概念套接字是通信的基石,是支持協議的網絡通信的基本操作單元。建立連接建立連接至少需要一對套接字,其中一個運行于客戶端,稱為,另一個運行于服務器端,稱為。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。 最近在惡補計算機網絡方面的知識,之前對于TCP的三次握手和四次分手也是模模糊糊,對于其中的細節更是渾然不知,最近看了很多這方面的知識,也在系統的學習計算機...
閱讀 1697·2021-10-09 09:44
閱讀 3263·2021-09-27 13:36
閱讀 1520·2021-09-22 15:33
閱讀 1274·2021-09-22 15:23
閱讀 1159·2021-09-06 15:02
閱讀 1695·2019-08-29 16:14
閱讀 2901·2019-08-29 15:26
閱讀 2408·2019-08-28 18:08