TCP報文頭解析介紹

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 字節的整倍數。

作者:女街景地圖
鏈接:http://www.haowaiwenda.com/article/170
來源:號外問答網
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章