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的工作原理是这样的:
- 每个入口端口配置一组流过滤器(Stream Filter)
- 每个过滤器关联一个门控(Gate)和计量器(Meter)
- 门控决定是否允许该流通过,计量器控制流的速率
避坑指南:我曾经在调试时发现,某个流明明配置了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的工作流程是这样的:
- Talker(发送方)广播一个流预留请求,告诉网络「我要发一个流,需要多少带宽」
- Bridge(交换机)检查自己的资源,如果够用,就转发请求并预留资源
- Listener(接收方)收到请求后,确认接收,并回复确认消息
- 确认消息一路传回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时踩过的坑,保证实用。