Wireshark分析三次握手
Wireshark是非常流行的網絡封包分析軟體,功能很強大。可以截取各種網絡封包,顯示網絡封包的詳細資訊。使用wireshark的人必須了解網絡協定,否則就看不懂wireshark了。
為了安全考慮,wireshark隻能檢視封包,而不能修改封包的内容,或者發送封包。
wireshark能擷取HTTP,也能擷取HTTPS,但是不能解密HTTPS,是以wireshark看不懂HTTPS中的内容,總結,如果是處理HTTP,HTTPS 還是用Fiddler, 其他協定比如TCP,UDP 就用wireshark.
1.Wireshark的基本使用

封包詳細資訊 (Packet Details Pane)
這個面闆是我們最重要的,用來檢視協定中的每一個字段。
各行資訊分别為
Frame: 實體層的資料幀概況
Ethernet II: 資料鍊路層以太網幀頭部資訊
Internet Protocol Version 4: 網際網路層IP標頭部資訊
Transmission Control Protocol: 傳輸層T的資料段頭部資訊,此處是TCP
Hypertext Transfer Protocol: 應用層的資訊,此處是HTTP協定
封包詳細資訊與對應的OSI模型
2.TCP三向交握的基本了解
TCP三向交握過程圖
第一次握手:
建立連接配接時,用戶端發送SYN包(Seq=x)到伺服器,并進入SYN_SENT狀态,等待伺服器确認。
第二次握手:
伺服器收到SYN包,必須确認客戶的SYN(ACK=x+1),同時自己也發送一個SYN包(Seq=Y),即SYN+ACK包,此時伺服器進入SYN_RECV狀态。
第三次握手:
用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ACK=y+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED(TCP連接配接成功)狀态,完成三次握手。
TCP包的具體内容
從下圖可以看到wireshark捕獲到的TCP包中的每個字段。
TCP标志的意義
SYN:Synchronize,用于初始化和建立連接配接,它同時也用于同步裝置之間的序列号(Seq)
ACK:Acknolowege,向另一方确認它已收到SYN
Seq:Sequence number,序列号,用于表示曾經發送過資料的位元組數+1
Len:用于表示收到的位元組大小,0表示本次沒有收到資料
FIN:用于結束連接配接
注意:
- 即使Seq不為0,并不表示曾經一定發送過資料,是否發送過資料需要依據Len指令的值有沒有大于0的來判斷。
- 3次握手和4次揮手過程中一般是不會傳送資料的,是以這個過程中Len指令都是0
3.三次握手分析:
1.打開wireshark, 輸入捕獲過濾器為:tcp,顯示過濾器為:tcp.port == 80,選擇我連接配接網絡的網卡為:WLAN
2.點選右上角開始捕獲分組,進入捕獲界面
3.打開浏覽器輸入 http://www.aigony.com ,接下來即可看到捕獲資訊
圖中可以看到wireshark截獲到了三次握手的三個資料包。第四個包才是HTTP的, 這說明HTTP的确是使用TCP建立連接配接的。
第一次握手資料包
用戶端向伺服器發送連接配接請求包,标志位SYN(同步序号)置為1,序号Seq為X=0,如下圖
第二次握手的資料包
伺服器收到用戶端發過來的封包,由SYN=1知道用戶端要求建立連接配接。伺服器發回确認包, 标志位SYN和ACK都置為1。 将确認序号(Acknowledgement Number)設定為用戶端的Seq+1,即X+1= 0+1=1, 如下圖
第三次握手的資料包
用戶端收到伺服器發來的包後檢查确認序号(Acknowledgement Number)是否正确,即第一次發送的序号加1(X+1=1)。以及标志位ACK是否為1。若正确,用戶端再次發送确認包(ACK),SYN标志位為0,ACK标志位為1。 确認序号(Acknowledgement Number)為Y+= 0+1= 1,發送序号Seq為X+1=1。伺服器收到後确認序号值與ACK=1則連接配接建立成功,可以傳送資料了。 如下圖:
就這樣通過TCP三向交握,建立了HTTP連接配接 。
本文參考
[1] Wireshark怎麼抓包、wireshark抓包詳細圖文教程
[2] TCP 3-Way Handshake (SYN, SYN-ACK,ACK)
[3] OSI七層模型與TCP/IP五層模型
[4] Wireshark抓包分析 TCP三向交握/四次揮手詳解