使用 Wireshark 查看实际数据包的头部大小需要抓取网络流量并分析数据包的结构。以下是具体步骤,帮助你在 PPPoE 接入场景下确认头部开销:
步骤 1:抓包准备
-
安装 Wireshark:
- 在你的电脑上安装 Wireshark(官网:https://www.wireshark.org/),或者如果你的 OpenWrt 软路由支持,可以直接在路由器上安装(需要安装 tcpdump 或 wireshark 包,但通常硬件性能有限,建议在电脑上操作)。
-
选择抓包接口:
-
如果在电脑上抓包,连接到软路由的 LAN 口,确保流量经过路由器。
-
打开 Wireshark,选择正确的网络接口(比如连接路由器的网卡,通常是 Ethernet 或 Wi-Fi 接口)。
-
如果在路由器上抓包,SSH 登录路由器,使用 tcpdump 命令抓取 WAN 接口流量,例如:
bash
重击tcpdump -i eth0 -w capture.pcap然后将 capture.pcap 文件传输到电脑,用 Wireshark 打开。
-
-
开始抓包:
-
点击 Wireshark 的“Start Capturing Packets”按钮,或者在路由器上运行 tcpdump。
-
为了生成流量,可以在电脑上 ping 一个外部地址(如 ping 8.8.8.8)或下载文件,确保抓到 WAN 口的 PPPoE 数据包。已经通过tcpdump抓包,用Wireshark怎么分析这个数据包,并确定链路层适配值
-
在用 tcpdump 抓包生成 capture.pcap 文件后,你可以用 Wireshark 打开并分析数据包,以确定 PPPoE 接入下的链路层适配值(即开销/overhead)。以下是具体步骤,帮助你分析数据包并计算出适合 OpenWrt SQM 配置的数值:
步骤 1:打开抓包文件
-
启动 Wireshark:
- 在电脑上打开 Wireshark(确保已安装,下载地址:https://www.wireshark.org/)。
-
导入 pcap 文件:
-
点击菜单栏的 File -> Open,选择你从路由器传输过来的 capture.pcap 文件(如 ./capture.pcap)。
-
文件加载后,你会看到数据包列表。
-
步骤 2:筛选 PPPoE 数据包
-
应用过滤器:
-
在 Wireshark 上方的过滤栏输入:
pppoes然后按回车。这会筛选出 PPPoE 会话(PPPoE Session)数据包,因为你使用的是 PPPoE 接入。
-
如果没有数据包显示,尝试输入 eth 或清空过滤器,检查是否抓到了 WAN 接口的流量。
-
-
确认抓包接口:
- 确保抓包是在 WAN 接口(如 pppoe-wan)进行的。如果抓的是 LAN 侧流量,可能看不到 PPPoE 头部,需要重新抓包。
步骤 3:分析数据包结构
-
选择一个数据包:
-
在数据包列表中,找到一个标记为 PPPoE Session 的数据包,点击它。
-
下方的“Packet Details”面板会显示该数据包的层级结构。
-
-
展开链路层相关部分:
-
Wireshark 会按层级显示数据包内容,重点关注以下部分:
-
Ethernet II(以太网帧):
-
展开此层,查看:
-
Destination MAC(6 字节)
目标 MAC(6 字节) -
Source MAC(6 字节)
-
Type(2 字节,通常是 0x8864 表示 PPPoE)
-
长度:固定 14 字节。
-
-
检查是否有 VLAN:
- 如果 Type 是 0x8100(VLAN),会多出一个 4 字节的 VLAN Tag(包含优先级和 VLAN ID)。
-
-
PPPoE(Point-to-Point Protocol over Ethernet):
PPPoE(以太网上的点对点协议):-
展开 Point-to-Point Protocol over Ethernet Session:
-
Version(1 字节)
版本(1 字节) -
Type(1 字节)
-
Code(1 字节,通常是 0x00 表示会话数据)
-
Session ID(2 字节)
会话 ID(2 字节) -
Length(2 字节)
-
长度:固定 8 字节。
-
-
-
PPP(Point-to-Point Protocol):
PPP(Point-to-Point Protocol)协议):- 展开此层,通常是 2-4 字节(协议字段,如 0x0021 表示 IPv4)。
-
-
FCS(帧校验序列):
- 以太网帧末尾的 4 字节校验字段,Wireshark 默认不显示,但实际存在。
-
-
计算链路层开销:
-
从最外层(Ethernet)到 PPPoE 的结束位置(不包括 PPP 和上层协议),计算总字节数:
-
无 VLAN:Ethernet (14) + PPPoE (8) + FCS (4) = 26 字节。
无 VLAN:以太网 (14) + PPPoE (8) + FCS (4) = 26 字节。 -
有 VLAN:Ethernet (14) + VLAN (4) + PPPoE (8) + FCS (4) = 30 字节。
有 VLAN:以太网 (14) + VLAN (4) + PPPoE (8) + FCS (4) = 30 字节。
-
-
注意:PPP 部分(2-4 字节)通常不计入 SQM 的链路层开销,因为它属于更高层协议。
-
步骤 4:验证数据包
-
检查多个数据包:
-
重复步骤 3,分析几个不同的 PPPoE 数据包,确保结果一致。
-
如果有 VLAN 标记(0x8100),所有数据包都应包含额外的 4 字节。
-
-
查看总长度:
-
在数据包顶部,Wireshark 会显示“Frame”信息,例如:
Frame 1: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) -
这是整个数据包的长度(包括 FCS)。减去 IP 和上层协议的长度(通常从 PPP 后的 IPv4 开始),可以验证链路层部分。
-
-
确认 DSCP 或其他封装:
- 如果你的 ISP 使用了额外的封装(如 MPLS),可能会增加开销,但这在 PPPoE 中不常见。如果看到异常头部,可以进一步分析。
步骤 5:确定链路层适配值
根据分析结果:
-
26 字节:标准 PPPoE,无 VLAN。
-
30 字节:PPPoE + VLAN(常见于某些光纤接入)。
-
34-44 字节:如果有额外的封装或对齐要求(较少见,需抓包确认)。
推荐值:
-
如果不确定是否有 VLAN,从 30 字节 开始测试(假设可能有 VLAN)。
-
在 OpenWrt SQM 配置中:
-
链路层适配:Ethernet with overhead
链路层适配:以太网带开销 -
开销(Overhead):填入 30(或根据抓包结果调整)。
-
示例分析
假设一个数据包显示:
- Ethernet II (14 bytes)
- Destination: 00:11:22:33:44:55
- Source: 66:77:88:99:aa:bb
- Type: 0x8864 (PPPoE)
- PPPoE Session (8 bytes)
- Version: 1
- Type: 1
- Code: 0x00
- Session ID: 0x1234
- Length: 42
- PPP (2 bytes)
- IPv4 (20 bytes)
-
计算:14 (Ethernet) + 8 (PPPoE) + 4 (FCS) = 26 字节。
计算:14 (以太网) + 8 (PPPoE) + 4 (FCS) = 26 字节。 -
如果 Type 为 0x8100,后面跟 0x8864,则加 4 字节,总计 30 字节。
步骤 6:应用并测试
-
配置 SQM:
-
在 LuCI 的 Network -> SQM QoS 中,设置:
-
队列算法:cake
-
脚本:layer_cake.qos(或其他)
-
链路层适配:Ethernet with overhead
链路层适配:以太网带开销 -
开销:30(根据分析调整)。
-
-
保存并应用。
-
-
测试效果:
-
运行高负载任务(如下载)并同时 ping 测试(ping 8.8.8.8)。
-
如果延迟稳定,说明开销值合适;如果仍有缓冲区膨胀,尝试增加到 34 或减少到 26,微调至最佳。
-
注意事项
-
抓包位置:确保抓的是 WAN 侧流量(pppoe-wan),LAN 侧看不到 PPPoE 头部。
-
FCS 不显示:Wireshark 默认不显示 4 字节 FCS,但计算时需加上。
-
异常情况:如果发现额外封装(超出 30 字节),可能是 ISP 特定的协议,需联系 ISP 确认。
总结
通过 Wireshark 分析 capture.pcap,你可以:
-
确认以太网和 PPPoE 头部字节数(通常 26 或 30)。
-
检查是否有 VLAN(加 4 字节)。
-
将结果应用到 SQM 的链路层适配中。