Wireshark数据包结构解析
Wireshark数据包结构解析

Wireshark数据包结构解析

本文为《Mac使用Wireshark抓包入门指南》的扩展文章,解析Wireshark捕获网络数据包(packet)的“洋葱结构”。

数据包结构

1、Frame(帧)

抓包信息、时间戳、长度、接口等原数据。

1、Frame 146572:第146572个抓到的数据包;

2、Section number:表示该帧在捕获文件中的段编号,默认情况下,大部分捕获文件只有一个段,所以通常显示1。

3、Interface id 0 (en0):从第几个接口捕获的,这里是en0接口;

4、Encapsulation type: Ethernet(1):表示该帧的链路层封装类型为以太网帧;

常见封装类型有:

Ethernet (1):最常见,以太网帧。

Raw IP (101):没有以太网头部的原始 IP 包(如某些隧道接口)。

PPP (9):点对点协议(拨号、VPN)。

802.11 (105):无线 Wi-Fi 数据帧。

5、Arrival Time:表示数据包被捕获的时间(本地系统时钟);

6、UTC Arrival Time:表示数据包被捕获的时间(UTC始终);

7、Epoch Time:Unix时间戳;

8、Time shift for this packet:该包相对于捕获始终的时间偏移量,一般情况下都是0.000000000秒;

9、Time delta from previous captured frame:该包与上一个被捕获的包之间的时间间隔。用于分析网络流量密度;

10、Time delta from previous displayed frame:计算当前包和显示的包的时间间隔。比如当前使用过滤器显示20个HTTP请求,这里的时间间隔是这20个HTTP包之间的间隔,不是所有包的间隔;

11、Time since reference or first frame:表示该包距离“参考帧”或“第一个包”的时间差。默认情况下,Wireshark把第一个包当作时间零点。

12、Frame Number:包序号;

13、Frame Length:网络上该帧实际长度(包括链路层开销);

14、Capture Length:Wireshark实际保存的字节数;

15、Frame is marked:该帧是否被用户标记(Marked),用于标出关键事件,可以右键包 → “Marked/Unmarked Selected” 来切换此状态;

16、Frame is ignored:该帧是否被Wireshark忽略,忽略的包会从分析逻辑中排除,可以右键包 → “Ignore/Unignore Selected” 来切换此状态。

17、Protocols in frame:显示该帧中包含哪些协议层。例如:

Protocols in frame: eth:ethertype:ip:tcp:http

链路层是Ethernet,网络层是IP,传输层是TCP,应用层是HTTP。

18、Character encoding:Wireshark显示字符串时使用的字符编码,例如ASCII、UTF-8,通常这个字段自动由协议解析器推断,除非手动修改显示编码;

19、Coloring Rule Name:当前帧匹配的“着色规则名称”;

20、Coloring Rule String:匹配着色规则的表达式(过滤条件);

2、Ethernet(以太网层)

源Mac、目标Mac、协议类型(0×0800表示IPv4)。

1、Destination:该帧要发送的目标 MAC 地址。如果目标地址是ff:ff:ff:ff:ff:ff,表示广播包,发送给局域网内所有设备。

2、Source: 该帧的发送方 MAC 地址。表示哪个网卡发出的包,用于判断哪台主机在发送数据,以及ARP欺骗或伪造MAC地址的行为。

3、Type:以太网封装的上层协议,通过这个字段决定下一层如何解码。

常见值:

IPv4:0x0800,Wireshark显示Internet Protocol version 4

IPv6:0x86DD,Wireshark显示Internet Protocol version 6

ARP:0x0806,Wireshark显示Address Resolution Protocol

VLAN:0x8100,Wireshark显示IEEE 802.1Q Virtual LAN

MPLS:0x8847,Wireshark显示MPLS unicast

PPPoE:0x8864,Wireshark显示Point-to-Point Protocol over Ethernet

例如:

Type: IPv6 (0x86dd)

表示该帧的负载是一个 IPv6 数据包,Wireshark 就会在下一层显示 “Internet Protocol Version 6”。

3、IP层(Internet Protocol)

源 IP、目标 IP、TTL、标志位、校验和等。

1、0100 …. = Version:表示这是一个IPv4数据包,IPv6的版本值是0110。

2、…. 0101 = Header Length:表示IP头长度为5。

这里涉及一个知识,当年在涉及IPv4时(1970s),CPU通常以32位(4字节)为最小处理单位,IHL的长度为5,表示IP头部有5个4字节单元,也就是20个字节。

IHL(5) × 每单位4字节 = 20字节

对应的IP数据包的IP头部长度为20个字节。

3、Differentiated Services Field:区分服务字段。

前 6 位:DSCP(Differentiated Services Code Point)表示包的优先级、延迟、吞吐量要求。

例如:0000 00 → Best Effort(普通),1011 10 → Expedited Forwarding(高优先级)。

后 2 位:ECN(Explicit Congestion Notification),表示网络拥塞通知机制,用于现代 TCP 拥塞控制。一般家庭网络中,这部分多为 0。

4、Total Length:总长度,表示整个IP(头+数据)的总长度,单位是字节。

这里的Total Length为52,表示这个IP包一共有52个字节,即前面的20个头部长度(IP层)+ 32个字节的TCP数据。也可以理解为除去以太网层的14个字节的所有字节。

5、Identification:标识符,这个值用来标识属于同一个IP分片的包。

当一个大数据包被拆分为多个小片传输时,每个片段都有相同的 Identification 值。

Wireshark 可以据此重组完整的包。

例如:

Identification: 0x1c46 (7238)

表示这是ID=7238的包或分片。

如果Identification值为0x0000(0),可能是包没有分片,系统设置为0,当作默认标识符。大部分小包(比如DNS、HTTP请求)都不会分片。

6、010. …. 与 …0 0000 0000 0000:Flags 与 Fragment Offset(标志与分片偏移)。这16位连在一起,前3位表示Flags(标志),后13位表示Fragment Offset(分片偏移)。

1)前 3 位:Flags(标志)

第0位:保留位(0)

第1位:DF(Don’t Fragment,不可分片)

第2位:MF(More Fragments,还有后续分片)

可以理解为:0 | DF | MF,对应的二进制位:

000:可分片,但目前未分片

010:不允许分片(DF=1)

001:当前包是分片(MF=1)且后面还有片

000 + offset≠0:表示这是最后一个分片

2)后 13 位:Fragment Offset(分片偏移),当值为0时,表示这是第一个分片,或者根本没有分片。

7、Time to Live:生存时间(TTL),TTL 是一个计数器,每经过一个路由器就减 1。当 TTL = 0 时,包被丢弃。这样可以防止数据包在网络中无限循环。

常见默认值:

Windows / macOS → 128

Linux → 64

Cisco 路由器 → 255

例如:

Time to live: 64

表示还能经过 64 个路由器。

8、Protocol:协议类型,封装的传输层协议。

ICMP:1,Internet Control Message Protocol

TCP:6,Transmission Control Protocol

UDP:17,User Datagram Protocol

GRE:47,Generic Routing Encapsulation

 ESP:50,IPsec Encapsulating Security Payload

例如,Protocol: TCP (6),表示传输层为TCP协议。

9、Header Checksum:头部校验和,用于检测 IP 头是否在传输中出错的校验码。

计算规则:

只覆盖 IP 头部,不包括数据。

每次 TTL 减 1 后都需要重新计算。

Wireshark 通常还会显示:

Header checksum status: Unverified / Good / Bad

Good → 校验通过;

Bad → 校验失败(数据损坏);

Unverified → Wireshark 没有验证(比如捕获自本机)。

10、Source Address:源地址,包的来源IPv4地址。

例如:

Source Address: 192.168.1.103

11、Destination Address:目标地址,包的目的IPv4地址。

例如:

Destination Address: 111.231.22.116

12、Stream index:流索引,属于Wireshark的辅助信息,表示该IP包属于第几个被识别出的通信流。

Wireshark会根据源/目标 IP、协议类型来划分“对话流”,给每个流编号。

4、传输层(TCP或UDP)

源端口、目标端口、序号、ACK号、标志位(SYN、ACK、FIN…);

TCP和UDP结构不同,TCP字段包含UDP结构,这里以TCP结构作为讲解。

1、Source Port/Destination Port:表示发送方和接收方的端口号,表示对方计算机上哪个应用程序发送/收到这个数据包。

常见端口:

DNS:53

DHCP:67/68

HTTP:80

HTTPS:443

3、Stream index:Wireshark给每个TCP会话的自动编码,同一个TCP连接拥有相同的Stream index。

例如,Stream index: 185,表示第185条TCP流。

4、Stream Packet Number:Wireshark给每条TCP流的局部编号,从1开始,表示第几个包。

5、Conversation completeness:Wireshark检查该条TCP会话是否完整:

Incomplete:有包丢失或中断。

Complete:三次握手、四次挥手完整。

Reset:被 RST 中断。

6、TCP Segment Len:Wireshark计算出来的ITCP数据部分长度(不包含头)。

7、Sequence Number:表示此TCP段携带的第一个字节,在整个流中的位置初始序号。

例如,该TCP包的字段为:

TCP Segment Len: 1440
Sequence Number: 18604

下一个包的Sequence Number字段为该包的TCP Segment Len+ Sequence Number,1440 + 18604 = 20044。

TCP Segment Len: ***
Sequence Number: 20044

可以理解为,当前包的第一个字节,在整个TCP连接中,是第18604个字节。两个包的序号差值反映上一个包中TCP payload的长度。

8、Sequence Number (raw):报文携带的32位序号。因为当电脑和服务器建立连接时,第一个数据包的初始序号(ISN)是系统随机生成的,所以没有实际意义。

仅用于分析TCP通信时,从连续开始第算起第几个字节。

9、Next Sequence Number:Wireshark计算出的,下一个包的Sequence Number,用于判断包是否连续。

Next Sequence Number = 当前 Sequence Number + 数据长度

10、Acknowledgment Number:确认号,表示已经接收的这个字节之前的所有数据。

11、Acknowledgment Number (raw):报文携带的32位序号,与Sequence Number (raw)相同。

12、1000 …. = Header Length:对应TCP报文的十六进制8,单位为4字节,因此这里表示TCP的头部长度为 (8 × 4) = 32bytes。

TCP报文中32个字节属于“头部”,后面才是数据。

13、Flags:表示TCP控制标识位,共有10位。

Reserved ECN CWR ECE URG ACK PSH RST SYN FIN

每一位控制 TCP 会话的某种行为:

1)Reserved:TCP保留,必须置为0

2)Accurate ECN:启用ECN精确确认机制

3)CWR:拥塞窗口减少 (Congestion Window Reduced)

4)ECE:显式拥塞通知 (ECN Echo)

5)URG:紧急指针有效 (Urgent Pointer)

6)ACK:确认号有效 (Acknowledgment)

7)PSH:推送 (Push)

8)RST:连接重置 (Reset)

9)SYN:发起连接 (Synchronize)

10)FIN:结束连接 (Finish)

每一位对应TCP的10个标识位。

14、Window:TCP流量控制字段,告诉对象发送方接收缓冲区还能接收多少字节。例如 Window: 2048,表示对方可以再发送2048字节数据而不用等待确认。

15、Calculated window size:Wireshark计算出的实际可用窗口大小,如果TCP使用窗口缩放(Window Scale),计算窗口 = 原始窗口 × 缩放因子。

16、Window size scaling factor:TCP选项里的窗口缩放因子,用于增加TCP的窗口大小,解决高带宽延迟产品(BDP)问题。

17、Checksum:TCP校验和,校验 TCP 头和数据,防止损坏。

18、Checksum Status:Wireshark 自动验证,显示结果。

[correct] 校验和正确

[incorrect] 校验和错误

[unverified]:无法校验(抓包环境可能不支持)

19、Urgent Pointer:指向紧急数据的结束位置(现在几乎不用,历史上用于紧急通知应用层数据)。仅当 Flags 中 URG=1 时才有效。

20、Options:TCP 支持多种可变长度选项,比如。

MSS (Maximum Segment Size):本端可接收的最大TCP段大小;

Window Scale:窗口缩放因子;

Timestamps:TCP时间戳,用于RTT(往返时延)估计和PAWS(保护机制);

SACK:选择性确认(Selective Acknowledgment)。

Wireshark 通常会显示:

Options: (12 bytes), Maximum segment size, SACK permitted, Timestamps

21、Timestamps:从TCP Options提取的时间戳,用于RTT估算、PAWS检测、防止序列号重用。

22、SEQ/ACK analysis:Wireshark分析TCP包的序列号与确认号关系。

23、Client Contiguous Streams/Server Contiguous Streams:分析客户端和服务器连续发送的数据流。

24、TCP payload:实际应用层数据,TCP头之后的字节,例如HTTP请求/响应、DNS over TCP、TLS等。

26、TCP segment data:Wireshark展示的TCP段原始数据,包括TCP头+TCP payload。

5、应用层(HTTP、DNS、TLS、SSDP等)

请求内容、头字段、域名、加密握手信息等等。

Wireshark应用层字段的UDP与TCP的结构差异很大。

TCP结构

TCP是面向连接、可靠的协议,TCP本身只负责数据可靠传输(序列号、确认号、窗口控制等),不解析应用数据。应用层字段取决于TCP payload的协议类型。

1、HTTP / HTTPS (TLS)

Wireshark 会识别 TLS/HTTP 协议

字段可能是:

TLSv1.2 Record Layer: Application Data
Protocol: Hypertext Transfer Protocol

实际内容可能加密,所以可能无法看到 HTTP 明文

2、X11(图形显示协议)

Wireshark 会解析 X11 event

如果抓包异常或数据不完整,可能显示:

[Malformed Packet: X11]
[Expert Info: Malformed Packet]
UDP结构

这是因为UDP是无连接、简单、头固定8字节的协议。本身不提供序列号、确认号、重传等机制。

因此,UDP中不同的应用协议字段也不相同。

1、DNS

1)Transaction ID:请求标识号;

2)Flags:查询/响应标志;

3)Questions / Answer RRs / Authority RRs / Additional RRs:DNS 报文各部分计数;

4)Queries / Additional records:具体查询或资源记录;

2、DHCP

DHCP 实际是基于 UDP 的客户端-服务器协议。

Wireshark 会解析成详细字段:

1)Message Type(Offer、Discover 等);

2)Transaction ID(DHCP 会话标识);

3)Client / Your / Next / Relay IP;

4)Options:子网掩码、路由器、DNS 等;

总结

Wireshark数据包结构,本质是从获取的数据包中提取数据,并以人类可读的方式显示出来。

Wireshark数据包结构和十六进制字符相对应,数据结构字段从原始字符中提取,个别字段是由Wireshark整理出来的。

主要分为Frame(帧)、Ethernet(以太网层)、IP层、传输层和应用层。

如果没有应用层字段,可能是因为:

1、可能是TCP包无payload(SYN/ACK),

2、加密协议(TLS/HTTPS)

3、Wireshark 无法识别或数据包异常

扩展文章

Mac使用Wireshark抓包入门指南:

https://fangjunyu.com/2025/10/18/mac%e4%bd%bf%e7%94%a8wireshark%e6%8a%93%e5%8c%85%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注