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字节。
三、EtherType分配与识别
EtherType是2字节字段,用来告诉接收端"数据区里装的是什么"。与TRDP分析相关的常见取值如下表。需要说明,TRDP直载以太网时使用的EtherType由具体实现与项目约定确定,分析时应以实际抓包和项目文档为准,不能想当然套用。
| EtherType | 含义 | 对TRDP分析的意义 |
|---|---|---|
| 0x0800 | IPv4 | TRDP经UDP承载,需继续解析IP/UDP |
| 0x86DD | IPv6 | IPv6承载场景 |
| 0x8100 | 802.1Q VLAN标签 | 标签存在,内层才是真正EtherType |
| 0x88A8 | 802.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定位"串成一条可视化的解析路径,可作为抓包时的对照参考。
五、一个可复用的核对流程
把上面的内容落成抓包时的固定动作,可以避免漏看关键字段。建议按以下顺序核对,并记录到分析笔记中:
- 用
udp.port == 17224过滤,确认目标报文是否被正确识别为TRDP;若显示为UDP但未解析出TRDP,检查端口是否被项目改过。 - 展开Ethernet II,记录目的MAC、源MAC、Type。若Type为0x8100,继续展开802.1Q,记录VLAN ID与PCP。
- 确认内层EtherType:0x0800则继续看IP层协议号是否为17;为TRDP专用值则数据区起点即TRDP头。
- 在UDP层记录源/目的端口,结合IP地址确定通信方向(源→目的),为后续分析ComID与方向性做准备。
- 用"帧偏移 = 14 + VLAN标签数×4 + IP头长 + UDP头长"估算TRDP头位置,与Wireshark解析结果对照,验证解析是否正确。
掌握帧结构与EtherType分支后,TRDP报文头在帧中的位置就确定了,后续对ComID、数据集长度、时标等字段的解析才有可靠的起点。抓包分析的本质是"先定位、再解析、后判断",而以太网帧结构正是这条链路的定位基准。