第三章 AVB协议族初探:gPTP时间同步、SRP流预留、FQTSS队列转发
好,咱们今天聊聊AVB协议族。说实话,AVB这个名字在车载圈里有点被神化了。很多人一听到AVB,就觉得是车载以太网的救世主。其实没那么玄乎,它就是一套帮你解决音视频实时传输问题的协议组合。
AVB协议族里最核心的三个东西:gPTP时间同步、SRP流预留、FQTSS队列转发。这三个家伙各司其职,缺一不可。我当年刚接触AVB时,总觉得它们三个是独立的,后来踩了坑才明白——它们是串在一起的链条。
3.1 gPTP:让所有节点用同一个时钟
先说说gPTP。它的全称是generalized Precision Time Protocol,说白了就是让网络里所有设备的时间对齐。你想想看,如果摄像头和域控的时间差了1毫秒,那音视频同步就是个笑话。
gPTP的核心机制是主从同步。网络里会选出一个"主时钟",其他设备都跟着它走。主时钟会定期发Sync报文,从设备收到后计算时间差,然后调整自己的本地时钟。
我给大家看个简化的同步流程:
主时钟 从时钟
| |
|--- Sync (t1) ------->| 记录t1
|--- Follow_Up (t1) -->| 获取精确t1
| | 记录t2(接收时间)
|<-- Delay_Req --------| 发送延迟请求,记录t3
|--- Delay_Resp (t4) -->| 获取t4
| | 计算:偏移 = (t2 - t1) - (t4 - t3) / 2
嗯,这里要注意。gPTP和普通PTP有个关键区别——它考虑了驻留时间。什么意思呢?报文在交换机里转发时会有延迟,gPTP会把这个延迟也算进去。我在项目中遇到过,如果不处理驻留时间,同步精度直接从纳秒级掉到微秒级,根本没法用。
关键点:gPTP的同步精度目标是±1μs以内。对于车载场景,这个精度足够支撑大部分音视频同步需求。
3.2 SRP:给数据流"预定座位"
时间同步搞定了,接下来要解决的是——怎么保证音视频数据不丢包?
SRP(Stream Reservation Protocol)就是干这个的。它有点像你坐飞机提前选座,SRP会在网络里为每个数据流预留带宽。说白了,就是告诉交换机:"嘿,这个流很重要,别把它挤丢了。"
SRP的工作流程分三步:
- Talker宣告:发送端广播自己的流信息,包括带宽需求、VLAN ID等
- Listener响应:接收端回复确认,表示愿意接收
- 交换机注册:沿途交换机记录流信息,预留带宽
我给大家看个实际配置的例子:
// Talker宣告示例
Stream ID: 00:1E:C0:01:02:03:0001
Destination MAC: 91:E0:F0:01:00:01
VLAN ID: 3
Max Frame Size: 1500 bytes
Max Interval Frames: 8000 frames/sec
Bandwidth: 96 Mbps
这里有个坑。我曾经在项目里发现,SRP预留的带宽不能超过总带宽的75%。为什么?因为还要留一些给普通数据流和协议报文。如果你把带宽全占了,其他设备连ARP都发不出去,那网络就瘫了。
避坑指南:我曾经遇到过SRP预留失败的情况,原因是交换机不支持多个流同时预留。后来查了芯片手册才发现,有些低端交换芯片的SRP表项只有16条。所以选型时一定要确认硬件支持的流数量。
3.3 FQTSS:让高优先级数据先走
时间有了,带宽也预留了,但还有个问题——数据在交换机里排队时,怎么保证音视频数据不被普通数据堵住?
FQTSS(Forwarding and Queuing for Time-Sensitive Streams)就是解决这个的。它定义了8个优先级队列,其中最高优先级给音视频流,最低的给背景流量。
FQTSS的核心是基于信用的整形算法(Credit-Based Shaper)。每个队列都有一个"信用值",只有信用值足够时才能发送数据。这样做的好处是:
- 高优先级队列的信用值恢复得快,所以能频繁发送
- 低优先级队列的信用值恢复得慢,防止它们抢占带宽
- 避免了传统优先级调度中的"饿死"现象
我给大家画个简化的信用值变化图:
信用值
^
| /发送/ /发送/
| / \ / \
| / \/ \
|/ /\ \
+----------------------------> 时间
0 | |
| | 信用值恢复
发送数据
你想想看,如果没有这个机制,低优先级的数据可能永远发不出去。FQTSS保证了每个队列都有机会,只是机会大小不同。
个人经验:我建议在配置FQTSS时,把音视频流放在队列7(最高优先级),控制信号放在队列6,诊断数据放在队列5,普通数据放在队列0-4。这样即使网络拥塞,关键数据也能优先通过。
3.4 三个协议如何协同工作
好了,三个协议都讲完了。但它们不是孤立的,实际工作中是这样配合的:
- gPTP先跑起来:所有设备时间同步,这是基础
- SRP开始预留:Talker宣告流,Listener响应,交换机记录
- FQTSS开始调度:数据流进入对应优先级队列,按信用值算法转发
我举个例子。假设你车上有4个摄像头,每个输出1080p 30fps的视频流。gPTP保证所有摄像头的时间戳一致,SRP为每个流预留约100Mbps带宽,FQTSS确保这些流在交换机里优先转发。这样,域控收到的视频就是同步的、不丢帧的。
说实话,AVB这套协议族设计得挺巧妙的。它没有重新发明轮子,而是在现有以太网基础上做了增强。但要注意,AVB不是万能的。它主要针对音视频场景,如果你要传输控制指令或安全关键数据,那得考虑TSN的其他协议。
嗯,今天就先聊到这儿。下一章咱们深入看看gPTP的时钟同步算法,包括主时钟选举和时钟校正的具体实现。到时候我会分享一个我在实车上调试gPTP时遇到的奇葩问题——时钟突然跳变,差点把整个系统搞崩了。