队列丢弃与优先级
网络设备在出接口拥塞时按队列策略处理报文:先按 DSCP 分类入队,队列满了就尾丢弃,配置了主动队列管理(如 WRED)则按权重提前丢。抓包里看不到队列本身,但可以通过 DSCP 分组统计推断哪类流量被优先丢弃,再与设备侧队列计数互相印证。这是把端到端现象落到具体出接口的一条路径。
基本信息
| 关键字段 | ip.dsfield.dscp(IPv4)、ipv6.tclass(IPv6) |
|---|---|
| 常用标记 | EF=46、AF41=34、CS6=48、BE=0 |
| 观察方法 | 按 DSCP 分组比较丢失率与重传比例 |
| 前提条件 | 端到端每一跳都需保留标记,任一跳清空即失效 |
典型使用场景
- 语音或视频卡顿排查:确认 EF 标记是否在链路中途被清除
- 判断拥塞丢包是否按优先级发生,还是无差别丢弃
- 核对 QoS 策略是否端到端生效,而不只是首跳配置
- 与设备队列计数对照,把问题定位到具体出接口
- 评估扩容优先级:先看哪一类流量的损失最大
按 DSCP 分组统计
按 DSCP 分组统计
tshark -r t.pcap -Y "ip.dsfield.dscp==46" -T fields -e ip.src -e ip.dst -e frame.number
# 语音等高优先流量,逐个确认标记是否贯穿链路
tshark -r t.pcap -q -z io,stat,10,"COUNT(frame)ip.dsfield.dscp==46","COUNT(frame)ip.dsfield.dscp==0"
# 每 10 秒一组,对比优先流量与默认流量的包量变化
tshark -r t.pcap -Y "tcp.analysis.retransmission" -T fields -e ip.dsfield.dscp
# 看重传集中的 DSCP 取值,判断哪类流量受损更重DSCP 常用取值
| 取值 | 名称 | 典型用途 |
|---|---|---|
| 46 | EF | 语音,要求低延迟低抖动低丢失 |
| 34 / 36 / 38 | AF41 / AF42 / AF43 | 视频与交互类业务 |
| 26 / 28 / 30 | AF31 / AF32 / AF33 | 重要数据业务 |
| 48 | CS6 | 网络控制协议 |
| 0 | BE | 默认,尽力而为 |
标记只有在设备信任并保留时才有意义。中间设备若清空或重写 DSCP,端侧按标记做的分组统计就与设备侧的实际策略不一致,结论必须两边互相验证。
不要仅凭两个抓包点的数量差异断定某台设备在丢包。抓包点本身可能因内核缓冲不足丢帧。先统一两侧的过滤条件与统计窗口,再用设备侧计数交叉确认。
排查顺序
- 先确认标记是否端到端保留:在靠近源与靠近目的处分别统计 DSCP 分布
- 再看拥塞时段是否与丢失上升吻合,结合链路利用率数据
- 按 DSCP 分组算丢失率与重传率,找出受损最重的类别
- 与设备队列统计对照,锁定出接口
- 最后核对 QoS 配置是否与设计一致,含分类、标记、队列与丢弃策略