實驗四 TCP報文的捕獲與分析
——實驗報告
一、實驗目的
(1)掌握TCP建立連接的工作機制。
(2)掌握借助Wireshark捕捉TCP三次握手機制。
(3)掌握SYN、ACK標志的使用。
二、實驗內容
用Wireshark軟件捕捉TCP三次握手機制。
三、實驗原理
TCP報文段格式如圖1所示。
圖1 TCP報文段格式
表1 TCP的標志位含義
TCP的標志位 |
英文簡寫 |
含義 |
緊急標志位 |
URG |
表示數據包的緊急指針域有效,用來保證連接不被阻斷,並督促中間設備盡快處理 |
確認標志位 |
ACK |
對已接收的數據包進行確認 |
推送標志位 |
PSH |
表示該數據包被對方接收后應立即交給上層應用,而不在緩沖區排隊 |
重置標志位 |
RST |
用於連接復位、拒絕錯誤和非法的數據包 |
同步標志位 |
SYN |
用於建立會話連接,同步序列號 |
完成標志位 |
FIN |
表示已經沒有數據要發送了,即將關閉連接 |
三次握手機制實驗原理如圖2所示。
TCP的序號和確認號:
32位序號 seq:Sequence number 縮寫seq ,TCP通信過程中某一個傳輸方向上的字節流的每個字節的序號,通過這個來確認發送的數據有序,比如現在序列號為1000,發送了1000,下一個序列號就是2000;
32位確認號 ack:Acknowledge number 縮寫ack,TCP對上一次seq序號做出的確認號,用來響應TCP報文段,給收到的TCP報文段的序號seq加1。
區分ack和ACK:
小寫的ack,代表的是頭部的確認號Acknowledge number, 縮寫ack,是對上一個包的序號進行確認的號,ack=seq+1;
大寫的ACK,則是上面說的TCP首部的標志位,用於標志的TCP包是否對上一個包進行了確認操作,如果確認了,則把ACK標志位設置成1。
三次握手機制過程:
客戶端發送SYN報文,並置發送序號為X;服務端發送SYN和ACK報文,並置發送序號為Y,確認序號為X+1;客戶端發送ACK報文,並置發送序號為X+1,確認序號為Y+1。
圖2 三次握手機制工作示意圖
四、實驗環境
交換式網絡、windows操作系統、Wireshark軟件
注意:在做這個實驗的過程中,例如從打開某一網頁獲得TCP包從而分析TCP的三次握手機制過程中,容易犯先打開網頁再開始抓包的錯誤,正確的做法是先在Whireshark軟件中設置TCP抓包,然后再打開一個網頁。
五、實驗內容與步驟
(1)開啟Wireshark軟件
在捕捉接口對話框中選中網卡接口,然后點擊“Optinos”進行包過濾,如圖3所示。
圖3 Wireshark捕獲
(2)過濾TCP數據包
在隨后出現的的下列對話框中,在“Capture Filter”處填寫TCP,從而捕捉到TCP包,進而獲得TCP三次握手的建立機制,然后點擊“Start”。如圖4所示。
圖4 TCP過濾設置
(3)TCP三次握手機制生成與分析
訪問某一網站,則Whireshark捕捉到的TCP三次握手的信息,如圖5所示,以前三行為例解析一下。
圖5 捕獲到的三次握手通信包
- 第一行對應的是第一次握手,其中[SYN]出現表明為三次握手的開始的標志。
客戶端59361端口號向服務器端80號端口發送一個標志為SYN=1且含有初始化序列值seq=0的數據包,開始建立會話,在初始化會話過程中,通信雙方還在窗口大小Win、最大報文段長度MSS等方面進行協商。Source port為59361,Destination port為80,打開編號為1所示的下拉菜單,會出現對應項的更加詳細的解析,如圖6所示。
圖6 SYN第一次握手
- 第二行對應的[SYN,ACK]表明為二次握手,是對建立的確認。
服務器端80端口號向客戶端59361號端口發送包含確認值的數據段,如圖7總Transmission Control Protocol(TCP)所示,其值等於所收到的序列值加一,即ACK=1,其自身的序列號為0;並對MSS更改為1460。源端口號Src Port為80,目的端口號Dst Port為59361。
圖7 SYN、ACK第二次握手
- 第三行對應的是第三次握手
客戶端59361端口號向服務器端80號端口發送確認值Seq=1、Ack=1(59361接收到的序列值加1),這便完成了三次握手的建立。如圖8所示對應答的應答為第三次握手。
圖8 ACK第三次握手
圖9 http
五、實驗心得
這次實驗更系統地學習了解TCP三次握手建立連接的全過程,明白了TCP報文格式、標志位等內容含義,以及建立的三次握手菜單解析。TCP三次握手過程中,傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。實驗過程中也遇到了一些問題,比如不熟悉握手菜單中的一些英文內容,還有可能由於版本不同,導致顯示建立連接的只有端口號。另外,與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”四次揮手過程。
若有不足,懇請指正,感謝!