4. TSN核心标准(三):IEEE 802.1Qbu & 802.3br(帧抢占)

各位好,咱们继续聊TSN。前面讲了时钟同步和调度,今天要聊的这个机制,我个人觉得特别有意思——帧抢占(Frame Preemption)

你想想看,在一个网络里,如果一个大胖子(长帧)正在过门,后面有个着急的小个子(关键流量)想先过去,怎么办?

传统以太网的做法是:胖子先走完,小个子等着。这一等,可能就是几百微秒甚至几毫秒。对于普通数据来说,这不算啥。但对于工业控制里的运动控制报文,几百微秒的延迟,机器可能已经跑偏了。

帧抢占就是来解决这个问题的。说白了,它允许一个长帧在传输过程中被“打断”,先让紧急的小帧插队过去,然后再把剩下的半截长帧传完。

核心思想: 关键流量不需要等长帧传完,可以“插队”发送。

4.1 为什么需要帧抢占?

我记得在早期做工业以太网项目时,遇到过这样一个场景:一条生产线上有几十个伺服驱动器,控制周期是1ms。网络里既有这些控制报文,也有摄像头传回来的图像数据。

图像数据帧很大,通常是1500字节甚至更大的巨型帧。一旦一个图像帧开始发送,控制报文就得等着。这一等,控制周期就超时了。机器开始抖动,产品报废率直线上升。

当时我们怎么解决的?把网络分成两个独立的物理网络,一个跑控制,一个跑数据。成本翻倍,布线复杂,维护也麻烦。

帧抢占的出现,就是为了在同一个物理链路上,优雅地解决这个问题。

4.2 帧抢占的工作原理

帧抢占由两个标准共同定义:

  • IEEE 802.1Qbu:定义了桥接设备(交换机)如何处理帧抢占,属于MAC层的增强。
  • IEEE 802.3br:定义了物理层如何实现帧的打断和恢复,属于PHY层的规范。

这两个标准必须配合使用。802.1Qbu负责“决策”,802.3br负责“执行”。

4.2.1 帧的结构变化

在帧抢占机制下,一个完整的以太网帧被分成了两部分:

  • 预占帧(Preemptable Frame):可以被中断的帧,通常是普通数据帧。
  • 快速帧(Express Frame):优先级高,可以打断预占帧的帧,通常是关键流量。

当一个快速帧需要发送时,交换机会检查当前是否有预占帧正在传输。如果有,它会:

  1. 等待当前正在传输的“片段”结束(最小64字节的碎片)。
  2. 插入一个“暂停点”标记。
  3. 立即发送快速帧。
  4. 快速帧发送完毕后,继续发送预占帧的剩余部分。

个人经验: 这里有个关键点——被中断的预占帧,其剩余部分会重新计算FCS(帧校验序列)。所以接收端看到的是两个独立的帧:一个碎片帧和一个完整的快速帧,最后再收到一个碎片帧的剩余部分。接收端需要有能力把这些碎片重新组装成完整的原始帧。

4.2.2 帧抢占的时序图

咱们用个简单的例子来说明:

时间轴 →
正常情况:
|---- 长帧(1500字节) ----|---- 快速帧 ----|

帧抢占情况:
|-- 长帧前半段 --|-- 快速帧 --|-- 长帧后半段 --|

你看,在帧抢占情况下,快速帧的发送延迟从“等待整个长帧传完”变成了“等待当前碎片传完”。这个碎片最大只有64字节,加上帧间隙,延迟通常控制在几十微秒以内。

4.3 帧抢占如何保障关键流量

帧抢占的核心价值在于:它把最坏情况下的延迟,从“最大帧长”降低到了“最小碎片大小”

咱们算笔账:

场景 最大阻塞时间(1Gbps) 最大阻塞时间(100Mbps)
无帧抢占(最大帧1518字节) 12.144 μs 121.44 μs
有帧抢占(最小碎片64字节) 0.512 μs 5.12 μs

看到了吗?在100Mbps的工业现场,帧抢占把最大阻塞时间从121微秒降到了5微秒。对于1ms控制周期的应用来说,这20多倍的提升,意味着系统从“勉强可用”变成了“游刃有余”。

注意: 帧抢占并不是万能的。它只解决了“长帧阻塞”的问题。如果网络里全是快速帧,那它也没什么用。另外,帧抢占需要链路两端的设备都支持,否则无法生效。

4.4 帧抢占的配置与实现

在实际项目中配置帧抢占,通常涉及以下几个步骤:

  1. 硬件支持确认:确认交换机和终端设备的PHY芯片支持802.3br,MAC层支持802.1Qbu。
  2. 使能帧抢占:在交换机的端口上开启帧抢占功能。
  3. 配置优先级映射:将关键流量(如控制报文)映射到快速帧队列,普通数据映射到预占帧队列。

以常见的工业交换机配置为例(思科风格):

interface GigabitEthernet0/1
 description 连接伺服驱动器
 preemption enable
 preemption express-priority 3-7
 preemption preemptable-priority 0-2
!

这段配置的意思是:

  • 开启帧抢占功能
  • 优先级3-7的帧作为快速帧(可以打断别人)
  • 优先级0-2的帧作为预占帧(可以被别人打断)

避坑指南: 我曾经在一个项目里,把所有流量都配成了快速帧。结果帧抢占功能完全没起作用,因为根本没有“可以被抢占”的帧。后来才意识到,帧抢占需要区分“快”和“慢”,不能一锅端。

4.5 帧抢占的局限性

任何技术都有它的边界,帧抢占也不例外:

  • 需要端到端支持:链路中只要有一个设备不支持,整个链路的帧抢占就无法工作。
  • 增加接收端复杂度:接收端需要实现碎片重组逻辑,对硬件有一定要求。
  • 不适用于所有场景:对于已经非常小的帧(如64字节的控制报文),帧抢占没有意义。
  • 与巨型帧的配合:如果网络里用了巨型帧(9000字节),帧抢占的效果会更明显,但巨型帧本身也会带来其他问题。

4.6 小结

帧抢占是TSN标准里一个非常实用的机制。它不像时钟同步那样复杂,也不像调度那样需要全局规划。它解决的是一个很具体的问题:如何让紧急的小报文,不用等慢吞吞的大报文

我个人觉得,帧抢占是TSN标准里“性价比”最高的一个。配置简单,效果明显。如果你正在搭建一个混合了控制流量和数据流量的工业网络,帧抢占绝对值得你优先考虑。

嗯,下一章咱们聊聊流预留(Stream Reservation),那是TSN里保证带宽的另一个重要手段。到时候见。