用 Wireshark 圖解 TCP 三次握手

發表於2016-11-28

一、什麼是 Wireshark ?

簡單地說,Wireshark 是抓包工具。官網說,“Wireshark 是一個網路包分析工具。 網路資料包分析儀將嘗試捕獲網路資料包並試圖儘可能詳盡顯示該資料包。”
推薦一本書《Wireshark 網路分析就這麼簡單》,Wireshark 工具下載地址 https://www.wireshark.org/download.html。

Wireshark 不單單能抓包,主要的 Features 是對資料包進行各種的分析。下載開啟介面非常簡單直觀:

tcp01

最上面是 Packet List 視窗,它列出了所有網路包。

在 Packet List 中選定的網路包會詳細地顯示在中間的 Packet Details 視窗中。

最底下是 Packet Bytes Details 視窗(16 進位制資料),我們一般不會用到它。

二、我們抓什麼包呢?如題 TCP

TCP 一臉懵逼。記得上次在 《圖解Http協議》得知,HTTP 是一個客戶端和伺服器端請求和響應的標準TCP。其實建立在 TCP 之上的。那我們就抓 HTTP,這很簡單。

三、實操 Wireshark

選擇 Capture – Options,選擇當前網路,點選 Start 。如圖:

tcp02-1024x846

瀏覽器開啟我的部落格 www.bysocket.com ,然後在 Wireshark 中的過濾器輸入部落格 IP 過濾:ip.addr == 106.14.40.18

選擇第一行,如第一張圖,簡單介紹下 Packet Details 視窗引數詳情:

Frame – 物理層
Ethernet – 資料鏈路層
Internet Protocol Version – 網路層
Transmission Control Protocol – 傳輸層

大家知道 網路層次劃分為 標準的OSI七層模型,還有 TCP/IP四層協議 以及 TCP/IP五層協議。如圖:

705728-20160424234827195-1493107425

其中,Transmission Control Protocol – 傳輸層是我們最為關心的。如圖已經展開了:

tcp04-1024x564

具體我們先學習 TCP 報文段格式:

tcp05

那麼第二個紅框,由上至下,一一大家可以對應下,重點的是:
Sequence number – 序號
Acknowledgment number – 確認號
Flags – 標誌位
— Acknowledgment 確認位
— Push 急迫位
— Reset 重置位
— Syn 同步位
— Fin 終止位

a. 第一次握手標誌位
localhost Seq=0 -> 部落格地址
從標誌位看出,同步位有值,在做請求(SYN):Syn 同步位為1
tcp06-1024x387

b. 第二次握手標誌位
部落格地址 Seq=0 Ack=1 -> localhost
從標誌位看出,確認位、同步位有值,在做應答(SYN+ACK):Syn 同步位為 1 、Acknowledgment 確認位為 1
tcp07

c. 第三次握手標誌位
localhost Seq=1 Ack=1 -> 部落格地址 (注: Seq=Seq+1)
從標誌位看出,只有確認位有值,在做再次確認(SYN):Acknowledgment 確認位為 1
tcp08
綜上所述,一個完整的三次握手就是:請求(SYN) — 應答(SYN+ACK) — 再次確認(SYN)

tcp09

相關文章