TCP資料報結構以及三次握手

2021-09-13 13:33:36 字數 2106 閱讀 6411

tcp(transmission control protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的通訊協議,資料在傳輸前要建立連線,傳輸完畢後還要斷開連線。

客戶端在收發資料前要使用 connect() 函式和伺服器建立連線。建立連線的目的是保證ip位址、埠、物理鏈路等正確無誤,為資料的傳輸開闢通道。

tcp建立連線時要傳輸三個資料報,俗稱三次握手.(three-way handshaking)。可以形象的比喻為下面的對話:

我們先來看一下tcp資料報的結構:

帶陰影的幾個字段需要重點說明一下:

1) 序號:seq(sequence number)序號佔32位,用來標識從計算機a傳送到計算機b的資料報的序號,計算機傳送資料時對此進行標記。

2) 確認號:ack(acknowledge number)確認號佔32位,客戶端和伺服器端都可以傳送,ack = seq + 1。

3) 標誌位:每個標誌位占用1bit,共有6個,分別為 urg、ack、psh、rst、syn、fin,具體含義如下:

對英文本母縮寫的總結:seq 是 sequence 的縮寫,表示序列;ack(ack) 是 acknowledge 的縮寫,表示確認;syn 是 synchronous 的縮寫,願意是「同步的」,這裡表示建立同步連線;fin 是 finish 的縮寫,表示完成。
使用 connect() 建立連線時,客戶端和伺服器端會相互傳送三個資料報,請看下圖:

客戶端呼叫 socket() 函式建立套接字後,因為沒有建立連線,所以套接字處於closed狀態;伺服器端呼叫 listen() 函式後,套接字進入listen狀態,開始監聽客戶端請求。

這個時候,客戶端開始發起請求:

1) 當客戶端呼叫 connect() 函式後,tcp協議會組建乙個資料報,並設定 syn 標誌位,表示該資料報是用來建立同步連線的。同時生成乙個隨機數字 1000,填充「序號(seq)」字段,表示該資料報的序號。完成這些工作,開始向伺服器端傳送資料報,客戶端就進入了syn-send狀態。

2) 伺服器端收到資料報,檢測到已經設定了 syn 標誌位,就知道這是客戶端發來的建立連線的「請求包」。伺服器端也會組建乙個資料報,並設定 syn 和 ack 標誌位,syn 表示該資料報用來建立連線,ack 用來確認收到了剛才客戶端傳送的資料報。

伺服器生成乙個隨機數 2000,填充「序號(seq)」字段。2000 和客戶端資料報沒有關係。

伺服器將客戶端資料報序號(1000)加1,得到1001,並用這個數字填充「確認號(ack)」字段。

伺服器將資料報發出,進入syn-recv狀態。

3) 客戶端收到資料報,檢測到已經設定了 syn 和 ack 標誌位,就知道這是伺服器發來的「確認包」。客戶端會檢測「確認號(ack)」字段,看它的值是否為 1000+1,如果是就說明連線建立成功。

接下來,客戶端會繼續組建資料報,並設定 ack 標誌位,表示客戶端正確接收了伺服器發來的「確認包」。同時,將剛才伺服器發來的資料報序號(2000)加1,得到 2001,並用這個數字來填充「確認號(ack)」字段。

客戶端將資料報發出,進入establised狀態,表示連線已經成功建立。

4) 伺服器端收到資料報,檢測到已經設定了 ack 標誌位,就知道這是客戶端發來的「確認包」。伺服器會檢測「確認號(ack)」字段,看它的值是否為 2000+1,如果是就說明連線建立成功,伺服器進入establised狀態。

至此,客戶端和伺服器都進入了establised狀態,連線建立成功,接下來就可以收發資料了。

三次握手的關鍵是要確認對方收到了自己的資料報,這個目標就是通過「確認號(ack)」字段實現的。計算機會記錄下自己傳送的資料報序號 seq,待收到對方的資料報後,檢測「確認號(ack)」字段,看ack = seq + 1是否成立,如果成立說明對方正確收到了自己的資料報。

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層,有個flags欄位,這個欄位有以下幾個標識 syn,fin,ack,psh,rst,urg.其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是 syn表示建立連線,fin表示關閉連線,ack表示響應,psh表示有 data資料傳輸,rst表示連線重置。其中,ack是可能與sy...

TCP 三次握手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...