3、TSN核心协议族(下):IEEE 802.1Qbu(帧抢占)、IEEE 802.1CB(帧复制与消除)、IEEE 802.1Qci(入口流过滤与监管)

好,咱们接着聊TSN核心协议。上一章讲了时钟同步和调度,这一章我重点说说剩下三个协议:帧抢占、帧复制与消除、入口流过滤与监管。这三个家伙,说白了就是解决“网络不可靠”和“带宽浪费”问题的。

3.1 IEEE 802.1Qbu:帧抢占

先说说帧抢占。你想想看,一个长帧正在链路上慢慢传,突然来了一个高优先级的紧急消息,比如刹车信号。传统以太网得等这个长帧传完,这延迟谁能忍?

帧抢占的原理,就是把一个长帧切成一个个小片段(称为“碎片”),中间允许高优先级帧插队。我习惯把它比作高速公路上的“应急车道”——大货车(低优先级帧)靠边停一下,让救护车(高优先级帧)先过。

核心机制:

  • 发送端将长帧分割成多个“mini帧”(最小64字节)
  • 高优先级帧可以在碎片之间插入
  • 接收端重新组装成完整帧

我在项目中遇到过一个问题:某款交换机的帧抢占实现有bug,导致碎片重组超时。嗯,这里要注意,帧抢占的兼容性是个大坑。不是所有交换机都支持,而且开启后必须两端协商好。

避坑指南:

我曾经在一个ADAS项目中,因为没检查对端设备是否支持Qbu,结果开启后链路直接断连。后来我学乖了,每次部署前先用LLDP确认双方能力。

3.2 IEEE 802.1CB:帧复制与消除

接下来是帧复制与消除。这个协议的名字听起来有点绕,其实说白了就是“冗余传输”。

为什么需要它? 因为TSN网络里,有些数据丢不得。比如自动驾驶的转向指令,丢一个包可能就出大事。传统做法是发两遍,但那样浪费带宽。802.1CB的做法更聪明:

  • 发送端:把原始帧复制成两份,走两条不同的路径
  • 接收端:只保留第一个到达的帧,丢弃重复的

我个人习惯把这种机制叫做“双保险”。你想想看,两条路都走,总有一条能到吧?

实际应用场景:

我记得在给某主机厂做域控制器测试时,他们要求所有安全关键信号(如制动、转向)必须走CB冗余路径。测试结果很理想,丢包率从10^-6降到了10^-12以下。

实现要点:

// 伪代码示例:帧复制与消除逻辑
// 发送端
if (stream_type == SAFETY_CRITICAL) {
    frame_copy1 = duplicate(original_frame);
    frame_copy2 = duplicate(original_frame);
    send_on_path_A(frame_copy1);
    send_on_path_B(frame_copy2);
}

// 接收端
if (sequence_number_already_received) {
    discard(frame);  // 消除重复帧
} else {
    process(frame);
    mark_sequence_number_as_received(seq_num);
}

这里有个关键点:序列号管理。接收端必须维护一个序列号表,防止重复帧通过。我建议序列号窗口大小至少设为4,否则高负载下容易误判。

3.3 IEEE 802.1Qci:入口流过滤与监管

最后说说入口流过滤与监管。这个协议,说白了就是“看门狗”——防止某个设备发疯,把网络冲垮。

它能做什么?

  • 过滤:根据源MAC、VLAN ID、优先级等条件,决定是否放行
  • 监管:限制每个流的带宽,超出的直接丢弃或标记

我在项目中遇到过最典型的场景:某个摄像头模组故障,疯狂发包,差点把整个车载以太网搞瘫痪。幸亏Qci设置了每流带宽上限,直接把它掐了。

Qci的三大核心动作:

  1. 门控:根据时间表开关门,配合Qbv使用
  2. 计量:用令牌桶算法计算流量是否超标
  3. 动作:通过、丢弃、或标记为低优先级

配置示例:

// 假设某视频流带宽上限为100Mbps
// 令牌桶参数:CIR=100Mbps, CBS=64KB
stream_filter {
    stream_id = 0x1234;
    max_sdu = 1500;  // 最大帧长
    cir = 100000;    // 承诺信息速率 (kbps)
    cbs = 65536;     // 承诺突发大小 (bytes)
    action = DROP;   // 超标则丢弃
}

嗯,这里要注意:Qci的粒度。你可以按流过滤,也可以按端口过滤。我建议在关键节点(如网关)开启流级过滤,在边缘节点用端口级过滤就够了,否则配置量太大。

避坑指南:

我曾经在测试中发现,Qci的令牌桶算法在低速率(<1Mbps)时精度很差。后来查资料才知道,很多芯片的硬件实现只支持整数速率,小数部分会四舍五入。所以配置时尽量用整数,避免踩坑。

3.4 三个协议的协同工作

这三个协议不是孤立的,它们经常一起用。我举个例子:

  • Qbu:让高优先级帧(如控制信号)能插队
  • CB:给关键数据做冗余备份
  • Qci:防止某个流占用过多带宽

你想想看,一个完整的TSN网络里,这三者缺一不可。没有Qbu,实时性不够;没有CB,可靠性不够;没有Qci,安全性不够。

我的建议:

在做一致性测试时,先单独测每个协议,再测组合场景。比如先测Qbu的碎片重组,再测CB的冗余切换,最后测Qci的带宽限制。组合测试时,注意优先级冲突——比如Qbu的抢占帧和CB的冗余帧同时到达,谁先处理?这得看具体实现。

好了,这一章就到这里。下一章我们聊聊TSN的测试方法论,到时候我会分享一些实际测试中的“血泪史”。