本文为《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抓包入门指南: