TSN 专题 · 第三批 · 第 2 篇:上一篇讲 Qav/SRP 的君子协定——流声明多少带宽就发多少。Qci 是配发给这套协定的执法队。
Qav 那套跑起来有个前提:所有人都守规矩。可 ECU 会故障(babbling idiot——一个节点朝网络狂喷),网络会被恶意注入,软件会写出死循环发包。一条流声明 2 Mb/s 实发 20 Mb/s,CBS 只能按"类"限速,分不清类里是哪条流在超标——超的那部分把整类额度用光,守规矩的流一起陪葬。
802.1Qci(Per-Stream Filtering and Policing,PSFP)就是干这个的:2017 年定标(Amendment 28,现并入 802.1Q-2018 第 8.6.5 条),工作在入口侧,按"每条流"认人、量身材、掐超标。
一、先认人:流识别
入口每收到一帧,第一步是归流:按 (stream_handle, 优先级) 找到属于它的 stream filter 实例。识别函数直接借了 802.1CB 的谱系:
| 识别方式 | 匹配什么 |
|---|---|
| Null 流识别 | 目的 MAC + VLAN(最常见) |
| 源 MAC + VLAN 流识别 | 按来源认 |
| IP 流识别 | 按 IP 五组认 |
| 主动流识别 | 匹配后重写 MAC/VLAN,把帧转换到另一条流 |
过滤器表是有序表:实例 ID 小的先匹配,规则顺序即逻辑顺序——和 ACL 一个思路。配重复了不会报警,静默按顺序走,所以规则顺序要当代码 review。
二、三道关卡
每条流的 filter 实例上挂三样东西,一帧来了挨个过:
关卡一:最大 SDU 尺寸过滤
超过该流 MaxSDU 的帧,直接丢。为什么单设这一关:超大帧会打乱 Qbv 的保护带假设——保护带是按队列最大帧留的,一个 9000B 的巨帧能掀翻整张时刻表。在入口掐掉,比在出口堵住便宜得多。
注意这关和 Qbv 的 queueMaxSDU 不是一回事:Qci 按流设、在入口查;queueMaxSDU 按队列设、在出口查。同一帧可能过得了 Qci 却死在 Qbv——两层都要算。
关卡二:流门(Stream Gate)
每条流一道门,开/关两态,也有一张周期循环的门控列表,吃 gPTP 的时间——结构就是 Qbv GCL 的单流简化版:
- 关窗期间到达的帧:丢弃,有专门计数器
- 门带 IPV(内部优先级值):过门时帧的内部优先级可以被改写——比如把某条流的帧统一提权
- GateClosedDueToInvalidRx:发现流在关窗到达,可以把门永久锁死,等网管介入——对付持续性攻击的闩锁
和 Qbv 的关系:Qbv 管"这个端口这个队列什么时候发",Qci 管"这条流什么时候能收"。两张表要协同设计、错开 peer delay——配错的表现是周期性地莫名丢帧。
关卡三:流量监管器(Flow Meter)
令牌桶,两个核心参数:
| 参数 | 含义 |
|---|---|
| CIR | 承诺信息速率(bit/s),令牌生成速率 |
| CBS | 承诺突发尺寸(byte),桶深 |
帧到达:桶里令牌 ≥ 帧长 → 放行并扣令牌;不够 → 超标。超标怎么处理看模式:
- 色标模式(Colour Aware):再加 EIR/EBS 第二级——CIR 内 GREEN 放行、EIR 内 YELLOW 可降级/告警、超了 RED 丢
- 防火墙模式:违规帧直接丢,静默
- ADS 模式:只告警不丢——上线初期先观察误杀率,再决定开火
标准明确:监管永远排在尺寸过滤之后执行——先掐超大帧,再算速率账。
三、和传统监管的区别
传统交换机监管是 per-port 或 per-queue:一条超速流混在队列里,被限的是整队,守规矩的邻居一起降速。Qci 按 (目的 MAC + VLAN) 的流粒度:一个流一个桶,误伤不了别人。这是 TSN"流"思维的一贯体现——Qbv 之后的机制,粒度都在往"每条流"收。
顺带一提,802.1Qch(循环排队转发 CQF)直接复用 Qci 的门操作做周期调度——Qci 这套门控机器,一鱼两吃。
四、参数从哪来
- Qcc/CNC 统一下发是正道(有标准 YANG 模型,P802.1Qcw);网管静态配置也合法
- 流清单通常来自 SRP 注册结果或 UNI 申请——Qci 的规则集和 Qav 的预留表同源:谈好的带宽,回头变成桶的 CIR
- 计数器是标配:过/不过门、过/不过尺寸、监管丢弃,各一组——这些计数就是后面排查的眼睛
五、工程配置与几个坑
- 忘开 Qci = 预留形同虚设:一个流氓流打满端口,所有流的延迟一起爆——Qav 的准入是"结婚前体检",Qci 是"婚姻法"
- 令牌桶别按平均值配:音视频帧是周期性突发的,CBS 不给够 burst,丢的全是合法帧——误杀比放行更难查
- MaxSDU 配小:视频大帧被入口拦,表现是"周期性整帧丢失",还查不到丢在哪跳
- 流门和 Qbv 门控没对齐:自己掐自己,同样是周期性丢帧——两张表一起 review
- 规则顺序冲突:两条流匹配到同一实例,后匹配的静默降级——按 ID 顺序把表过一遍
- 先 ADS 后防火墙:新流上线先开告警模式跑一周,看误杀计数,再切丢弃模式
六、结语
到这篇,"带宽"的故事讲圆了:Qav 谈预留、Qci 管执行——一个唱红脸一个唱白脸。但链路还是会断、光模块还是会挂,调度得再准也挡不住物理故障。下一篇换维度:802.1CB 帧复制与消除,同一帧发两份走两条路,把丢帧从概率问题变成路径问题。
你们入口侧开了 PSFP 吗?抓到过 babbling idiot 吗?评论区聊聊。
TSN 专题 · 第三批(带宽:预留与监管)
(一)信用整形器 ·(二)本篇:每流过滤与监管
第一批(gPTP 基本原理):(一)全景 · (二)BMCA · (三)对时数学 · (四)correctionField
第二批(门控与抢占):(一)Qbv 时间门 · (二)Qbu 帧抢占