从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/