TSN 专题 · 第四批 · 第 1 篇:上一篇管住了"人祸",CB 管"天灾"——链路物理故障。
Qav/Qbv/Qbu/Qci 解决的都是"延迟和秩序":谁先发、发多快、发多大。可网线会碾断、光模块会挂、交换机会重启——物理层的事,调度表再准也挡不住。
传统答案是生成树:RSTP 重算要秒级,ERPS 快也要几十毫秒——切换期间的帧全丢。对安全控制流,这几百毫秒就是一次事故。
802.1CB(FRER,Frame Replication and Elimination for Reliability,2017 年定标)的思路干脆:不等故障、不做切换。同一帧发两份,走两条不相交的路,收端挑先到的——恢复时间是 0,因为压根没有"恢复"这个动作。
一、部件:复制点与消除点
| 部件 | 干什么 | 谁来做 |
|---|---|---|
| 序列生成 | 每帧编一个递增序列号 | talker 或入口桥 |
| 流分裂(复制) | 一份变 N 份,各走各路 | 同上 |
| 序列恢复(消除) | 按序列号去重、挑先到 | listener 或出口桥 |
三个要点:
- TSN 流是单向的,CB 也只单向——反方向是另一套独立实例
- 复制/消除可以放在端系统,也可以放在边缘桥,中间桥完全无感
- N 可以大于 2:要几条冗余路由是设计参数(Qcc 篇会看到它写在用户需求里)
二、R-tag:序列号搭车
序列号搭什么车?一个 6 字节的 R-tag(Redundancy Tag),插在 VLAN tag 和 payload 之间:
[目的MAC][源MAC][VLAN Tag][ R-TAG ][Payload][FCS]
EtherType Reserved Sequence
0xF1C1 2B 全 0 Number
2B 16 位
- 序列号 16 位,逐帧 +1,回绕
- EtherType 0xF1C1 不是 TPID,不会和 VLAN tag 混淆;一帧可以带多个 R-tag
- 中间老桥不认识这个 EtherType 也不用升级——转发本来就只看 MAC/VLAN,按普通帧送走即可;复制点负责插、消除点负责剥
- 配合主动流识别,复制时还能改写两份拷贝的 MAC/VLAN,强行把它们送上不同路径
三、消除算法:匹配恢复与向量恢复
收端拿到多路拷贝,怎么判重?标准给两种算法:
匹配恢复(MatchRecoveryAlgorithm):只和"上一个被接受的序列号"比——相同 = 重复,丢;不同 = 接受。轻量,适合两条路延迟差可控的场景。
向量恢复(VectorRecoveryAlgorithm):维护一个历史向量,能识别窗口内的乱序——两条路延迟不同、后发先至也不误杀。
关键参数是历史窗口 frerSeqRcvyHistoryLength:落在窗口外的帧当无效帧丢。所以有一条铁律:窗口必须大于两条路的差分延迟——配小了的表现是周期性丢帧,而且丢在收端,抓包都抓不到现场。
还有两个层级:Individual recovery(单条 member 流内去重,抓"坏源重复发同一帧")和 Sequence recovery(多路合并去重)。外加一个 TakeAny 超时:等不齐就先取先到。
四、潜在错误检测:标准自己都说它弱
CB 带一个 Latent Error Detection:假设 n 条路的复合流,每放行 1 帧应该丢弃 n−1 帧——比例不对就发 SIGNAL_LATENT_ERROR。
但 IEEE 802.1 的维护文档里数过它的不是:
- 不知道哪条路坏了,也不知道多严重
- 不检测窗口外丢弃——而那往往正是某条路延迟劣化的信号
- 会误报:TakeAny 场景把 frerCpsSeqRcvyLostPackets 算高;故障恢复后 SIGNAL 要等 LatentErrorReset 才消
- 所有路径同时丢帧的毛刺,它检测不到
工程含义很直白:一条路静默劣化,FRER 业务侧毫无感知——流量照通,但你只剩单路,冗余已经没了。别只盯着 SIGNAL,要把每路径的接受/丢弃计数差拉出来做巡检。
五、和 PRP/HSR 的亲戚关系
提到双发选收,老电气人都会想到 IEC 62439-3 那一对:
| 802.1CB | PRP(62439-3 §4) | HSR(62439-3 §5) | |
|---|---|---|---|
| 拓扑 | 交换网 | 双 LAN 并行 | 环形 |
| 标记 | R-tag(头部 6B) | RCT(尾部 6B) | HSR tag |
| 复制/消除点 | 端系统或边缘桥 | 端系统 | 环上每个节点 |
| 恢复时间 | 0 | 0 | 0 |
| 出身 | TSN / 车载 / 工业 | 变电站 | 轨道交通 |
CB 和它们的本质区别:CB 生在交换网里,能跟 Qbv 调度共存,冗余路径就是普通转发路径;PRP/HSR 是"另拉一套网"。车载骨干网选 CB,图的就是不用改拓扑。
六、工程配置与几个坑
- 两条路必须真正不相交:共链路、共机框、共电源都是共因故障——纸面冗余。设计图先数一遍有没有共享段
- 差分延迟实测:一条路多绕两跳,乱序窗就爆;上线前用带时间戳的探测帧把两条路的延迟差测出来,再定窗口
- 重复帧出现在应用层 = 消除没生效:检查消除点配在哪跳、R-tag 有没有被中间设备改写
- 带宽 ×2:排 GCL 时两份拷贝都要算进去,CB 不是免费的
- 16 位序列号回绕:窗口远小于 65536,正常无感;但节点长时间静默后突然涌入的"老年帧"要能被窗口挡掉
- N 路冗余的账:每加一条路,带宽再加一份,交换机的 member stream 表项、收端缓冲都要跟着涨
七、结语
CB 把"丢帧"从概率问题变成了路径问题:只要两条路不同时坏,帧就到得了。零切换、零等待——这是 TSN 可靠性叙事里最硬的一块。
下一篇收官:802.1Qcc 集中式配置。前面六种子类,配置散在各处——GCL 手排、SRP 自己谈、CB 路径静态配。Qcc 用一个 CNC 大脑统一下发,连"这条流要几条冗余路"这种参数都有了正式的上报接口。七子类至此拼圆。
你们车上 CB 开了几路?差分延迟测过吗?评论区报个数。
TSN 专题 · 第四批(冗余与部署)
(一)本篇:帧复制与消除 ·(二)集中式配置
第一批(gPTP 基本原理):(一)全景 · (二)BMCA · (三)对时数学 · (四)correctionField
第二批(门控与抢占):(一)Qbv 时间门 · (二)Qbu 帧抢占
第三批(带宽:预留与监管):(一)Qav 信用整形器 · (二)Qci 每流过滤与监管