2. TRDP报文封装与以太网帧结构分析

TRDP(Train Real-time Data Protocol)本身是应用层协议,它并不定义自己的链路层封装,而是直接承载在标准以太网之上。要读懂一份TRDP抓包,第一步不是急着看应用层负载,而是先把承载它的以太网帧"拆开"——看清帧头、VLAN标签、EtherType,再定位到TRDP报文起点。本节围绕以太网II帧格式、VLAN标签处理、EtherType分配三个关键点展开,并给出用Wireshark过滤与识别帧头字段的具体做法。

一、TRDP over Ethernet II 帧格式

TRDP报文在链路上以Ethernet II帧传输。一个完整的帧从前往后依次是:前导码与帧起始定界符(物理层,抓包工具通常不显示)、6字节目的MAC、6字节源MAC、2字节EtherType(或802.1Q标签)、46~1500字节数据区、4字节FCS。TRDP报文整体位于数据区,其起始位置由EtherType及是否存在VLAN标签共同决定。

需要特别注意的是,TRDP的UDP/IP封装方式决定了数据区内部还有一层结构。TRDP支持两种承载:一种是直接封装在UDP之上(常见端口17224),另一种是直接封装在以太网数据区(无IP/UDP头,用于对时延极敏感的周期数据)。抓包时若看到EtherType为0x0800,说明是IPv4承载,需要继续向下解析UDP再找TRDP;若EtherType为TRDP专用值,则数据区开头就是TRDP报文头。这个区别直接决定了Wireshark的解析路径,也是初学者最容易混淆的地方。

二、VLAN标签的处理

列车网络普遍使用VLAN划分业务,TRDP流量常带802.1Q标签。标签插入在源MAC之后、原EtherType之前,占4字节:2字节TPID(固定0x8100)、2字节TCI(含3位优先级PCP、1位DEI、12位VLAN ID)。带标签时,帧结构变为:目的MAC | 源MAC | 0x8100 | TCI | 内层EtherType | 数据 | FCS。

这对抓包分析有两个实际影响。其一,EtherType的位置后移了4字节,若手工按固定偏移解析会错位;Wireshark会自动识别802.1Q并正确剥离,在协议树中显示"802.1Q Virtual LAN",展开可看到Priority与VLAN ID。其二,若链路上存在QinQ(双层标签,外层TPID 0x88A8),则会有两个标签,EtherType再后移4字节。判断方法很简单:在Wireshark中看Ethernet II层下方是否出现一层或两层802.1Q,出现几层就后移几个4字节。

抓包前先确认交换机端口模式:Access口发出的帧不带标签,Trunk口带标签。同一段TRDP业务在两端抓包,VLAN标签的有无可能不同,比较报文时要先对齐这一点,否则会误判为报文不一致。

三、EtherType分配与识别

EtherType是2字节字段,用来告诉接收端"数据区里装的是什么"。与TRDP分析相关的常见取值如下表。需要说明,TRDP直载以太网时使用的EtherType由具体实现与项目约定确定,分析时应以实际抓包和项目文档为准,不能想当然套用。

EtherType含义对TRDP分析的意义
0x0800IPv4TRDP经UDP承载,需继续解析IP/UDP
0x86DDIPv6IPv6承载场景
0x8100802.1Q VLAN标签标签存在,内层才是真正EtherType
0x88A8802.1ad外层标签QinQ双层标签场景
项目约定值TRDP直载以太网数据区起始即TRDP报文头

四、用Wireshark过滤并识别帧头关键字段

实际分析时,先缩小范围再逐层展开。常用过滤表达式如下,建议按顺序使用:

# 只看TRDP常用UDP端口
udp.port == 17224

# 只看某个VLAN内的TRDP
vlan.id == 100 && udp.port == 17224

# 只看某对通信端点之间的TRDP
ip.addr == 192.168.10.21 && ip.addr == 192.168.10.31 && udp.port == 17224

# 排除ARP等干扰,聚焦以太网承载的TRDP
eth.type == 0x0800 && udp.port == 17224

过滤出目标报文后,在报文详情面板自上而下核对:Ethernet II层看目的/源MAC与Type;若有802.1Q层,记录VLAN ID与PCP;IP层确认源/目的地址与协议号17(UDP);UDP层确认源/目的端口;再往下才是TRDP报文头。把这几层的偏移量串起来,就能算出TRDP报文头在帧中的绝对位置,这对编写解析脚本或核对抓包工具解析是否正确非常有用。

下面这张图把"帧结构—VLAN插入—EtherType分支—Wireshark定位"串成一条可视化的解析路径,可作为抓包时的对照参考。

TRDP over Ethernet II 帧结构与解析路径 ① 无VLAN标签的帧结构 目的MAC6字节 源MAC6字节 EtherType2字节 数据区(IP/UDP 或 直载TRDP)46~1500字节 FCS4字节 ② 插入802.1Q标签后(EtherType后移4字节) 目的MAC6字节 源MAC6字节 TPID 0x81002字节 TCIPCP/DEI/VID 内层EtherType2字节 数据区TRDP报文 ③ 按EtherType选择解析分支 读取EtherType 0x0800 → IPv4 → UDP TRDP专用值 → 直载 定位TRDP报文头起点 ④ Wireshark 逐层核对 Ethernet II 802.1Q(可选) IPv4 UDP TRDP 报文头

五、一个可复用的核对流程

把上面的内容落成抓包时的固定动作,可以避免漏看关键字段。建议按以下顺序核对,并记录到分析笔记中:

  1. 用 udp.port == 17224 过滤,确认目标报文是否被正确识别为TRDP;若显示为UDP但未解析出TRDP,检查端口是否被项目改过。
  2. 展开Ethernet II,记录目的MAC、源MAC、Type。若Type为0x8100,继续展开802.1Q,记录VLAN ID与PCP。
  3. 确认内层EtherType:0x0800则继续看IP层协议号是否为17;为TRDP专用值则数据区起点即TRDP头。
  4. 在UDP层记录源/目的端口,结合IP地址确定通信方向(源→目的),为后续分析ComID与方向性做准备。
  5. 用"帧偏移 = 14 + VLAN标签数×4 + IP头长 + UDP头长"估算TRDP头位置,与Wireshark解析结果对照,验证解析是否正确。
常见误区:把VLAN标签当成数据的一部分去解析,导致TRDP头偏移算错4字节;或在Access口抓包看到无标签,就认为对端Trunk口也无标签。分析前先确认抓包点的端口模式,是排除这类问题的前提。

掌握帧结构与EtherType分支后,TRDP报文头在帧中的位置就确定了,后续对ComID、数据集长度、时标等字段的解析才有可靠的起点。抓包分析的本质是"先定位、再解析、后判断",而以太网帧结构正是这条链路的定位基准。