早就據說了Wireshark
是一個強大的網絡數據包分析軟件,能夠詳細的展現網絡數據包的交換過程,是監控網絡請求定位網絡問題的利器。可是一直沒能靜下心來學習它,一方面是對它的強大和專業望而生畏,另外一方面是平時網絡調試使用Fiddler
和Charles
抓包也知足需求了。今天學習網絡協議時,忽然以爲純理論的知識點太空泛,想要抓一次真實的網絡請求數據來對照學習,本文就是我使用Wireshark
來學習網絡協議的筆記。css
我使用的是Mac版Wireshark 2.4.0
,目標是抓取請求http://www.baidu.com
HTML文件的網絡數據過程。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請求。bash
➜ Desktop curl http://www.baidu.com
複製代碼
經過curl
命令模擬一次http請求,而後使用Wireshark
過濾器過濾出和指定ip服務器交互的請求,咱們就獲得了以下圖所示數據。服務器
從上面截圖中能夠看出一次http請求的過程大體是:網絡
四個過程咱們這裏重點看下tcp協議三次握手的過程。先來看下TCP數據包結構圖。 curl
再貼下三次握手流程圖 tcp
Wireshark
抓到的第一次握手的數據包。首先客戶端向服務端發送了一個設置了Syn (Synchronize) 標記的包,告訴服務端請求創建鏈接。此時的數據序號是0。
下面是第二次握手的TCP數據包。服務端向客戶端發送了一個設置了Acknowledgment位,而且Acknowledgment number設置成了客戶端發送數據序號加一。 學習
下面是第三次握手的數據包 url