從IP頭部看網絡通信:IPv4、IPv6與抓包工具 Wireshark實戰
在網絡安全分析和數據通信的世界中,一切都始于“數據包”。數據包是網絡上傳輸的基本單位,而數據包的結構與內容,正是我們理解網絡行為的核心。本文將帶你深入了解 IP 協議中兩種主流版本(IPv4 與 IPv6)的報文頭結構,并介紹如何使用 Wireshark 等網絡抓包工具高效分析這些數據包。
1. 什么是IP協議?
IP(Internet Protocol,互聯網協議)是互聯網通信的基石。它負責將數據包從源地址發送到目標地址。IP 協議規定了數據包的格式和路由方式,是實現不同設備之間通信的“郵遞系統”。
目前,互聯網上主要使用兩個版本的 IP 協議:
- IPv4(Internet Protocol version 4)
- IPv6(Internet Protocol version 6)
它們的核心區別除了地址長度外,也體現在頭部結構的不同設計上。
2. IPv4頭部結構解析
IPv4 是目前最廣泛使用的 IP 版本,其報文頭部由 13 個字段組成:
字段名 | 說明 |
---|---|
Version | 指明協議版本(4) |
IHL(Header Length) | 頭部長度,單位為 4 字節 |
Type of Service(ToS) | 指定服務質量,決定優先級 |
Total Length | 包含頭部與數據的總長度 |
Identification | 數據包唯一 ID,用于分片重組 |
Flags | 分片控制位 |
Fragment Offset | 分片偏移量 |
Time to Live(TTL) | 生存時間,防止包在網絡中無限循環 |
Protocol | 數據部分所用的上層協議(如 TCP、UDP) |
Header Checksum | 頭部校驗和 |
Source Address | 源 IP 地址 |
Destination Address | 目的 IP 地址 |
Options(可選) | 安全性、記錄路由等附加信息 |
IPv4 的設計雖然精巧,但隨著互聯網發展,地址資源逐漸枯竭,這也促使了 IPv6 的推廣。
3. IPv6頭部結構解析
IPv6 相較于 IPv4 更為簡潔高效,僅包含 8 個字段:
字段名 | 說明 |
---|---|
Version | 協議版本(6) |
Traffic Class | 類似 IPv4 的 ToS,用于服務分類 |
Flow Label | 流標簽,標記數據流以便路由器識別 |
Payload Length | 數據部分長度 |
Next Header | 下一個頭部類型(如 TCP、UDP) |
Hop Limit | 與 TTL 類似,防止無限轉發 |
Source Address | 源 IPv6 地址 |
Destination Address | 目的 IPv6 地址 |
IPv6 采用 128 位地址,極大地擴展了地址空間,并簡化了處理流程。
4. 網絡抓包實戰:Wireshark的使用
要理解或調查網絡中發生了什么,僅靠理論還不夠。Wireshark 是一款開源網絡協議分析工具,能夠實時捕捉網絡流量,并以人類可讀的方式展示每個數據包的詳細內容。
Wireshark基本功能
- 實時捕獲網絡數據包
- 展示每個包的協議、源/目的地址、端口、長度等
- 支持協議層級解析(鏈路層、IP層、傳輸層、應用層)
- 使用強大的過濾器進行精確分析
常用顯示過濾器
Wireshark 提供強大的顯示過濾器功能,可以從海量數據包中篩選出你感興趣的信息。
協議過濾器
協議過濾是使用顯示過濾器最簡單的方法之一。您只需輸入要過濾的協議名稱即可。例如,要過濾 DNS 數據包,只需在過濾器工具欄中輸入dns即可。以下是一些可以過濾的協議列表:
- dns
- http
- ftp
- ssh
- arp
- telnet
- icmp
過濾 IP 地址
您可以使用顯示過濾器來定位具有特定 IP 地址的數據包。
例如,如果要過濾包含特定 IP 地址的數據包,請使用ip.addr,后跟空格、等號==比較運算符以及 IP 地址。以下是針對 IP 地址172.21.224.2進行過濾的顯示過濾器示例:
ip.addr == 172.21.224.2
要過濾來自特定源 IP 地址的數據包,可以使用ip.src過濾器。以下示例查找源 IP 地址10.10.10.10 :
ip.src == 10.10.10.10
要過濾發往特定目標 IP 地址的數據包,可以使用ip.dst過濾器。以下示例搜索目標 IP 地址4.4.4.4 :
ip.dst == 4.4.4.4
過濾 MAC 地址
您還可以根據媒體訪問控制 (MAC) 地址過濾數據包。MAC 地址是分配給網絡上每個物理設備的唯一字母數字標識符。
eth.addr == 00:70:f4:23:18:c4
端口過濾器
端口過濾用于根據端口號過濾數據包。當您想要隔離特定類型的流量時,此功能非常有用。DNS 流量使用 TCP 或 UDP 端口 53,因此這將僅列出與 DNS 查詢和響應相關的流量。
例如,如果想過濾 UDP 端口:
udp.port == 53
同樣,也可以過濾 TCP 端口:
tcp.port == 25
使用比較運算符
運算類型 | 符號 | 示例 |
---|---|---|
相等(equal) | == 或 eq | ip.src == 8.8.8.8 |
不等(not equal) | != 或 ne | ip.dst != 192.168.1.1 |
大于(greater than) | > 或 gt | tcp.port > 1000 |
小于(less than) | < 或 lt | udp.port < 1024 |
大于等于(>=) | >= 或 ge | tcp.port >= 80 |
小于等于(<=) | <= 或 le | tcp.port <= 443 |
Follow TCP/UDP Stream:追蹤會話流
Wireshark 提供“Follow Stream”功能,可以將某個會話的數據包重新組合成完整的通信內容,非常適合分析 HTTP 請求與響應等應用層數據。
操作步驟:
- 右鍵點擊任意相關數據包
- 選擇 Follow > TCP Stream 或 UDP Stream
- 查看重組后的對話內容
Reference
[1] https://www.wireshark.org/docs/wsug_html/