2、以太网基础回顾:标准以太网帧结构与VLAN标签
在深入TSN(时间敏感网络)的帧抢占、调度与时钟同步机制之前,必须先夯实标准以太网帧的底层认知。TSN并不是一种全新的二层协议,而是对标准以太网在确定性传输维度上的增强与扩展。无论是802.1Qbv的时间感知门控,还是802.1Qbu的帧抢占,其操作对象都是建立在标准以太网帧结构之上的。本节将系统拆解标准以太网帧的每一个字段,重点剖析VLAN标签(802.1Q Tag)中的优先级位(PCP)如何为后续TSN的流量分类与调度奠定基础。
上图展示了标准以太网帧与插入VLAN标签后的帧结构对比。左侧为传统DIX以太网帧(Ethernet II),右侧为IEEE 802.1Q定义的带标签帧。注意VLAN Tag插入在源MAC地址与Type/Length字段之间,这使得最大帧长从1518字节扩展到1522字节。对于TSN而言,VLAN Tag中的PCP字段(Priority Code Point)是交换机进行流量分类和队列映射的核心依据。
2.1 标准以太网帧各字段深度解析
核心原理:从物理层到数据链路层的封装
标准以太网帧(Ethernet II)由以下几个固定字段构成,每个字段都有其不可替代的工程意义:
- 前导码(Preamble,7字节):由56位交替的1和0组成(101010...),用于接收端的物理层时钟同步。它不包含在帧的最小/最大长度计算中,属于物理层附加字段。
- 帧起始定界符(SFD,1字节):固定为
10101011,最后两位的"11"用于标识帧数据的正式开始。接收端检测到SFD后,开始将后续数据送入MAC层处理。 - 目的MAC地址(6字节):标识接收方的物理地址。可以是单播(Unicast)、多播(Multicast)或广播(Broadcast,全F)。TSN中,某些控制协议(如802.1AS的PTP报文)使用特定的多播MAC地址。
- 源MAC地址(6字节):标识发送方的物理地址。交换机通过源MAC学习建立转发表。
- EtherType(2字节):标识上层协议类型。例如
0x0800表示IPv4,0x86DD表示IPv6,0x88F7表示PTP(精确时间协议),0x22F0表示TSN相关的流预留协议(SRP)。当该字段值小于等于1500时,它表示Payload长度(IEEE 802.3标准);大于1536时表示协议类型(Ethernet II)。 - Payload(46~1500字节):承载上层数据。最小46字节是为了保证帧长不小于64字节(含FCS),从而确保CSMA/CD冲突检测机制正常工作。TSN中,Payload承载实时控制数据或音视频流。
- 帧校验序列(FCS,4字节):使用CRC-32算法对整个帧(从目的MAC到Payload末尾)计算校验值。接收端重新计算并比对,不一致则丢弃该帧。
工程要点:在TSN网络中,前导码和SFD字段被赋予了新的作用——802.1Qbu帧抢占机制利用SFD之后的字段进行帧片段(Fragment)的拼接与重组。此外,TSN交换机需要精确识别帧的起始位置,以便在Qbv门控的精确时间点开启或关闭出口队列。
判断方法:如何区分EtherType与Length
在实际抓包分析中,可以通过以下规则快速判断一个帧是Ethernet II还是IEEE 802.3原始帧:
- 读取MAC地址后的2字节字段值。
- 若该值 大于等于0x0600(1536),则视为EtherType,按协议类型解析。
- 若该值 小于等于0x05DC(1500),则视为Length字段,表示后续Payload的字节数。
- 若该值在1501~1535之间,属于保留值,通常视为无效帧。
在Wireshark中,可以通过eth.type过滤字段快速查看。对于TSN应用,我们通常使用Ethernet II格式,因为其EtherType字段能直接标识上层TSN协议(如0x88F7用于PTP)。
案例拆解:一个典型的工业控制帧分析
假设某PLC发送一个PROFINET RT帧(基于以太网),抓包结果如下:
Destination: 01:0e:cf:00:00:00 (PROFINET Multicast)
Source: 00:1e:4b:3a:2f:11
Type: 0x8892 (PROFINET)
Payload: 100 bytes (包含循环数据、状态字等)
FCS: 0x3a9c7d21 (CRC32)
分析过程:目的MAC为PROFINET约定的多播地址,源MAC为PLC网卡地址,EtherType 0x8892直接标识上层为PROFINET协议。该帧总长度为6+6+2+100+4=118字节,符合最小帧长要求。在TSN网络中,该帧会被打上VLAN标签,并设置PCP=6(高优先级),以确保其在Qbv门控中优先传输。
常见误区与总结
误区1:认为前导码和SFD属于MAC帧的一部分。实际上,它们由物理层(PHY)生成和移除,MAC层看不到这些字段。在计算帧速率或带宽利用率时,应包含前导码(8字节)和帧间隙(IFG,12字节),否则会低估实际总线占用。
误区2:忽略最小帧长限制。在TSN的帧抢占机制中,被切分的帧片段(Fragment)必须满足最小64字节的限制(不含前导码),否则接收端无法正确校验。因此,mPacket(最小可抢占单元)的设计需要特别关注。
| 字段 | 长度 | 作用 | TSN相关点 |
|---|---|---|---|
| 前导码 | 7B | 时钟同步 | 帧抢占时用于对齐 |
| SFD | 1B | 帧起始定界 | 抢占片段识别 |
| 目的MAC | 6B | 寻址 | 多播地址用于PTP |
| 源MAC | 6B | 源标识 | 交换机学习 |
| EtherType | 2B | 协议标识 | 0x88F7 PTP |
| Payload | 46~1500B | 数据承载 | 实时数据 |
| FCS | 4B | CRC校验 | 抢占重组校验 |
2.2 VLAN标签(802.1Q Tag)与优先级机制
核心原理:VLAN Tag的插入与识别
IEEE 802.1Q标准定义了在标准以太网帧的源MAC地址和EtherType字段之间插入一个4字节的VLAN Tag。该Tag由以下四个子字段组成:
- TPID(Tag Protocol Identifier,2字节):固定为
0x8100,用于标识这是一个携带VLAN标签的帧。交换机通过识别该值来判断帧是否带Tag。 - PCP(Priority Code Point,3位):表示帧的优先级,取值范围0~7。数值越大优先级越高。在TSN中,PCP值直接映射到交换机出口的队列编号(通常8个队列对应8个PCP值)。
- DEI(Drop Eligible Indicator,1位):表示在拥塞时是否允许丢弃。DEI=1表示该帧在拥塞时可被丢弃,DEI=0表示尽力保留。TSN中,对于关键控制帧通常设置DEI=0。
- VID(VLAN Identifier,12位):标识所属VLAN,取值范围0~4095。其中VID=0表示空VLAN(仅用于优先级),VID=4095保留,实际可用VID为1~4094。
在TSN网络中,VLAN Tag不仅是虚拟局域网隔离的手段,更是流量优先级映射的核心载体。IEEE 802.1Q-2018附录G推荐了PCP到流量类型的映射关系:
| PCP值 | 流量类型 | 典型应用 | TSN队列 |
|---|---|---|---|
| 7 | NC(Network Control) | PTP、SRP、LLDP | 队列7(最高优先级) |
| 6 | Interrupt | 工业实时控制(PROFINET IRT) | 队列6 |
| 5 | Critical App | 音视频桥接(AVB)Class A | 队列5 |
| 4 | Excellent Effort | AVB Class B | 队列4 |
| 3 | BE(Best Effort) | 普通数据 | 队列3 |
| 2 | Background | 批量传输 | 队列2 |
| 1 | Background | 低优先级 | 队列1 |
| 0 | BE | 默认优先级 | 队列0(最低) |
操作流程:如何配置VLAN优先级
在实际的TSN交换机或端站中,配置VLAN优先级的流程如下:
- 确定流量类型:识别应用是实时控制(PCP=6)、音视频(PCP=5/4)还是普通数据(PCP=0/3)。
- 配置端站网卡:在发送端为每个应用指定VLAN ID和PCP值。Linux下可使用
ip link set eth0 vlan id 100 priority 6命令。 - 配置交换机队列映射:在交换机上将PCP值映射到对应的出口队列。例如,将PCP=6映射到队列6,并配置Qbv门控为该队列分配专用时间片。
- 验证抓包:使用Wireshark抓取报文,确认VLAN Tag中的PCP字段正确设置。
经验提醒:在TSN网络中,PCP值必须与Qbv门控的队列配置严格对应。如果PCP=6的帧被映射到队列3,而门控只为队列6分配了时间片,则该帧将无法在预期时间窗口内发送,导致实时性失效。
案例拆解:AVB音视频流的VLAN优先级配置
某车载娱乐系统需要传输摄像头视频流(Class A,延迟≤2ms)和音频流(Class B,延迟≤50ms)。配置如下:
视频流:VLAN ID=100, PCP=5 (Class A)
音频流:VLAN ID=200, PCP=4 (Class B)
控制流:VLAN ID=300, PCP=7 (PTP时间同步)
交换机配置:将PCP=5映射到队列5,PCP=4映射到队列4,PCP=7映射到队列7。Qbv门控为队列5分配每周期200μs的传输窗口,为队列4分配500μs,队列7分配50μs。通过这种配置,视频流获得优先传输,音频流次之,PTP控制流始终优先。
实测结果:视频流端到端延迟稳定在1.8ms,音频流延迟约30ms,满足设计要求。若未配置VLAN优先级,所有流量进入同一队列,视频流延迟将超过5ms,出现卡顿。
常见误区与总结
误区1:认为VLAN Tag只用于隔离,不用于优先级。实际上,即使只有一个VLAN,也必须携带Tag才能传递PCP优先级信息。在TSN中,所有实时流量都应携带VLAN Tag。
误区2:忽略DEI位的作用。在拥塞场景下,DEI=1的帧会被优先丢弃。对于关键控制帧,应设置DEI=0,确保其在拥塞时不被丢弃。
误区3:混淆PCP与DSCP。PCP是二层优先级,DSCP是三层的。TSN交换机通常只识别PCP,因此即使IP包设置了高DSCP,若PCP未正确设置,也无法获得高优先级处理。