C 面試寶典 TCP三次握手的作用

2021-10-05 09:57:47 字數 1124 閱讀 8660

如果只有兩次握手,當客戶端的syn請求連線在網路管道中阻塞,客戶端沒有接收到ack報文,就會重新傳送syn,由於沒有第三次握手,伺服器不清楚客戶端是否收到了自己傳送的建立連線的ack確認訊號,所以每收到乙個syn就只能主動建立乙個連線,這會造成什麼情況呢?如果客戶端的syn阻塞了,重**送多次syn報文,那麼伺服器在收到請求後就會建立多個冗餘的無效鏈結,造成不必要的資源浪費。

即兩次握手會造成訊息滯留情況下,伺服器重複接受無用的連線請求syn報文,而造成重複分配資源。

另外一種是 如果想確定雙通道通暢,必須使用三個包的傳送接收,也就是三次握手:「這個問題的本質是, 通道不可靠, 但是通訊雙發需要就某個問題達成一致. 而要解決這個問題, 無論你在訊息中包含什麼資訊, 三次通訊是理論上的最小值. 所以三次握手不是tcp本身的要求, 而是為了滿足"在不可靠通道上可靠地傳輸資訊"這一需求所導致的. 請注意這裡的本質需求,通道不可靠, 資料傳輸要可靠. 三次達到了, 那後面你想接著握手也好, 發資料也好, 跟進行可靠資訊傳輸的需求就沒關係了. 因此,如果通道是可靠的, 即無論什麼時候發出訊息, 對方一定能收到, 或者你不關心是否要保證對方收到你的訊息, 那就能像udp那樣直接傳送訊息就可以了.」

三次是保證雙方互相明確對方能收能發的最低值。理論上講不論握手多少次都不能確認一條通道是「可靠」的,但通過3次握手可以至少確認它是「可用」的,再往上加握手次數不過是提高「它是可用的」這個結論的可信程度。另外tcp的可靠傳輸更多的是靠重傳機制來保證的

三次握手的本質是為了同步雙方的初始序列號:

為了實現可靠資料傳輸, tcp 協議的通訊雙方, 都必須維護乙個序列號, 以標識傳送出去的資料報中, 哪些是已經被對方收到的。 三次握手的過程即是通訊雙方相互告知序列號起始值, 並確認對方已經收到了序列號起始值的必經步驟。如果只是兩次握手, 至多只有連線發起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認。tcp建立連線的握手,實質上就是建立乙個雙向的可靠通訊連線,一邊乙個來回,每一邊都自帶超時重傳來確保可靠性(而不是靠握手的次數)。tcp的3次握手是優化的結果,其實它應該是4次握手,由於是從零開始的建立連線,因此將syn的ack以及被動開啟的syn合併成了乙個syn-ack。

握手的作用,旨在確定兩個雙向的初始序列號,tcp用序列號來編址傳輸的位元組,由於是兩個方向的連線,所以需要兩個序列號,握手過程不傳輸任何位元組,僅僅確定初始序列號。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

面試 網路 TCP的三次握手

tcp運輸連線的建立和釋放是每一次面向連線的通訊中必不可少的過程。運輸連線有三個階段 連線建立 資料傳送和連線釋放。tcp的連線建立可以簡稱為 三次握手 three way handshake 1 a b 嗨!我想跟你通訊 2 b a 嗨!可以啊 3 a b 嗨!我要給你傳資料了 then 資料傳送...

tcp的三次握手 傳輸層 TCP 三次握手

使用tcp協議進行通訊的雙方必須先建立連線,然後才能開始傳輸資料。為了確保連線雙方可靠性,在雙方建立連線時,tcp協議採用了三次握手策略。如圖 客戶端傳送帶有syn標誌的連線請求報文段,然後進入syn send狀態,等待服務端的確認。服務端接收到客戶端的syn報文段後,需要傳送ack資訊對這個syn...