wireshark抓包看ip协议

注意:Wireshark 中没有单独一个叫做"IP"的协议条目。

在 Wireshark 的 "Protocol" 列里,你永远不会看到一个孤零零的 IP 包。你看到的总是 TCPUDPICMPARP 等。但这并不意味着 IP 协议不存在,恰恰相反,IP 协议是所有这些数据包的"隐形骨架"------它无处不在,但从不以"主角"身份单独出现。


1. 为什么 Wireshark 不显示单独的 IP?

因为 IP 协议从不单独传输 。它的唯一使命就是为其他协议(TCP、UDP、ICMP 等)提供传输服务

这就像你写一封信:

  • 信纸上的内容 = 应用层数据(HTTP 请求)

  • 信封上的收/发件人姓名 = 传输层(TCP/UDP 端口)

  • 信封上的收/发件人地址 = 网络层(IP 地址

  • 快递单号 = 链路层(MAC 地址)

你永远不会收到一个只有"地址"而没有"信纸"或"收件人姓名"的空信封。同样,网络上也没有只包含 IP 头部、没有任何上层数据的"纯 IP 包"。

2. Wireshark 中的实际显示

当你抓包时,看到的是这样的:

复制代码
No.     Time        Source                Destination           Protocol Info
  1     0.000000    192.168.1.2           8.8.8.8               ICMP     Echo (ping) request
  2     0.012345    192.168.1.2           8.8.8.8               TCP      80 → 54321 [SYN]
  3     0.025000    192.168.1.2           8.8.8.8               UDP      53 → 54321
  • Protocol 列显示的是"最上层"的协议ICMPTCPUDP 等。Wireshark 认为这些才是这个数据包的"业务类型"。

  • IP 协议作为"基础层" ,被隐藏在了细节里。你只有展开数据包 ,才能看到 Internet Protocol Version 4 这个部分。

3. 唯一的例外:IP 分片包

有一种情况,Wireshark 会在 Protocol 列显示 IPv4IP:当数据包被分片时。

如果一个大包被拆成了多个 IP 分片:

  • 第一个分片 :可能仍然显示为 TCPUDP,因为它还包含传输层的头部。

  • 后续分片只包含 IP 头部和部分数据,没有传输层头部 。Wireshark 无法判断它属于 TCP 还是 UDP,就会在 Protocol 列显示 IPv4

你可以用过滤器 ip.flags.mf == 1 or ip.frag_offset > 0 来找到这些分片包。

4. 如何"看到"IP 协议?

在 Wireshark 中,IP 协议无处不在,只是不单独显示。你可以通过以下几种方式感受它的存在:

  • 展开任意包 :选中任何一个 TCPUDP 包,展开 Internet Protocol Version 4 部分,你会看到完整的 IP 头部(源/目的 IP、TTL、总长度等)。

  • 使用 ip. 过滤器 :这是最有力的证据。Wireshark 中大量以 ip. 开头的过滤器,都是针对 IP 协议字段的:

    • ip.src == 192.168.1.2 (过滤源 IP)

    • ip.dst == 8.8.8.8 (过滤目的 IP)

    • ip.ttl < 10 (过滤 TTL 小于 10 的包)

    • ip.len > 1400 (过滤大包)

  • 查看统计信息 :菜单 Statistics -> IPv4 Statistics -> All Addresses,可以看到所有 IP 地址的流量统计。

这些过滤器和统计数据的存在,恰恰证明了 IP 协议是 Wireshark 底层解析的核心。


总结

你的疑问 解释
Wireshark 没有单独的 IP 协议? 对,没有。 IP 从不单独出现。
为什么没有? IP 是底层承载者 ,总是为 TCPUDPICMP 等上层协议服务。
那 IP 在哪里? 在每一个数据包里。 展开任意 TCP/UDP/ICMP 包,你都会看到它。
什么时候会显示 IPv4 IP 分片的后续分片,因为上层协议头部缺失。
如何验证它的存在? 使用 ip.srcip.dst 等过滤器,或查看 IPv4 统计信息。

一句话总结:Wireshark 中不显示单独的 IP 协议,因为它不是一个"业务类型",而是所有业务的"底层基础设施"。它就像空气一样,你看不到它本身,但它在每一个你抓到的包里。

抓包实战

下面通过实际操作,用Wireshark抓取真实网络流量,详细分析IPv4协议的每个字段和行为。


一、准备工作

1.1 启动抓包

  1. 打开Wireshark,选择正在使用的网卡(以太网或WLAN),点击蓝色鲨鱼鳍按钮开始抓包

  2. 设置显示过滤器 (可选):在过滤器栏输入 ip,只显示IP数据包

1.2 常用IP过滤器速查

过滤器表达式 作用
ip 显示所有IPv4数据包
ip.src == 192.168.1.2 显示源IP为指定地址的包
ip.dst == 8.8.8.8 显示目的IP为指定地址的包
ip.proto == 6 只显示TCP包(6=TCP,17=UDP,1=ICMP)
ip.ttl < 10 显示TTL小于10的包
ip.flags.df == 1 显示设置了DF标志的包
ip.frag_offset > 0 显示分片包
ip.len > 1400 显示大于1400字节的包

二、IPv4头部结构回顾

IPv4头部通常为20字节(不含选项字段):

复制代码
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

三、实战分析:ICMP包(ping)

3.1 抓包步骤

  1. 开始抓包

  2. 命令行执行 ping 8.8.8.8

  3. 停止抓包

  4. 在过滤器输入 icmpip.proto == 1

3.2 抓包结果分析

选中一个ICMP Echo Request包,展开 Internet Protocol Version 4 部分:

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
        0000 00.. = Differentiated Services Codepoint: Default (0)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 84
    Identification: 0x3a2b (14955)
    Flags: 0x40 (Don't Fragment)
        0... .... = Reserved bit: Not set
        .1.. .... = Don't fragment: Set
        ..0. .... = More fragments: Not set
    Fragment Offset: 0
    Time to Live: 64
    Protocol: ICMP (1)
    Header Checksum: 0x8c4a [correct]
    [Header checksum status: Good]
    Source: 192.168.1.2
    Destination: 8.8.8.8

3.3 逐字段解读

字段 抓包值 含义
Version 4 IPv4,固定为4
Header Length 20 bytes (5) IHL=5,表示头部5个32位字=20字节(无选项)
Differentiated Services Field 0x00 服务类型,未使用QoS
Total Length 84 IP包总长度84字节 = 20(IP头) + 8(ICMP头) + 56(数据)
Identification 0x3a2b (14955) 标识符,同一数据流的分片此值相同
Flags 0x40 (Don't Fragment) DF=1,禁止分片
Fragment Offset 0 分片偏移为0,表示这是第一个分片(或唯一分片)
Time to Live 64 TTL=64,最多经过64跳
Protocol ICMP (1) 上层协议是ICMP
Header Checksum 0x8c4a [correct] 头部校验和正确
Source 192.168.1.2 源IP地址(你的电脑)
Destination 8.8.8.8 目的IP地址(Google DNS)

3.4 对应的ICMP部分

复制代码
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x4a2b [correct]
    Identifier (BE): 1 (0x0001)
    Sequence Number (BE): 1 (0x0001)
    Data (56 bytes)

四、实战分析:TCP包(HTTP/HTTPS)

4.1 抓包步骤

  1. 开始抓包

  2. 浏览器访问 http://www.baidu.com(注意用HTTP,不是HTTPS,便于观察)

  3. 停止抓包

  4. 在过滤器输入 tcpip.proto == 6

4.2 抓包结果分析

选中一个TCP包(如HTTP GET请求),展开IP头部:

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 110.242.68.66
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Total Length: 84
    Identification: 0x5678 (22136)
    Flags: 0x40 (Don't Fragment)
    Time to Live: 64
    Protocol: TCP (6)
    Header Checksum: 0x9b2a [correct]
    Source: 192.168.1.2
    Destination: 110.242.68.66

4.3 对比ICMP包的差异

字段 ICMP包 TCP包 说明
Protocol 1 (ICMP) 6 (TCP) 标识上层协议类型
Total Length 84 84(可能变化) 取决于数据大小
Destination 8.8.8.8 110.242.68.66 不同目标地址

五、实战分析:UDP包(DNS查询)

5.1 抓包步骤

  1. 开始抓包

  2. 命令行执行 nslookup google.comdig google.com

  3. 停止抓包

  4. 在过滤器输入 udpip.proto == 17

5.2 抓包结果分析

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Total Length: 64
    Identification: 0x9abc (39612)
    Flags: 0x40 (Don't Fragment)
    Time to Live: 64
    Protocol: UDP (17)
    Header Checksum: 0x7d3b [correct]
    Source: 192.168.1.2
    Destination: 8.8.8.8

5.3 对比三种协议

协议类型 Protocol字段值 Wireshark显示 典型用途
ICMP 1 ICMP ping诊断
TCP 6 TCP 网页、邮件、文件传输
UDP 17 UDP DNS、音视频、游戏

六、TTL分析:traceroute实战

6.1 原理

traceroute通过递增TTL值,让沿途路由器依次返回ICMP超时报文,从而发现路径上的每一跳。

6.2 抓包步骤

  1. 开始抓包

  2. Windows执行 tracert 8.8.8.8,Linux执行 traceroute -I 8.8.8.8

  3. 停止抓包

  4. 过滤器输入 icmp

6.3 抓包结果分析

TTL=1的包(第一个路由器会丢弃)

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    Time to Live: 1          ← TTL=1
    Protocol: ICMP (1)

路由器返回的ICMP超时消息

复制代码
Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.1.2
    Time to Live: 64
    Protocol: ICMP (1)
Internet Control Message Protocol
    Type: 11 (Time to live exceeded in transit)
    Code: 0 (Time to live exceeded in transit)

TTL=2的包

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    Time to Live: 2          ← TTL=2

观察要点

  • 第一个包TTL=1,到第一跳路由器后TTL变为0,被丢弃

  • 第一跳路由器返回ICMP Type=11

  • 源IP是路由器的IP(如192.168.1.1)

  • traceroute通过递增TTL,逐步发现路径上的每一跳


七、分片包分析

7.1 制造分片场景

复制代码
# Linux:发送2000字节的大ping包(MTU通常是1500,会触发分片)
ping -s 2000 8.8.8.8 -M dont  # 不加-M dont,DF=1会失败

# 或者用
ping -s 2000 8.8.8.8

7.2 抓包过滤器

复制代码
ip.frag_offset > 0 or ip.flags.mf == 1

7.3 分片包抓包结果

第一个分片(More Fragments=1,Offset=0)

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    Version: 4
    Header Length: 20 bytes
    Total Length: 1500        ← 第一个分片满载1500字节
    Identification: 0xabcd (43981)
    Flags: 0x20 (More Fragments)  ← MF=1,表示后面还有分片
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..1. .... = More fragments: Set
    Fragment Offset: 0         ← 偏移0,是第一个分片
    Time to Live: 64
    Protocol: ICMP (1)

第二个分片(More Fragments=0,Offset=185)

复制代码
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 8.8.8.8
    Version: 4
    Header Length: 20 bytes
    Total Length: 548          ← 最后一个分片,长度较小
    Identification: 0xabcd (43981)  ← 相同的ID!
    Flags: 0x00 (None)        ← MF=0,最后一个分片
    Fragment Offset: 185       ← 偏移185 × 8 = 1480字节
    Time to Live: 64
    Protocol: ICMP (1)

7.4 分片关键点

字段 第一个分片 第二个分片 说明
Identification 0xabcd 0xabcd 相同ID,用于重组
Flags.MF 1 0 MF=1表示还有后续
Fragment Offset 0 185 偏移185×8=1480字节
Total Length 1500 548 第一个满载,最后一个较小

八、DF标志位分析

8.1 观察DF标志

大多数现代系统发送的IP包都会设置DF=1(Don't Fragment):

复制代码
Flags: 0x40 (Don't Fragment)
    .1.. .... = Don't fragment: Set

8.2 当DF=1且包太大时的行为

如果路由器收到一个需要分片但DF=1的包,会丢弃该包并返回ICMP错误:

复制代码
Internet Control Message Protocol
    Type: 3 (Destination unreachable)
    Code: 4 (Fragmentation needed but don't fragment was set)

这就是PMTUD(Path MTU Discovery) 的工作原理。


九、IP头部校验和验证

9.1 查看校验和

在Wireshark中,IP头部底部会显示校验和状态:

复制代码
Header Checksum: 0x8c4a [correct]
[Header checksum status: Good]

9.2 校验和错误的情况

如果看到 [Header checksum status: Bad],说明IP头部在传输中损坏了。这通常表示:

  • 网卡硬件问题

  • 驱动问题

  • 中间设备损坏


十、综合实战练习

练习1:识别IP头部各字段

  • 打开Wireshark,开始抓包

  • ping 8.8.8.8,停止抓包

  • 找一个ICMP请求包,展开IP头部

  • 记录以下字段的值:

    • Version

    • Header Length

    • Total Length

    • Identification

    • Flags

    • TTL

    • Protocol

    • Source/Destination

练习2:对比不同协议的Protocol字段

  • 分别执行以下操作,抓包对比Protocol字段:

    • ping 8.8.8.8(ICMP,Protocol=1)

    • 打开浏览器访问网页(TCP,Protocol=6)

    • nslookup google.com(DNS,UDP,Protocol=17)

  • 观察并记录Protocol值的差异

练习3:观察TTL变化

  1. ping 8.8.8.8,查看TTL值

  2. ping 192.168.1.1(你的网关),查看TTL值

  3. 对比两者差异

练习4:过滤技巧练习

在Wireshark中依次输入以下过滤器,观察结果:

复制代码
ip.src == 你的IP地址
ip.dst == 8.8.8.8
ip.ttl == 1
ip.flags.df == 1
ip.proto == 6
ip.len > 1400

练习5:traceroute分析

  1. 开始抓包

  2. 执行 tracert 8.8.8.8(Windows)或 traceroute -I 8.8.8.8(Linux)

  3. 观察TTL从1递增的过程

  4. 找到每一跳返回的ICMP Type=11包


十一、IP头部速查表(Wireshark显示)

Wireshark显示字段 对应IP头字段 常见值 位置(字节)
Version: 4 Version 4 第0字节高4位
Header Length: 20 bytes (5) IHL 5 第0字节低4位
Differentiated Services Field: 0x00 ToS 0 第1字节
Total Length: 84 Total Length 变化 第2-3字节
Identification: 0x3a2b Identification 随机/递增 第4-5字节
Flags: 0x40 (Don't Fragment) Flags 0x40(DF=1) 第6字节高3位
Fragment Offset: 0 Fragment Offset 0 第6字节低5位+第7字节
Time to Live: 64 TTL 64/128/255 第8字节
Protocol: ICMP (1) Protocol 1/6/17 第9字节
Header Checksum: 0x8c4a Checksum 变化 第10-11字节
Source: 192.168.1.2 Source Address 你的IP 第12-15字节
Destination: 8.8.8.8 Destination Address 目标IP 第16-19字节

十二、常见问题排查

Q1:为什么看不到IP头部?

确保过滤器是 ip 而不是其他。另外,ARP包没有IP头部,需要过滤掉:ip and not arp

Q2:为什么TTL值不同?

  • Windows默认TTL=128

  • Linux默认TTL=64

  • 某些设备默认TTL=255

  • 经过路由器后TTL会递减

Q3:分片包为什么没有出现?

现代网络MTU通常足够大(以太网1500),普通包不会分片。需要发送大包(如ping -s 2000)才会触发分片。

Q4:如何找到TCP重传包?

复制代码
tcp.analysis.retransmission

这些包通常TTL值较小,或者有特殊的IP标识。


十三、总结

通过Wireshark抓包分析IP协议,你可以直观地看到:

学习要点 如何观察
IP头部结构 展开IPv4部分,看20字节固定头部的每个字段
分片机制 发送大包,观察相同ID、不同Offset和MF标志
TTL机制 运行traceroute,观察TTL从1递增和ICMP超时报文
协议复用 对比ICMP、TCP、UDP包的Protocol字段
校验和 查看Wireshark显示的[correct][bad]状态
DF标志 观察Flags字段中的Don't Fragment位

一句话总结:Wireshark是理解IP协议的最佳工具,通过抓包可以亲眼看到Version、IHL、Total Length、Identification、Flags、Fragment Offset、TTL、Protocol、Checksum、Source、Destination这11个核心字段的真实值,以及分片、TTL递减、协议复用等动态行为。

相关推荐
Johnstons2 小时前
网络可观测性落地指南:从“出了问题才排查“到“实时感知全网状态“
开发语言·网络·php
捞的不谈~2 小时前
宇树机器狗通过笔记本共享上网操作指南(临时版)
linux·经验分享·tcp/ip·ubuntu
小梦爱安全2 小时前
Ansible剧本1
java·网络·ansible
科技牛牛2 小时前
平台该怎么设计更低误伤的 IP 风控策略?
服务器·网络·tcp/ip
一颗青果2 小时前
如何加速TCP传输大文件
网络·网络协议·tcp/ip
heRs BART2 小时前
Ubuntu 20.04配置网络
网络·ubuntu·php
要做一个小太阳2 小时前
blockbox配置文件详解与优化
运维·网络·prometheus
DianSan_ERP3 小时前
淘宝订单接口集成中如何正确处理消费者敏感信息的安全与合规问题?
大数据·运维·网络·人工智能·安全·servlet
IMPYLH3 小时前
Linux 的 sha256sum 命令
linux·运维·服务器·网络·bash·哈希算法