碼仔漫畫 | TCP的三次握手

漫畫學知識,輕松又有趣

image
image
image
image
image
image
image
image
image
image
image
image

1、三次握手才可以阻止重復歷史連接的初始化(主要原因)
2、三次握手才可以同步雙方的初始序列號
3、三次握手才可以避免資源浪費

image
image

如圖:

image

客戶端連續(xù)發(fā)送多次 SYN 建立連接的報文,在網(wǎng)絡(luò)擁堵等情況下:

一個「舊 SYN 報文」比「最新的 SYN 」 報文早到達了服務(wù)端;

那么此時服務(wù)端就會回一個 SYN + ACK 報文給客戶端;

客戶端收到后可以根據(jù)自身的上下文,判斷這是一個歷史連接(序列號過期或超時),那么客戶端就會發(fā)送 RST 報文給服務(wù)端,表示中止這一次連接。

如果是兩次握手連接,就不能判斷當前連接是否是歷史連接,三次握手則可以在客戶端(發(fā)送方)準備發(fā)送第三次報文時,客戶端因有足夠的上下文來判斷當前連接是否是歷史連接:

如果是歷史連接(序列號過期或超時),則第三次握手發(fā)送的報文是 RST 報文,以此中止歷史連接;

如果不是歷史連接,則第三次發(fā)送的報文是 ACK 報文,通信雙方就會成功建立連接;

所以, TCP 使用三次握手建立連接的最主要原因是防止歷史連接初始化了連接。

image
image

TCP 協(xié)議的通信雙方, 都必須維護一個「序列號」, 序列號是可靠傳輸?shù)囊粋€關(guān)鍵因素,它的作用:

接收方可以去除重復的數(shù)據(jù);

接收方可以根據(jù)數(shù)據(jù)包的序列號按序接收;

可以標識發(fā)送出去的數(shù)據(jù)包中, 哪些是已經(jīng)被對方收到的;

可見,序列號在 TCP 連接中占據(jù)著非常重要的作用,所以當客戶端發(fā)送攜帶「初始序列號」的 SYN 報文的時候,需要服務(wù)端回一個 ACK 應答報文,表示客戶端的 SYN 報文已被服務(wù)端成功接收,那當服務(wù)端發(fā)送「初始序列號」給客戶端的時候,依然也要得到客戶端的應答回應,這樣一來一回,才能確保雙方的初始序列號能被可靠的同步。

image

在給你補充一點:

image

如果只有「兩次握手」,當客戶端的 SYN 請求連接在網(wǎng)絡(luò)中阻塞,客戶端沒有接收到 ACK 報文,就會重新發(fā)送 SYN ,由于沒有第三次握手,服務(wù)器不清楚客戶端是否收到了自己發(fā)送的建立連接的 ACK 確認信號,所以每收到一個 SYN 就只能先主動建立一個連接,這會造成什么情況呢?

如果客戶端的 SYN 阻塞了,重復發(fā)送多次 SYN 報文,那么服務(wù)器在收到請求后就會建立多個冗余的無效鏈接,造成不必要的資源浪費。

image
image
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容