wireshark抓包看ip协议
注意:Wireshark 中没有单独一个叫做“IP”的协议条目。
在 Wireshark 的 “Protocol” 列里,你永远不会看到一个孤零零的
IP包。你看到的总是TCP、UDP、ICMP、ARP等。但这并不意味着 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 列显示的是“最上层”的协议:
ICMP、TCP、UDP等。Wireshark 认为这些才是这个数据包的“业务类型”。IP 协议作为“基础层”,被隐藏在了细节里。你只有展开数据包,才能看到
Internet Protocol Version 4这个部分。3. 唯一的例外:IP 分片包
有一种情况,Wireshark 会在 Protocol 列显示
IPv4或IP:当数据包被分片时。如果一个大包被拆成了多个 IP 分片:
第一个分片:可能仍然显示为
TCP或UDP,因为它还包含传输层的头部。后续分片:只包含 IP 头部和部分数据,没有传输层头部。Wireshark 无法判断它属于 TCP 还是 UDP,就会在 Protocol 列显示
IPv4。你可以用过滤器
ip.flags.mf == 1 or ip.frag_offset > 0来找到这些分片包。4. 如何“看到”IP 协议?
在 Wireshark 中,IP 协议无处不在,只是不单独显示。你可以通过以下几种方式感受它的存在:
展开任意包:选中任何一个
TCP或UDP包,展开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 是底层承载者,总是为 TCP、UDP、ICMP等上层协议服务。那 IP 在哪里? 在每一个数据包里。展开任意 TCP/UDP/ICMP包,你都会看到它。什么时候会显示 IPv4?IP 分片的后续分片,因为上层协议头部缺失。 如何验证它的存在? 使用 ip.src、ip.dst等过滤器,或查看 IPv4 统计信息。一句话总结:Wireshark 中不显示单独的 IP 协议,因为它不是一个“业务类型”,而是所有业务的“底层基础设施”。它就像空气一样,你看不到它本身,但它在每一个你抓到的包里。
抓包实战
下面通过实际操作,用Wireshark抓取真实网络流量,详细分析IPv4协议的每个字段和行为。
一、准备工作
1.1 启动抓包
打开Wireshark,选择正在使用的网卡(以太网或WLAN),点击蓝色鲨鱼鳍按钮开始抓包
设置显示过滤器(可选):在过滤器栏输入
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 抓包步骤
开始抓包
命令行执行
ping 8.8.8.8停止抓包
在过滤器输入
icmp或ip.proto == 13.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.83.3 逐字段解读
字段 抓包值 含义 Version 4IPv4,固定为4 Header Length 20 bytes (5)IHL=5,表示头部5个32位字=20字节(无选项) Differentiated Services Field 0x00服务类型,未使用QoS Total Length 84IP包总长度84字节 = 20(IP头) + 8(ICMP头) + 56(数据) Identification 0x3a2b (14955)标识符,同一数据流的分片此值相同 Flags 0x40 (Don't Fragment)DF=1,禁止分片 Fragment Offset 0分片偏移为0,表示这是第一个分片(或唯一分片) Time to Live 64TTL=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 抓包步骤
开始抓包
浏览器访问
http://www.baidu.com(注意用HTTP,不是HTTPS,便于观察)停止抓包
在过滤器输入
tcp或ip.proto == 64.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.664.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 抓包步骤
开始抓包
命令行执行
nslookup google.com或dig google.com停止抓包
在过滤器输入
udp或ip.proto == 175.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.85.3 对比三种协议
协议类型 Protocol字段值 Wireshark显示 典型用途 ICMP 1 ICMPping诊断 TCP 6 TCP网页、邮件、文件传输 UDP 17 UDPDNS、音视频、游戏 六、TTL分析:traceroute实战
6.1 原理
traceroute通过递增TTL值,让沿途路由器依次返回ICMP超时报文,从而发现路径上的每一跳。
6.2 抓包步骤
开始抓包
Windows执行
tracert 8.8.8.8,Linux执行traceroute -I 8.8.8.8停止抓包
过滤器输入
icmp6.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.87.2 抓包过滤器
ip.frag_offset > 0 or ip.flags.mf == 17.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: Set8.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变化
ping 8.8.8.8,查看TTL值
ping 192.168.1.1(你的网关),查看TTL值对比两者差异
练习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分析
开始抓包
执行
tracert 8.8.8.8(Windows)或traceroute -I 8.8.8.8(Linux)观察TTL从1递增的过程
找到每一跳返回的ICMP Type=11包
十一、IP头部速查表(Wireshark显示)
Wireshark显示字段 对应IP头字段 常见值 位置(字节) Version: 4Version 4 第0字节高4位 Header Length: 20 bytes (5)IHL 5 第0字节低4位 Differentiated Services Field: 0x00ToS 0 第1字节 Total Length: 84Total Length 变化 第2-3字节 Identification: 0x3a2bIdentification 随机/递增 第4-5字节 Flags: 0x40 (Don't Fragment)Flags 0x40(DF=1) 第6字节高3位 Fragment Offset: 0Fragment Offset 0 第6字节低5位+第7字节 Time to Live: 64TTL 64/128/255 第8字节 Protocol: ICMP (1)Protocol 1/6/17 第9字节 Header Checksum: 0x8c4aChecksum 变化 第10-11字节 Source: 192.168.1.2Source Address 你的IP 第12-15字节 Destination: 8.8.8.8Destination Address 目标IP 第16-19字节 十二、常见问题排查
Q1:为什么看不到IP头部?
确保过滤器是
ip而不是其他。另外,ARP包没有IP头部,需要过滤掉:ip and not arpQ2:为什么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递减、协议复用等动态行为。
