第三章 车载以太网QoS架构:AVB/TSN协议族介绍、gPTP时间同步、SRP流预留、FQTSS队列调度

各位同学,今天我们进入车载网络QoS的核心地带。说实话,AVB/TSN这套协议族,是我这些年调试过程中打交道最多的东西。你想想看,一辆智能汽车里,摄像头数据、雷达点云、控制指令、娱乐音视频,全都挤在以太网这条“高速公路”上。谁先走?谁可以插队?谁必须准时到达?这就是QoS要解决的问题。

AVB(Audio Video Bridging)最初是为了音视频传输设计的,后来演进成了TSN(Time Sensitive Networking)。在车载领域,我们主要用它的四个核心组件:gPTP时间同步、SRP流预留、FQTSS队列调度,以及802.1Qav/CBS整形。今天我把它们拆开来讲。

3.1 AVB/TSN协议族概览

AVB/TSN不是一个协议,而是一整套协议族。我习惯把它们分成三层来看:

  • 时间同步层:gPTP(802.1AS)—— 给全网设备一个统一的时间基准
  • 资源预留层:SRP(802.1Qat)—— 告诉网络“我要发多少数据,需要多少带宽”
  • 队列调度层:FQTSS(802.1Qav)—— 按照优先级和预留带宽,决定谁先发送

这三层缺一不可。没有时间同步,调度就是瞎搞;没有流预留,高优先级流量可能把低优先级饿死;没有队列调度,预留了带宽也执行不了。

核心观点:AVB/TSN的本质,就是把“尽力而为”的以太网,改造成“确定性”的网络。在车载环境里,确定性比带宽更重要。

3.2 gPTP时间同步:全网只有一个“钟”

gPTP(generalized Precision Time Protocol)是IEEE 802.1AS标准定义的。说白了,就是让车上所有ECU都对齐到同一个时间基准。为什么需要这个?

举个例子。我调试过一个ADAS系统,摄像头和域控制器之间需要精确同步。摄像头在T1时刻采集了一帧图像,域控制器在T2时刻收到了。如果T1和T2不是同一个时钟源,你根本算不出传输延迟,更别提做传感器融合了。

gPTP的工作原理,我简单总结一下:

  1. 主时钟选举:网络中选出一个“最准”的节点作为Grandmaster
  2. 同步报文交互:主时钟周期性地发送Sync报文,从时钟记录到达时间
  3. 延迟测量:通过Pdelay_Req/Pdelay_Resp报文,测量链路往返延迟
  4. 时钟校正:从时钟根据测量结果,调整自己的本地时钟

这里有个关键点:gPTP的精度要求是亚微秒级(<1μs)。在1000BASE-T1链路上,我曾经实测过,好的实现能做到±200ns以内。

避坑指南:我曾经遇到过一个项目,gPTP同步总是跳变。查了两天,发现是某个交换机的PTP硬件时间戳功能没使能。记住:gPTP必须依赖硬件时间戳,纯软件实现精度根本不够。

3.3 SRP流预留:先预约,再上路

SRP(Stream Reservation Protocol)是IEEE 802.1Qat定义的。它的作用,就是让发送方提前告诉网络:“我要发一路流,带宽是X Mbps,延迟要求是Y微秒,你帮我预留好。”

SRP的工作流程,我习惯用“举手-应答”来理解:

  • Talker宣告:发送端发出Talker Advertise,描述流的特征(目的MAC、VLAN ID、带宽需求、优先级)
  • Listener应答:接收端收到后,回复Listener Ready,表示愿意接收
  • 路径预留:沿途的交换机根据SRP信息,在转发表中预留带宽和队列资源

SRP支持两种预留模式:

模式说明适用场景
Stream Reservation Class A预留带宽,延迟<2ms音视频、控制指令
Stream Reservation Class B预留带宽,延迟<50ms普通数据流

我个人建议,在车载项目中尽量使用Class A。因为控制类流量的延迟要求非常苛刻,Class B的50ms在ADAS场景下根本不够用。

注意:SRP预留不是无限的。每个交换机的可用带宽是固定的,预留太多会导致后续流被拒绝。我曾经见过一个项目,同时预留了20路高清视频流,结果交换机直接报“资源不足”。解决方案是:提前做好带宽规划,预留20%的余量。

3.4 FQTSS队列调度:谁先走,谁后走

FQTSS(Forwarding and Queuing Enhancements for Time-Sensitive Streams)是IEEE 802.1Qav标准。它定义了8个优先级队列,以及基于信用的整形算法(CBS,Credit Based Shaper)。

为什么需要CBS?你想想看,如果只是简单优先级调度,高优先级流量可能会一直占着链路,低优先级流量永远发不出去。CBS通过“信用值”机制,保证了每个预留流都能获得其承诺的带宽。

CBS的工作原理:

  1. 每个AVB流有一个信用值(credit),初始为0
  2. 当队列中有数据要发送时,信用值开始增加(速率由idleSlope决定)
  3. 当信用值≥0时,允许发送数据;发送时信用值减少(速率由sendSlope决定)
  4. 信用值不能超过hiCredit,也不能低于loCredit

我举个例子。假设一个AVB流预留了100Mbps带宽,链路速率是1000Mbps。那么idleSlope=100Mbps,sendSlope=900Mbps。当这个流有数据时,信用值先增加到0以上,然后发送数据,信用值下降。这样既保证了带宽,又不会让其他流饿死。

关键参数

  • idleSlope:信用值增加速率,等于预留带宽
  • sendSlope:信用值减少速率,等于链路速率减去预留带宽
  • hiCredit:最大信用值,决定了突发数据量
  • loCredit:最小信用值,通常为0

在车载交换机配置中,我一般这样分配队列:

  • 队列7:最高优先级,用于PTP时间同步报文
  • 队列6-5:AVB Class A流(控制、传感器数据)
  • 队列4-3:AVB Class B流(音视频)
  • 队列2-0:尽力而为流(诊断、OTA升级等)

实战经验:我曾经调试过一个项目,发现Class A流的延迟偶尔会飙到5ms。查了半天,发现是某个交换机的CBS参数配置错了——idleSlope设成了链路速率的一半,导致信用值积累太慢。记住:idleSlope必须等于预留带宽,不能多也不能少。

3.5 三者如何协同工作

gPTP、SRP、FQTSS不是孤立的。它们在实际系统中是这样配合的:

  1. gPTP先跑起来:全网设备时间同步,精度达到亚微秒级
  2. SRP进行流预留:发送端宣告流特征,沿途交换机预留带宽和队列
  3. FQTSS执行调度:数据到达时,根据优先级和CBS算法,决定发送顺序

举个例子。摄像头要发送一路视频流到域控制器:

  • 摄像头先通过SRP宣告:我要发100Mbps,Class A,延迟<2ms
  • 沿途交换机检查资源,确认可以预留,回复Listener Ready
  • 摄像头开始发送数据,交换机根据FQTSS,将数据放入队列6(Class A)
  • CBS算法保证这路流获得100Mbps带宽,且延迟不超过2ms
  • gPTP确保摄像头和域控制器的时间戳一致,方便做延迟测量和同步

嗯,这里要注意:如果某个交换机不支持AVB/TSN,整个链路就无法保证确定性。所以车载网络中,从端到端的所有设备都必须支持这些协议。

重要提醒:AVB/TSN的配置非常依赖网络拓扑。我建议在项目初期就画好拓扑图,标注每个节点的角色(Grandmaster、Talker、Listener),以及每条链路的预留带宽。否则后期调试会非常痛苦。

好了,这一章的内容就到这里。AVB/TSN是车载以太网QoS的基石,理解了gPTP、SRP、FQTSS,你就掌握了80%的实战能力。下一章我们讲802.1Qbv时间感知整形,那是TSN里更高级的玩法。