3、TSN核心协议族(下):IEEE 802.1CB(冗余管理)、IEEE 802.1Qci(流过滤与监管)、IEEE 802.1Qcc(流预留协议)

好,咱们接着聊TSN的核心协议。上一章讲了时钟同步和调度,这一章咱们把剩下的三个关键协议啃下来:802.1CB、802.1Qci和802.1Qcc。这三个协议,说白了就是解决「数据丢了怎么办」、「恶意流量怎么防」和「带宽怎么分」的问题。

3.1 IEEE 802.1CB:冗余管理——给关键数据上双保险

先说说802.1CB。我记得刚做车载网络那会儿,客户要求ADAS系统的控制指令丢包率必须低于10^-12。我当时就懵了——普通以太网哪能做到这个?后来才知道,802.1CB就是专门解决这个问题的。

802.1CB的核心思想很简单:把同一份数据复制两份,走两条不同的路径发送。接收端收到后,只保留先到的那一份,后到的直接丢弃。这样一来,就算一条链路断了或者丢包了,另一条还能把数据送过来。

关键概念:

  • 序列号(Sequence Number):每个数据包都带一个递增的序列号,接收端靠它来识别重复包
  • 冗余标签(R-TAG):802.1CB在原始以太网帧里插入了一个6字节的冗余标签,包含序列号和子序号
  • 成员路径(Member Path):同一份数据的多个副本走的路径

我在项目中遇到过一个问题:某款交换机的802.1CB实现只支持两条冗余路径,但客户要求三条。后来查了芯片手册才发现,硬件只支持2个冗余实例。所以选型时一定要确认清楚——支持多少个冗余实例?每个实例支持多少条路径?

个人经验:802.1CB的序列号空间是16位的,也就是说最多65536个包。如果链路速率很高,序列号会很快回绕。我建议在配置时,把序列号回绕时间算清楚,避免接收端误判。

3.2 IEEE 802.1Qci:流过滤与监管——给网络装上防火墙

802.1Qci,全称是Per-Stream Filtering and Policing。你想想看,如果某个ECU突然发疯,疯狂往外发包,会怎么样?整个网络可能瞬间瘫痪。802.1Qci就是干这个的——对每个流进行独立的过滤和监管

802.1Qci的工作原理是这样的:

  1. 每个入口端口配置一组流过滤器(Stream Filter)
  2. 每个过滤器关联一个门控(Gate)和计量器(Meter)
  3. 门控决定是否允许该流通过,计量器控制流的速率

避坑指南:我曾经在调试时发现,某个流明明配置了Qci,但异常流量还是通过了。后来查了半天,原来是交换机的Qci硬件资源有限,只能同时监控32个流。超过这个数,多余的流就不受监管了。所以选型时一定要问清楚:硬件支持多少个流过滤器?

802.1Qci的计量器用的是令牌桶算法。说白了就是:给你一个桶,桶里装令牌,每发一个包消耗一个令牌。令牌消耗完了,要么丢包,要么打标记。我一般建议用双令牌桶——一个控制峰值速率,一个控制平均速率。这样既能应对突发流量,又能保证长期不超标。

参数 说明 典型值
CIR(承诺信息速率) 长期平均速率 100 Mbps
CBS(承诺突发大小) 允许的突发流量大小 1500 字节
EIR(超额信息速率) 允许的超额速率 50 Mbps
EBS(超额突发大小) 允许的超额突发大小 3000 字节

3.3 IEEE 802.1Qcc:流预留协议——带宽的「预订系统」

802.1Qcc,全称是Stream Reservation Protocol(SRP)的增强版。你想想看,如果每个ECU都抢带宽,那关键数据怎么办?802.1Qcc就是用来提前预订带宽的。

802.1Qcc的工作流程是这样的:

  1. Talker(发送方)广播一个流预留请求,告诉网络「我要发一个流,需要多少带宽」
  2. Bridge(交换机)检查自己的资源,如果够用,就转发请求并预留资源
  3. Listener(接收方)收到请求后,确认接收,并回复确认消息
  4. 确认消息一路传回Talker,整个预留过程完成

802.1Qcc的三种配置模型:

  • 完全分布式(Full Distributed):所有设备自主协商,适合小型网络
  • 完全集中式(Full Centralized):由中央控制器统一管理,适合大型网络
  • 混合式(Hybrid):Talker和Listener分布式,但交换机由中央控制器管理

我个人习惯用混合式。为什么?因为车载网络里,ECU的数量不多,但交换机层级可能很深。完全分布式的话,预留消息在网络里转来转去,延迟太大。完全集中式又太依赖中央控制器,万一控制器挂了,整个网络都瘫痪。混合式刚好折中——ECU自己决定要发什么流,交换机由中央控制器统一调度

802.1Qcc的预留信息包含在MSRP(Multiple Stream Reservation Protocol)报文中。我记得第一次抓包分析MSRP时,发现报文结构挺复杂的——有Talker Advertise、Talker Failed、Listener Ready等多种类型。嗯,这里要注意:如果预留失败,Talker Failed报文里会携带失败原因,比如带宽不足、优先级冲突等。

实战建议:802.1Qcc的预留是动态的,但车载网络通常要求确定性。我建议在系统启动时一次性完成所有预留,运行期间不再动态调整。这样可以避免预留冲突导致的丢包。

3.4 三个协议的协同工作

这三个协议不是孤立的。在实际项目中,它们经常配合使用:

  • 802.1Qcc负责预留带宽,确保关键流有足够的资源
  • 802.1Qci负责监管,防止非关键流占用预留带宽
  • 802.1CB负责冗余,确保关键数据不丢失

举个例子:ADAS系统的摄像头数据流。先用802.1Qcc预留100Mbps带宽,然后用802.1Qci限制其他流不能超过这个值,最后用802.1CB把数据复制两份走不同路径。这样一来,就算某条链路断了,ADAS系统依然能正常工作。

注意:这三个协议都需要硬件支持。802.1CB需要硬件插入和识别R-TAG,802.1Qci需要硬件实现令牌桶算法,802.1Qcc需要硬件维护预留状态。选型时一定要确认交换芯片是否支持这些功能。

好了,这一章的内容就到这里。下一章咱们聊聊TSN的时钟同步实现细节,包括gPTP的硬件时间戳和时钟校准算法。到时候我会分享一些我在调试gPTP时踩过的坑,保证实用。