TCP 請求頭

weixin_34293059發表於2018-06-04

TCP 請求頭結構

2843224-1b76e586332a7b3e.png

Source Port(源埠):源埠號 (佔用16位),傳送端程式埠

Destination Port(目的埠):目的埠號(佔用16位),接收端程式埠

Sequence Number(傳送資料序號):用來標識從TCP發端向TCP收端傳送的資料位元組流,它表示在這個報文段中的的第一個資料位元組在資料流中的序號;主要用來解決網路報亂序的問題;(佔用32位)

Acknowledgment Number (ACK 確認號): 32位確認序列號包含傳送確認的一端所期望收到的下一個序號,因此,確認序號應當是上次已成功收到資料位元組序號加1。不過,只有當標誌位中的ACK標誌(下面介紹)為1時該確認序列號的欄位才有效。主要用來解決不丟包的問題;

例如:傳輸一個檔案,檔案比較大的 TCP 會把該檔案拆成多段進行傳送,
假如每段1000個位元組,第一次的時候 Sequence Number 會隨機一個 int 數值,假如為1。
第一次傳送 Sequence Number=1,
第一次響應 Acknowledgment Number = 1001
第二次傳送 Sequence Number=1001
第二次響應 Acknowledgment Number = 2001
... ...

Data Offset(資料偏移量) : 資料偏移量(4位)給出首部中32 bit字的數目,需要這個值是因為任選欄位的長度是可變的。這個欄位佔4bit(最多能表示15個32bit的的字,即4*15=60個位元組的首部長度),因此TCP最多有60位元組的首部。然而,沒有任選欄位,正常的長度是20位元組; 如果有額外的 TCP 的 option 選項,還得加上 option 的長度。

Reserved(保留欄位):保留欄位,目前還沒有使用。

TCP Flags(控制位) :TCP控制位(6位),每一位代表一個控制位,它們中的多個可同時被設定為1,主要是用於操控TCP的狀態機的,依次為URG,ACK,PSH,RST,SYN,FIN。每個標誌位的意思如下:

  • URG:此標誌表示TCP包的緊急指標域(後面馬上就要說到)有效,用來保證TCP連線不被中斷,並且督促中間層裝置要儘快處理這些資料;
  • ACK:此標誌表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP資料包中;有兩個取值:0和1,為1的時候表示應答域有效,反之為0;
  • PSH:這個標誌位表示Push操作。所謂Push操作就是指在資料包到達接收端以後,立即傳送給應用程式,而不是在緩衝區中排隊;
  • RST:這個標誌表示連線復位請求。用來複位那些產生錯誤的連線,也被用來拒絕錯誤和非法的資料包;
  • SYN:表示同步序號,用來建立連線。SYN標誌位和ACK標誌位搭配使用,當連線請求的時候,SYN=1,ACK=0;連線被響應的時候,SYN=1,ACK=1;這個標誌的資料包經常被用來進行埠掃描。掃描者傳送一個只有SYN的資料包,如果對方主機響應了一個資料包回來 ,就表明這臺主機存在這個埠;但是由於這種掃描方式只是進行TCP三次握手的第一次握手,因此這種掃描的成功表示被掃描的機器不很安全,一臺安全的主機將會強制要求一個連線嚴格的進行TCP的三次握手;
  • FIN: 表示傳送端已經達到資料末尾,也就是說雙方的資料傳送完成,沒有資料可以傳送了,傳送FIN標誌位的TCP資料包後,連線將被斷開。這個標誌的資料包也經常被用於進行埠掃描。

Window(視窗) :視窗大小(16位),表示接收端可用緩衝區大小,根據緩衝區大小和每次包大小,就可以計算出同時處理的 TCP 包的個數。同時處理的包個數越多,則網速越快。

Checksum (校驗和): 用來檢查 TCP 包是否完整(16位)

Urgent Pointer (緊急指標):表示應緊急處理的資料位置(16位)。路由器可以把緊急的資料包優先處理。

Options(可選欄位):可選欄位,可變長度,最長為40位元組。(因為 Data Offset 最多能表示60個位元組長度的 TCP 頭資訊,固定的 TCP 頭部為 20 位元組)

Padding (填充):填充位。因為 Data Offset 只能表示 TCP 頭部的長度 必須是 4 位元組的整倍數。如果 Options 選項不足 4位元組的整倍數,就需要 Padding 填充為 4 位元組的整倍數。

相關文章