使用wireshark學習網絡協議

早就據說了Wireshark是一個強大的網絡數據包分析軟件,能夠詳細的展現網絡數據包的交換過程,是監控網絡請求定位網絡問題的利器。可是一直沒能靜下心來學習它,一方面是對它的強大和專業望而生畏,另外一方面是平時網絡調試使用FiddlerCharles抓包也知足需求了。今天學習網絡協議時,忽然以爲純理論的知識點太空泛,想要抓一次真實的網絡請求數據來對照學習,本文就是我使用Wireshark來學習網絡協議的筆記。css

logo

1、抓取數據包

我使用的是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請求。bash

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

經過curl命令模擬一次http請求,而後使用Wireshark過濾器過濾出和指定ip服務器交互的請求,咱們就獲得了以下圖所示數據。服務器

wireshark截圖

2、分析數據包

從上面截圖中能夠看出一次http請求的過程大體是:網絡

  1. TCP協議三次握手創建鏈接
  2. 客戶端發送http request
  3. 服務端發送http response
  4. tcp四次握手斷開鏈接

四個過程咱們這裏重點看下tcp協議三次握手的過程。先來看下TCP數據包結構圖。 curl

TCP數據包結構

再貼下三次握手流程圖 tcp

三次握手圖解
最後看下 Wireshark抓到的第一次握手的數據包。首先客戶端向服務端發送了一個設置了Syn (Synchronize) 標記的包,告訴服務端請求創建鏈接。此時的數據序號是0。
第一次握手

下面是第二次握手的TCP數據包。服務端向客戶端發送了一個設置了Acknowledgment位,而且Acknowledgment number設置成了客戶端發送數據序號加一。 學習

第二次握手

下面是第三次握手的數據包 url

第三次握手
相關文章
相關標籤/搜索