4. TRDP通信模式与抓包策略
TRDP(Train Real-time Data Protocol)在列车网络中同时承载两类性质完全不同的数据:过程数据(Process Data,PD)和消息数据(Message Data,MD)。抓包分析时,如果对两者采用同一套过滤思路,往往会出现“PD报文刷屏、MD报文淹没在噪声里”的情况。本节先厘清两类数据的通信特征,再据此设计Wireshark过滤表达式和分模式抓包计划。
一、PD与MD的通信特征差异
PD是周期性、面向状态的数据。发布者按固定周期(常见如10ms、20ms、50ms、100ms)向组播地址推送数据集,订阅者被动接收,通信关系是“一对多”的发布/订阅。PD报文通常使用UDP,目的地址为组播IP(如239.x.x.x),端口由TRDP配置约定(常见如17224)。PD的核心特征是周期稳定、无请求响应、无重传,因此抓包时看到的是等间隔的报文流,序列号(Sequence Counter)单调递增,一旦丢包会直接体现为序列号跳变。
MD则是事件驱动、面向事务的数据。请求方主动向服务方发送请求,服务方回送响应,通信关系是“一对一”的请求/响应,通常使用UDP单播,也可基于TCP。MD报文带有会话标识(Session ID)、确认标志和重传机制,只有在业务事件发生时才产生流量。其核心特征是突发性、成对出现、有确认与重传,抓包时表现为“请求—响应”成对报文,间隔不规律。
二、抓包过滤表达式设计
过滤表达式的设计原则是“先按传输层粗筛,再按网络层精确定位,最后按TRDP字段细筛”。Wireshark对TRDP有内置解析器,显示过滤可直接使用 trdp 字段族。以下表达式均以示例参数说明,实际使用时替换为工程配置中的真实地址与端口。
PD抓包过滤。PD走组播,最有效的锁定方式是“组播地址 + 目的端口”。例如某工程PD组播地址为239.1.1.10、端口17224,则显示过滤为:
udp.dstport == 17224 && ip.dst == 239.1.1.10
若需同时观察多个PD数据集,可用 ip.dst in {239.1.1.10, 239.1.1.11}。抓包过滤(capture filter)则应尽量收窄,避免全量落盘:udp port 17224 and dst host 239.1.1.10。需要注意,组播报文在交换机上可能因IGMP snooping配置不当而只到达部分端口,抓包点选错会“看不到报文”,这属于抓包位置问题而非过滤问题。
MD抓包过滤。MD走单播,锁定方式是“通信双方地址对 + 端口”。例如请求方192.168.10.20、服务方192.168.10.21、端口17224,显示过滤为:
udp.port == 17224 && ip.addr == 192.168.10.21
若要区分请求与响应方向,可进一步用 ip.src == 192.168.10.20 && ip.dst == 192.168.10.21 看请求,反向看响应。若MD基于TCP,则把 udp.port 换成 tcp.port,并配合 tcp.stream eq N 跟踪单条会话。实践中建议先用 trdp 粗筛确认解析器已识别报文,再叠加地址条件,避免因端口配置与预期不符而误判“没有MD流量”。
三、分模式抓包计划
PD与MD的抓包计划应在抓包点、过滤策略、缓冲与落盘、观察指标四个维度上分别设计,而不是一套参数通吃。
抓包点方面:PD建议在订阅者接入的交换机镜像端口抓取,能同时看到组播是否到达;MD建议在请求方或服务方网口就近抓取,确保请求与响应双向可见。若只能单点抓包,MD优先选服务方侧,因为请求和响应都会经过该网口。
过滤与落盘方面:PD流量大且周期固定,长时间抓包容易产生巨量文件,建议用capture filter限定组播地址,并采用环形缓冲(如每文件100MB、保留10个文件)覆盖式记录;MD流量稀疏但事件关键,建议不加过窄的capture filter,改用显示过滤事后筛选,确保突发事务不被漏抓。
观察指标方面:PD重点看周期抖动、序列号连续性、数据集长度,用 trdp 字段配合IO图表观察到达间隔;MD重点看请求响应配对、响应时延、重传次数、Session ID一致性,可用 trdp.sessionId 过滤单次事务。下表给出一个可直接套用的抓包计划示例(参数为教学假设值):
| 维度 | PD 抓包计划 | MD 抓包计划 |
|---|---|---|
| 抓包点 | 订阅者侧交换机镜像口 | 服务方网口(双向可见) |
| capture filter | udp port 17224 and dst host 239.1.1.10 |
udp port 17224(不过窄) |
| 显示过滤 | ip.dst == 239.1.1.10 |
ip.addr == 192.168.10.21 |
| 落盘策略 | 环形缓冲,100MB×10 | 单文件,事件前后各留30s |
| 关键指标 | 周期抖动、Seq跳变、数据长度 | Req/Rsp配对、时延、重传 |
udp.port == 17224 同时抓PD和MD,结果PD周期报文把MD事务淹没。正确做法是先按组播/单播地址把两类流量分开,再分别分析;另外,若TRDP解析器显示为“Data”而非结构化字段,应检查端口是否被识别为TRDP,必要时用“解码为”手动指定。把通信模式与抓包策略对应起来,本质上是让过滤表达式“顺着协议的行为走”:PD顺着组播和周期走,MD顺着单播和事务走。抓包计划定得越贴合模式特征,后续的报文分析就越省力。