4、TSN核心概念:帧抢占(802.1Qbu & 802.3br)、快速帧与可抢占帧、MAC合并子层

各位同学,今天我们聊一个很有意思的话题——帧抢占。

说实话,我刚接触TSN那会儿,看到“帧抢占”这三个字,第一反应是:这不就是插队吗?后来深入项目才发现,它远比“插队”要精妙得多。它解决的是一个非常现实的问题:当高优先级的控制帧撞上正在传输的低优先级数据帧,怎么办?

传统的以太网做法是:等。等当前这个帧传完,下一个帧才能开始。但问题来了,一个最大尺寸的以太网帧(1518字节)在100Mbps链路上要占用大约120微秒。对于某些实时控制应用来说,120微秒的延迟是不可接受的。

帧抢占就是为此而生。它允许一个正在传输的低优先级帧被“打断”,先让高优先级的“快速帧”插队发送,然后再把剩下的部分续传完。

4.1 帧抢占的协议基础:802.1Qbu 与 802.3br

这里有两个标准,很多人容易搞混。我简单梳理一下:

  • 802.1Qbu:这是桥接层面的标准。它定义了桥接设备(交换机)如何处理帧抢占的优先级和调度逻辑。说白了,它管的是“谁可以抢、什么时候抢”。
  • 802.3br:这是物理层面的标准。它定义了MAC层如何实现帧的分割与重组。它管的是“怎么抢、抢完后怎么拼回去”。

两者缺一不可。802.1Qbu是决策层,802.3br是执行层。

关键点:帧抢占不是所有帧都能被抢。只有“可抢占帧”(Preemptable Frame)才会被中断。而“快速帧”(Express Frame)则是那个插队的角色。

4.2 快速帧与可抢占帧

咱们把这两种帧说透。

快速帧(Express Frame)

  • 优先级高,通常是控制类数据,比如CAN FD转发的紧急报文、音视频同步的时钟同步帧。
  • 发送时不需要等待当前可抢占帧传输完毕,可以直接打断。
  • 快速帧本身不会被抢占。

可抢占帧(Preemptable Frame)

  • 优先级低,通常是批量数据、日志、诊断信息等。
  • 可以被快速帧打断,打断后分成多个片段(Fragment)传输。
  • 接收端需要将这些片段重新组装成完整的帧。

我记得有一次在项目中调试一个ADAS系统的以太网通信,发现某个摄像头的数据总是丢包。排查了半天,发现是诊断日志的帧太大,占着链路不放,导致摄像头的高优先级控制帧被堵住了。后来启用了帧抢占,把诊断帧设为可抢占帧,问题立刻解决。嗯,这就是典型的应用场景。

4.3 MAC合并子层

这个层是802.3br的核心。它位于传统的MAC层和PHY层之间,负责两件事:

  1. 分割:当发送端要发送一个可抢占帧时,如果此时有快速帧等待,MAC合并子层会把当前的可抢占帧切成若干片段(最小64字节),然后插入快速帧。
  2. 重组:接收端的MAC合并子层收到这些片段后,会按照顺序重新组装成完整的原始帧。

这里有个细节:每个片段都有一个特殊的“起始帧分片”(SMD)标识,接收端靠这个来识别哪些片段属于同一个原始帧。

我的经验:配置MAC合并子层时,一定要注意最小片段长度的限制。802.3br规定每个片段至少64字节(包括前导码和SMD)。如果切得太碎,反而会增加链路开销。我一般建议在项目中把可抢占帧的尺寸控制在合理范围内,避免频繁触发抢占。

4.4 帧抢占的避坑指南

我曾经踩过一个坑,分享给大家:

某次在做车载TSN交换机配置时,我启用了所有端口的帧抢占功能。结果发现,某些低优先级的数据帧在接收端重组时总是超时。查了很久才发现,是因为链路上同时存在多个快速帧流,导致一个可抢占帧被反复打断,片段数量过多,重组缓冲区溢出。

解决方案其实不复杂:

  • 限制每个可抢占帧的最大打断次数(有些芯片支持配置)。
  • 或者,干脆把某些低优先级流标记为“不可抢占”,让它们一次性传完。

警告:帧抢占不是万能的。它只适用于点对点链路。如果你的网络中有hub(集线器)或者老式交换机,帧抢占可能无法正常工作。另外,802.1Qbu要求链路两端设备都支持帧抢占,否则会回退到传统模式。

4.5 实际配置示例

假设我们有一个车载网络,需要配置帧抢占。以下是一个简化的配置思路(以某款TSN交换机为例):

// 配置端口1为帧抢占使能
port 1 preemption enable

// 设置优先级映射:优先级3-7为快速帧,优先级0-2为可抢占帧
preemption priority-map 0-2 preemptable
preemption priority-map 3-7 express

// 设置最小片段大小(单位:字节)
preemption min-fragment-size 64

// 验证配置
show preemption status port 1

你想想看,如果没有帧抢占,高优先级的控制帧就得排队等低优先级的日志帧传完。这在自动驾驶场景下是不可接受的。所以,帧抢占是TSN实现确定性低延迟的关键技术之一。

4.6 小结

帧抢占的核心思想很简单:让紧急的先走。但实现起来涉及MAC层的分割重组、优先级映射、缓冲区管理等多个环节。

我个人习惯在项目初期就把帧抢占的配置纳入设计文档,而不是等到调试阶段再临时加。因为一旦链路拓扑确定,再改帧抢占的配置可能会影响其他TSN特性(比如802.1Qbv的时间感知整形)。

下一章我们会聊802.1Qbv——时间感知整形。那个更复杂,但也更有意思。咱们到时候见。