TCP報文格式
TCP報文是TCP層傳輸的數據單元,也稱為報文段。
TCP報文首部格式
l 源端口(Source Port):16位的源端口字段包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。
l 目的端口(Destination Port):16位的目的端口字段定義傳輸的目的。這個端口指明接收方計算機上的應用程序接口。
l 序列號(Sequence Number):該字段用來標識TCP源端設備向目的端設備發送的字節流,它表示在這個報文段中的第幾個數據字節。序列號是一個32位的數。
l 確認號(Acknowledge Number):TCP使用32位的確認號字段標識期望收到的下一個段的第一個字節,並聲明此前的所有數據已經正確無誤地收到,因此,確認號應該是上次已成功收到的數據字節序列號加1。收到確認號的源計算機會知道特定的段已經被收到。確認號的字段只在ACK標志被設置時才有效。
l 數據偏移(Data Offset):這個4位字段包括TCP頭大小。由於首部可能含有選項內容,因此TCP首部的長度是不確定的。首部長度的單位是32比特或4個八位組。首部長度實際上也指示了數據區在報文段中的起始偏移值。
l 保留(Reserved):6位置0的字段。為將來定義新的用途保留。、
l 控制位(Control Bits):共6位,每一位標志可以打開一個控制功能。
URG(Urgent Pointer Field Significant,緊急指針字段標志):表示TCP包的緊急指針字段有效,用來保證TCP連接不被中斷,並且督促中間齊備盡快處理這些數據。
ACK(Acknowledgement field significant,確認字段標志): 取1時表示應答字段有效,也即TCP應答號將包含在TCP段中,為0則反之。
PSH(Push Function,推功能):這個標志表示Push操作。所謂Push操作就是指在數據包到達接收端以后,立即送給應用程序,而不是在緩沖區中排隊。
RST(Reset the connection,重置連接):這個標志表示感謝連接復位請求,用來復位那些產生錯誤的連接,也被用來拒絕錯誤和非法的數據包。
SYN(Synchronize sequence numbers,同步序列號):表示同步序號,用來建立連接。
FIN(No more data from sender):表示發送端已經發送到數據末尾,數據傳送完成,發送FIN標志位的TCP段,連接將被斷開。
l 窗口(Window):目的主機使用16位的窗口字段告訴源主機它期望每次收到的數據通的字節數。
l 校驗和(Checksum):TCP頭包括16位的校驗和字段用於錯誤檢查。源主機基於部分IP頭信息,TCP頭和數據內容計算一個校驗和,目的主機也要進行相同的計算,如果收到的內容沒有錯誤過,兩個計算應該完全一樣,從而證明數據的有效性。
l 緊急指針(Urgent Pointer):緊急指針字段是一個可選的16位指針,指向段內的最后一個字節位置,這個字段只在URG標志被設置時才有效。
l 選項(Option):至少1字節的可變長字段,標識哪個選項(如果有的話)有效。如果沒有選項,這個字節等於0,說明選項的結束。這個字節等於1表示無需再有操作;等於2表示下四個字節包括源機器的最大長度(Maximum Segment Size,MSS).
l 填充(Padding):這個字段中加入額外的零,以保證TCP頭是32的整數倍。
==========================================tcp報文格式實驗=-======================
實驗六 TCP報文段的格式及協議分析
【實驗目的】
1、 分析TCP報文段的格式;
2、 了解TCP報文段首部結構以及各個字段的內容及其作用;
3、 通過觀察TCP協議的交互掌握TCP連接建立、數據傳輸、連接釋放的過程。
【實驗內容】
1、 分析TCP報文段的結構,熟悉各個字段的內容、功能、格式和取值范圍;
2、 編輯TCP報文段首部各字段的內容;
3、 單個或批量發送已經編輯好的TCP報文段;
4、 分析TCP協議的交互過程。
【實驗原理】
TCP是TCP/IP體系中面向連接的運輸層協議,提供全雙工的和可靠交付的服務。TCP報文段的格式如下圖所示:
源端口和目的端口:各占2個字節,是運輸層與應用層的服務接口。
序號:占4個字節。TCP連接傳送的數據流中的每一個字節都被編上一個序號。首部中序號字段的值指的是本報文段所發送的數據的第一個字節的序號。
確認號:占4個字節,是期望收到對方下一個報文段的數據的第一個字節的序號。
數據偏移:占4 bit,它指出報文段的數據起始處距離TCP報文段的起始處有多遠。實際上就是TCP報文段首部的長度。
保留:占6 bit,保留為今后使用。
緊急比特URG:當URG=1時,表明緊急指針有效。它告訴系統報文段中有緊急數據,應盡快傳送。
確認比特ACK:ACK=1時確認號字段才有效,ACK=0時確認號字段無效。
推送比特PUSH:接收方接收到PUSH=1的報文段時會盡快的將其交付給接收應用進程,而不再等到整個接收緩存都填滿后再向上交付。
復位比特RST:當RST=1時,表明TCP連接中出現嚴重差錯,必須釋放連接。復位比特還用來拒絕一個非法的報文段或拒絕打開一個連接。
同步比特SYN:在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,應在響應的報文段中使SYN=1和ACK=1。因此,SYN=1就表示這是一個連接請求或連接接收報文。
終止比特FIN:當FIN=1時,表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接。
窗口:占2個字節,用來控制對方發送的數據量,單位是字節,指明對方發送窗口的上限。
校驗和:占2個字節,校驗的范圍包括首部和數據兩個部分,計算校驗和時需要在報文段前加上12字節的偽首部。
緊急指針:占2個字節,指出本報文段中緊急數據最后一個字節的序號。只有當緊急比特URG=1時才有效。
選項:長度可變。TCP只規定了一種選項,即最大報文段長度MSS (Maximum Segment Size)。
TCP連接建立的過程如下圖所示:
TCP連接釋放的過程如下圖所示:
【實驗步驟】
練習一:分析TCP報文段的格式
1、 運行報文仿真編輯器;
2、 單擊工具欄上的“新建報文”按鈕,在彈出的“新建報文”對話框中選擇報文類型為“TCP”,單擊“確定”按鈕,報文仿真編輯器自動構造一個TCP報文段;
3、 也可以通過單擊工具欄上“打開”按鈕,選擇安裝目錄下Data目錄中報文仿真編輯器存檔文件:tcp.pef,報文仿真編輯器顯示預存的TCP報文段;
4、 選中報文列表框中的一條記錄,報文仿真編輯器中間部分自動顯示此條報文記錄的協議結構樹;
5、 選中協議結構樹中的“TCP首部”結點,報文仿真編輯器右側部分自動顯示當前TCP報文段首部各個字段的內容;
6、 查看TCP報文段首部中各個字段的結構和內容,分析各個字段的含義。
練習二:編輯TCP報文段格式中的字段內容
1、 在報文仿真編輯器的右側修改TCP報文段的各個字段的內容;
2、 單擊“保存”按鈕;
3、 查看修改后的字段內容。
練習三:發送和接收TCP報文段序列
1、 運行報文解析器;
2、 單擊報文解析器工具欄上的“開始捕獲”按鈕,報文解析器開始捕獲數據報;
3、 單擊報文仿真編輯器工具欄上的“發送報文”按鈕,報文仿真編輯器彈出“發送成功”對話框;
4、 單擊報文解析器工具欄上的“停止捕獲”按鈕,在報文解析器左側報文列表框中查看所接收到的報文仿真編輯器發出的報文;
5、 選中其中一條報文記錄,報文解析器中間部分自動顯示此條報文記錄的協議結構樹,比較是否與發送的報文相同。
練習四:TCP協議分析
1、 單擊報文仿真編輯器工具欄上的“打開”按鈕,選擇安裝目錄下Data目錄中報文仿真編輯器存檔文件:tcp.pef,報文仿真編輯器顯示預存的TCP報文段;
2、 單擊報文解析器工具欄上的“開始捕獲”按鈕,報文解析器開始捕獲數據報;
3、 單擊報文仿真編輯器工具欄上的“發送報文”按鈕,報文仿真編輯器彈出“發送成功”對話框,發送出報文列表框中的報文;
4、 可以看到報文解析器接收到報文仿真編輯器發出的報文,單擊報文解析器工具欄上的“停止捕獲”按鈕,停止捕獲報文;
5、 單擊工具欄上的“協議分析”按鈕,報文解析器彈出協議分析對話框。在“協議”下拉列表中選擇“TCP”,對話框下部的列表框中顯示存在的TCP連接。選擇一個TCP連接,單擊“確定”按鈕;
6、 報文解析器左側的報文列表中顯示這一次TCP連接中所有的報文,右側以圖形的方式顯示該TCP連接的交互過程。選中左側報文列表中的一條記錄,報文解析器中部顯示該報文的協議結構樹,右側的協議交互圖中以藍色突出顯示該TCP報文段;
7、 在左側的報文列表中選擇不同的TCP報文段,觀察協議交互的進行過程,以及TCP首部各個字段值的變化。
1. 記錄實驗數據
發送成功:
接收:
2.分析實驗結果
MAC幀首部
目的地址:00-24-81-1A-A8-B0
源地址:00-24-81-1A-A8-48
類型:IP
IP首部
版本:4
首部長度:20字節
服務類型:0
總長度:46
標識:73
DF:0
MF:0
片偏移:0
生存時間:128
協議:6
首部校驗和:14420
源地址:129.9.0.14
目的地址:129.9.0.15
TCP首部
源端口:1063
目的端口:69
序號:88888888
確認號:99999999
數據偏移:20字節
URG:0
ACK:1
PSH:0
RST:0
SYN:0
FIN:0
窗口:17520
校驗和:45264
緊急指針:0
(16進制顯示框)
其中:
第一行前12個字節為協議MAC幀首部中的目的硬件地址和源地址
“類型:IP”對應值為08 00
3.未知數據包的分析
本部分通過Sniffer軟件捕獲本機所在計算機網絡中的未知數據包,要求對所捕獲的數據包進行分析。
數據包一如下(下圖截取了該數據包16進制表中的前10行):
未知數據包二的16進制值
分析上述捕獲的數據包為一個什么協議的請求報文。
答:分析如下:
第一行前12個字節為協議MAC幀首部中的目的地址00-00-5e-00-01-17和源地址00-03-47-bb-af-12。
緊隨其后的兩個字節“08 00”是MAC幀首部中的類型字段,標識從上層接收到什么類型的協議,“08 00”表示從上層收到的是 IP 類型的數據報。
則接下來的數據就代表該數據報的內容。
“45 00”表示硬件類型為以太網,
“08 00”表示采用的協議類型為IP類型,
綜上得出,該數據包為一個 TCP 的請求報文。