使用wireshark學習網路協議

都有米發表於2019-03-12

早就聽說了Wireshark是一個強大的網路資料包分析軟體,可以詳細的展示網路資料包的交換過程,是監控網路請求定位網路問題的利器。但是一直沒能靜下心來學習它,一方面是對它的強大和專業望而生畏,另一方面是平時網路除錯使用FiddlerCharles抓包也滿足需求了。今天學習網路協議時,突然覺得純理論的知識點太空泛,想要抓一次真實的網路請求資料來對照學習,本文就是我使用Wireshark來學習網路協議的筆記。

logo

一、抓取資料包

我使用的是Mac版Wireshark 2.4.0,目標是抓取請求http://www.baidu.comHTML檔案的網路資料過程。Wireshark開啟後不用任何設定就可以抓到電腦上發出的所有網路請求,可以看到大量的資料包,包含了電腦上發出的所有的網路請求。我們想要的是一次網路請求完整的資料交換過程,資料太多不利於分析,所以首先需要過濾出我們關注的資料。我這裡想到使用指定ip來過濾網路請求。

➜  Desktop ping www.baidu.com
PING www.a.shifen.com (61.135.169.125): 56 data bytes
64 bytes from 61.135.169.125: icmp_seq=0 ttl=53 time=2.697 ms
64 bytes from 61.135.169.125: icmp_seq=1 ttl=53 time=2.963 ms
...
複製程式碼

先使用ping命令獲取www.baidu.com對用的ip,然後設定Wireshark的過濾器ip.addr == 61.135.169.125。在瀏覽器中直接請求www.baidu.com會多次請求改ip伺服器,因為HTML中還有圖片、css的資原始檔需要載入。這裡我們只要請求HTML檔案的請求,所以這裡使用curl命令來模擬一次http請求。

➜  Desktop curl http://www.baidu.com
複製程式碼

通過curl命令模擬一次http請求,然後使用Wireshark過濾器過濾出和指定ip伺服器互動的請求,我們就得到了如下圖所示資料。

wireshark截圖

二、分析資料包

從上面截圖中可以看出一次http請求的過程大致是:

  1. TCP協議三次握手建立連線
  2. 客戶端傳送http request
  3. 服務端傳送http response
  4. tcp四次握手斷開連線

四個過程我們這裡重點看下tcp協議三次握手的過程。先來看下TCP資料包結構圖。

TCP資料包結構

再貼下三次握手流程圖

三次握手圖解
最後看下Wireshark抓到的第一次握手的資料包。首先客戶端向服務端傳送了一個設定了Syn (Synchronize) 標記的包,告訴服務端請求建立連線。此時的資料序號是0。
第一次握手

下面是第二次握手的TCP資料包。服務端向客戶端傳送了一個設定了Acknowledgment位,並且Acknowledgment number設定成了客戶端傳送資料序號加一。

第二次握手

下面是第三次握手的資料包

第三次握手

相關文章