為什麼要三次握手

2021-07-10 16:19:32 字數 1279 閱讀 7148

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程:

1. 客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小(表示客戶端上用來儲存從伺服器傳送來的傳入段的緩衝區的大小)。

2. 伺服器收到客戶端傳送過來的syn報文後,向客戶端傳送乙個syn和ack都置位的tcp報文,其中包含它選擇的初始序列號y、對客戶端的序列號的確認x+1和乙個視窗大小(表示伺服器上用來儲存從客戶端傳送來的傳入段的緩衝區的大小)。

3. .客戶端接收到伺服器端返回的syn+ack報文後,向伺服器端返回乙個確認號y+1和序號x+1的ack報文,乙個標準的tcp連線完成。

tcp 使用類似的握手過程來結束連線。這可確保兩個主機均能完成傳輸並確保所有的資料均得以接收

tcp client

flags

tcp server

1 send syn (seq=x)

----syn--->

syn received

2 syn/ack received

<---syn/ack----

send syn (seq=y), ack (x+1)

3 send ack (y+1)

----ack--->

ack received, connection established

w: isn (initial sequence number) of

the client

x: isn of

the server

如果採用兩次的話,會出現下面這種情況。

比如是a機要連到b機,結果傳送的連線資訊由於某種原因沒有到達b機;

於是,a機又發了一次,結果這次b收到了,於是就發資訊回來,兩機就連線。

傳完東西後,斷開。

結果這時候,原先沒有到達的連線資訊突然又傳到了b機,於是b機發資訊給a,然後b機就以為和a連上了,這個時候b機就在等待a傳東西過去。

考慮計算機a和b之間的通訊,假定b給a傳送乙個連線請求分組,a收到了這個分組,並傳送了確認應答分組。按照兩次握手的協定,a認為連線已經成功地建立了,可以開始傳送資料分組。可是,b在a的應答分組在傳輸中被丟失的情況下,將不知道a是否已準備好,不知道a建議什麼樣的序列號,b甚至懷疑a是否收到自己的連線請求分組。在這種情況下,b認為連線還未建立成功,將忽略a發來的任何資料分組,只等待連線確認應答分組。而a在發出的分組超時後,重**送同樣的分組。這樣就形成了死鎖

TCP為什麼要三次握手?

在 計算機網路 一書中其中有提到,三次握手的目的是 為了防止已經失效的連線請求報文段突然又傳到服務端,因而產生錯誤 這種情況是 一端 client a發出去的第乙個連線請求報文並沒有丟失,而是因為某些未知的原因在某個網路節點上發生滯留,導致延遲到連線釋放以後的某個時間才到達另一端 server b。...

為什麼TCP連線要三次握手?

因為網路層是不可靠的。雙方在通訊的時候,就算是 tcp 連線,在網路層都有可能丟包,只不過是傳輸層有處理丟包的策略。若 tcp 連線是兩次握手,那麼突然來了乙個已失效的客戶端連線請求報文,伺服器會把這次失效的連線當成正常的連線對待。謝希仁版計算機網路中給出的例子如下 client 發出的第乙個連線請...

TCP為什麼要進行三次握手

今天無意中想起了這個問題,談談我的理解。先上圖 先約定兩個名字。a代表連線建立的發起方 客戶端 b代表連線建立的接收方 服務端 tcp連線是在實際通道中是全雙工的,即邏輯上分成兩個通道,乙個是a b,另乙個b a。要在不可靠的通道上建立起可靠的連線,那麼必須保證兩個通道是可靠的。而三次握手的過程就是...