TSN基础:时间敏感网络核心概念、IEEE 802.1Qbv/Qbu/Qci等标准概述
时间敏感网络(Time-Sensitive Networking, TSN)并非单一协议,而是一组由IEEE 802.1任务组制定的、旨在为标准以太网提供确定性传输能力的标准集合。TSN的核心目标是在不牺牲标准以太网兼容性的前提下,为时间关键型流量提供有界延迟、低抖动和零拥塞丢失的传输保障。对于FPGA实现TSN流识别与优先级分类模块而言,理解TSN的协议栈分层、核心标准(特别是Qbv、Qbu、Qci)之间的协同关系,以及它们在数据平面中的具体作用,是设计硬件逻辑的前提。本章将系统梳理TSN的核心概念,并重点剖析与FPGA数据面设计直接相关的三个关键标准。
2.1 TSN核心概念与协议栈分层
2.1.1 核心原理:从“尽力而为”到“确定性传输”
传统以太网采用先到先服务的转发机制,当网络拥塞时,数据帧在交换机队列中排队等待,延迟不可预测。TSN通过一系列机制将网络行为从“统计复用”转变为“确定性调度”。其核心概念包括:
- 时间同步(IEEE 802.1AS):所有TSN节点共享同一时间基准,精度通常在亚微秒级。这是Qbv门控调度和Qci流门控的时间基础。
- 流量整形(Shaping):通过限制流量发送速率和时机,避免突发流量造成拥塞。Qbv的时间感知整形是最典型的代表。
- 流过滤与监管(Policing):在入口处对流量进行合法性检查,防止异常流量占用带宽资源。
- 帧抢占(Preemption):允许高优先级帧打断低优先级帧的发送过程,进一步降低关键流量的最大延迟。
2.1.2 判断方法:如何识别TSN流量类型
在FPGA设计中,首先需要区分不同类型的TSN流量。通常根据实时性要求分为三类:
| 流量类型 | 典型应用 | 延迟要求 | 帧大小特征 |
|---|---|---|---|
| 时间关键型(Time-Critical) | 运动控制、实时音频 | < 100μs | 通常为小帧(64-128B) |
| 实时型(Real-Time) | 工业视觉、过程控制 | < 1ms | 中等帧(128-512B) |
| 尽力而为型(Best-Effort) | 配置、日志、非实时数据 | 无严格约束 | 任意大小(最大1518B) |
FPGA流识别模块需要根据VLAN优先级(PCP)、IP DSCP值或自定义的流特征(如源/目的MAC+IP+端口)来区分这些流量类型,并映射到不同的硬件队列。
2.1.3 案例拆解:工业以太网中的TSN流量混合场景
考虑一个典型的工业控制网络:一个PLC通过TSN交换机连接多个伺服驱动器。网络中同时存在三种流量:周期性的运动控制帧(每1ms发送一次,64字节)、非周期的报警帧(偶发,128字节)、以及用于固件升级的TCP/IP流量(大帧)。
在FPGA实现中,流识别模块需要:
- 通过VLAN ID=100和目的MAC前缀识别运动控制流,映射到队列7(最高优先级)。
- 通过VLAN ID=200识别报警流,映射到队列5。
- 其余流量映射到队列0-3。
这样,Qbv门控列表可以保证队列7在每个周期开始时有固定的发送窗口,从而确保运动控制帧的延迟上限。
2.2 IEEE 802.1Qbv:时间感知整形器(TAS)
2.2.1 核心原理:门控列表驱动队列发送
802.1Qbv定义了每个出口端口上的8个队列,每个队列对应一个“门”(Gate)。门的状态(开/关)由门控列表(Gate Control List, GCL)周期性地控制。GCL是一个预定义的调度表,每个表项包含:
- 门状态:8位位图,每一位对应一个队列的门(1=开,0=关)。
- 时间间隔:该状态持续的时间长度。
所有TSN节点通过802.1AS保持时间同步,因此每个节点在同一时刻执行相同的门控状态,从而实现端到端的确定性调度。
2.2.2 判断方法:如何设计GCL调度表
设计GCL需要遵循以下步骤:
- 确定周期:通常取所有时间关键流量的最小公倍数作为调度周期。
- 分配时间片:为每个时间关键流分配专用的发送窗口,窗口大小需覆盖其最大帧长+前导码+帧间隙。
- 填充保护带:在时间关键窗口前后设置保护带(Guard Band),防止非关键帧跨越窗口边界。
- 剩余时间:分配给尽力而为流量。
2.2.3 案例拆解:三流混合调度的GCL设计
假设一个周期为1ms的调度周期,包含:
- 流A:64字节帧,每1ms发送1帧,需要约6.72μs(含帧间隙)。
- 流B:128字节帧,每2ms发送1帧,需要约12.3μs。
- 尽力而为流量:无时间约束。
GCL设计如下:
| 时间偏移 | 持续时间 | 队列7门 | 队列5门 | 队列0-3门 | 说明 |
|---|---|---|---|---|---|
| 0μs | 7μs | 开 | 关 | 关 | 发送流A |
| 7μs | 1μs | 关 | 关 | 关 | 保护带 |
| 8μs | 13μs | 关 | 开 | 关 | 发送流B(仅偶数周期) |
| 21μs | 979μs | 关 | 关 | 开 | 尽力而为流量 |
在FPGA中,GCL存储在RAM中,由硬件定时器触发读取。每个门控周期开始时,定时器加载第一个表项,并在时间到达后切换到下一个表项。
2.3 IEEE 802.1Qbu:帧抢占
2.3.1 核心原理:双MAC架构与可打断帧
802.1Qbu允许高优先级帧(快速帧)打断正在发送的低优先级帧(慢速帧)。为此,物理层需要支持两个MAC:
- eMAC(Express MAC):发送快速帧,优先级高。
- pMAC(Preemptable MAC):发送慢速帧,可被抢占。
当pMAC正在发送一个帧时,如果eMAC有帧要发送,pMAC会在当前帧的“可抢占点”(通常为64字节边界)暂停发送,让eMAC插入快速帧。快速帧发送完毕后,pMAC从暂停点继续发送剩余部分。
2.3.2 判断方法:何时启用帧抢占
帧抢占并非所有场景都需要。启用条件包括:
- 存在严格延迟要求的小帧(如控制帧),且无法通过Qbv单独分配窗口。
- 链路带宽有限,无法为所有时间关键流预留专用窗口。
- 需要兼容不支持Qbv的旧设备(通过抢占实现近似确定性)。
2.3.3 案例拆解:FPGA中的抢占实现
在FPGA中实现Qbu需要修改MAC层逻辑:
- 在发送路径上,将帧分为“可抢占”和“不可抢占”两类。
- 可抢占帧在发送时,每64字节检查一次eMAC是否有待发送帧。
- 如果有,则发送“暂停”信号,记录当前字节偏移,切换到eMAC发送。
- eMAC发送完毕后,恢复pMAC发送,并附加“重组”信息。
接收端需要缓存被抢占的帧片段,并根据片段中的序列号重组完整帧。这增加了FPGA内部的存储和状态机复杂度。
2.4 IEEE 802.1Qci:流过滤与监管(PSFP)
2.4.1 核心原理:入口处的流量警察
802.1Qci(PSFP, Per-Stream Filtering and Policing)在入口处对每个流进行独立的过滤和监管。它包含三个主要功能:
- 流过滤(Stream Filtering):根据流ID(由目的MAC、VLAN ID等组成)决定是否允许该帧通过。
- 流门控(Stream Gating):类似Qbv,但作用于单个流而非队列,可以基于时间窗口允许/拒绝特定流的帧。
- 流计量(Stream Metering):使用令牌桶算法限制流的速率,超速帧被丢弃或标记。
2.4.2 判断方法:Qci与Qbv的分工
| 维度 | Qbv | Qci |
|---|---|---|
| 作用位置 | 出口(Egress) | 入口(Ingress) |
| 作用对象 | 队列(8个) | 单个流(可多达数千个) |
| 主要功能 | 控制发送时机 | 控制接收许可 |
| 时间粒度 | 纳秒级门控 | 微秒级门控 |
| FPGA资源消耗 | 中等(GCL存储+定时器) | 较高(每流状态+令牌桶) |
2.4.3 案例拆解:防止异常流量冲击
考虑一个TSN网络中的终端设备,其发送周期为1ms,最大突发为2帧。如果该设备发生故障,开始以100μs间隔发送帧,将导致网络拥塞。Qci的流计量功能可以检测到这种异常:
- 为每个流配置令牌桶参数:承诺信息速率(CIR)= 64帧/s,承诺突发大小(CBS)= 2帧。
- 当帧到达时,检查令牌桶中是否有足够的令牌。
- 如果不足,则丢弃该帧或将其标记为“黄色”(可丢弃)。
在FPGA中,每个流需要独立的令牌桶状态(当前令牌数、上次更新时间)。对于数千个流,这需要大量的BRAM资源。一种优化方案是使用“共享令牌桶”+“流ID哈希”的方式,将流分组监管。
2.5 常见误区与设计复盘
2.5.1 误区一:将Qbv视为唯一调度手段
许多初学者认为只要实现了Qbv就能保证确定性。实际上,Qbv只控制发送端,如果入口流量不受控(没有Qci),异常流量仍可能填满队列,导致门控失效。正确的做法是:入口用Qci做流量整形,出口用Qbv做发送调度,两者配合才能形成完整的确定性链路。
2.5.2 误区二:忽略帧抢占与Qbv的交互
Qbu的抢占机制会改变帧在链路上的实际发送时间。如果Qbv的GCL没有考虑抢占造成的额外开销(如快速帧插入导致的慢速帧延迟),调度精度会下降。在FPGA设计中,建议在GCL计算时预留“抢占余量”,或者在硬件层面将Qbu的抢占事件反馈给Qbv调度器,动态调整门控时间。
2.5.3 误区三:流识别规则过于复杂
FPGA资源有限,如果流识别规则需要匹配几十个字段,会消耗大量LUT和BRAM。实际工程中,应优先使用VLAN ID + 目的MAC作为流识别键,必要时才增加IP和端口字段。对于需要深度包检测的场景,建议使用CPU卸载到FPGA的“慢路径”处理,而非全部在硬件中实现。
2.5.4 设计复盘:一个典型的FPGA实现流程
- 需求分析:确定网络中的流量类型、数量、延迟要求。
- 协议映射:将需求映射到Qbv的GCL、Qci的流规则、Qbu的抢占策略。
- 硬件架构:设计流识别引擎(哈希+TCAM)、队列管理(8队列)、门控执行器(GCL状态机)、抢占控制器。
- 验证:使用仿真工具注入混合流量,检查延迟分布和丢包率。
- 优化:根据验证结果调整GCL参数、令牌桶参数,或优化硬件流水线。