彭博文,陈 昕,施 林
(湖南中车时代通信信号有限公司,北京 100070)
用于网络数据包分析的工具中,Wireshark 由于开源,便于用户二次开发,对于当下的主流协议Wireshark 都有自带解析插件,如 IP、ARP、TCP、UDP、HTTP、DHCP 等大受欢迎。但在实际应用中,这些协议通常只是传输数据过程的载体,有不少软件之间的通信协议都是私有的,如车载设备(VOBC)和区域控制器(ZC)之间的交互协议,Wireshark 无法具体解析出各种字段之间的含义,只能显示接收的二进制数据,给协议的分析和问题的排查带来了一定的困难,尤其是协议内容比较复杂时。
轨道交通CBTC 系统互联互通主要指两种方式的运营,分别为共线和跨线。共线指同一条线路上装备不同信号厂商的车载设备列车可以在装备不同信号厂家轨旁设备正常运营;跨线指不同信号厂商的车载设备可以无缝切换到另外一条线路正常行驶。一般来说,实现跨线前需以实现共线为前提。它们对于实现轨道交通网络化运营,降低轨道交通线网建设成本和提高运营的资源利用率有巨大的促进和影响。
互联互通车地通信协议是以统一的数据格式的方式用于ZC 和VOBC 之间数据通信,协议约定了使用的安全通信协议和应用协议,可粗略的分为两大部分:
车载设备与区域控制器之间可采用RSSP-II 或RSSP-I 安全通信协议通信。RSSP-II 安全通信协议的具体要求参见运基信号【2010】267 号文件《RSSP-II 铁路信号安全通信协议》;RSSP-I 安全通信协议的具体要求参见运基信号【2010】267 号文件《RSSP-I 铁路信号安全通信协议》。
1.2.1 通用信息包格式
互联互通车地连续通信规范的通用包中约定了车地双方通信的接口信息类型、发送方标识信息、接收方标识信息、数据版本校验信息、本方消息序列号、通信周期、对方消息序列号、收到上一条消息时本方序列号、协议版本号和应用层数据长度,用于对车地双方通信信息做进一步的校验。
1.2.2 应用层信息包格式
互联互通车地连续通信规范的应用层信息包括报文长度、报文类型、预留字段、报文内容。根据信息包发送方向可分为二类,VOBC 至ZC 共4 种信息包,分别为列车位置信息包、应用层注册/注销请求、VOBC 城市自定义帧、VOBC 厂商自定义帧;ZC 至VOBC 共6 种信息包,分别为列车控制信息、应用层注册/注销响应、ZC 主动注销请求、特殊控制报文、ZC 城市自定义帧、ZC 厂商自定义帧。不同类型数据包可同时存在在一个数据包当中,并且对于发起方VOBC 发送某种特定类型的数据包,应答方ZC 需响应符合要求的对应的数据包。
(1)列车位置信息包。列车位置信息包主要用于车载设备自身在线路上定位成功后,完成与之对应的区域控制器注册成功后,周期性向区域控制器发送信息,其包含运行方向、激活端、列车包络线(列车最大安全前端、列车最小安全前端、列车最大安全后端、列车最小安全后端)、列车运行控制级别、列车驾驶模式、车辆状态(停车保证、折返状态、列车完整性、无人折返灯、紧急制动状态)、列车速度/距离信息(列车速度、速度方向、退行距离、停准停稳信息、保护区段允许解锁)、受控ZC 编号。
(2)应用层注册/注销请求。应用层注册/注销请求包主要用车载设备通过应答器获取初始定位位置后,逻辑判断需要与ZC 开始注册或者需要断开通信链接时发送,其包含注册/注销请求标识、注销原因、预留。
(3)VOBC 城市自定义帧。VOBC 城市自定义信息包用于实现各城市特有的互联互通相关,具体内容在工程中根据实际需求约定,各厂商均应适配实现相应功能。
(4)VOBC 厂商自定义帧。VOBC 厂商自定义信息包用于实现各厂商特有功能,由各厂商分别定制。VOBC 判断通信的ZC 与自身属于同一厂商时,方可发送厂商自定义帧。
(5)列车控制信息。列车控制信息包主要用ZC 判断满足发送条件后,向列车周期性发送,其包含下一个ZC 的编号、MA 信息(MA 信息长度、MA 方向、停车保证、MA 起点、安全防护点位置、障碍点位置、保护区段有效性)、路径信息(包含的道岔编号及位置)、屏蔽门状态、紧急停车按钮状态、无人折返按钮状态、临时限速信息(临时限速数量、临时限速范围、临时限速限速值)、ZC-ZC 通信延迟、紧急制动命令、运行目的地属性信息、信号机状态。
(6)应用层注册/注销响应。应用层注册/注销响应包是ZC 对于车载设备发送的注册/注销请求包的响应数据包,其包含注册/注销响应标识,注册失败原因、预留。
(7)ZC 主动注销请求。ZC 主动注销请求包是ZC 在某种特定的场景下,判断注销条件成立后,向VOBC 发送,其包含注销命令、注销原因、预留。
(8)特殊控制报文。特殊控制报文是主要用于ZC 判断在不满足发送列车控制信息报文,但需要维持通信链路时或者判断需要列车紧急制动时发送,其包含紧急制动命令和特殊控制原因。
(9)ZC 城市自定义帧。ZC 城市自定义包用于实现各城市特有的互联互通相关功能。具体内容在工程中根据实际需求约定,各厂商均应实现相应功能。
(10)ZC 厂商自定义帧。ZC 厂商自定义包用于实现各厂商特有功能,各厂商分别定制。ZC 判断通信的VOBC 与自身属于同一厂商时,方可发送厂商自定义帧。
1.2.3 应用层信息包共存性
不管VOBC 发送给ZC 的数据包,还是ZC 发送给VOBC 的数据包,在不同场景下其信息包组合均有相应的规则,如表1 所示:
表1 VOBC→ZC 各信息包共存表
Wireshark 软件作为实验室和工程调试过程中广泛使用传输数据的抓取和分析软件。Wireshark 软件本身拥有强大的过滤器引擎,同时支持抓取 UDP、TCP、IP、FTP、ICMP、HTTP 等协议数据包,也支持使用Lua 脚本语言进行二次开发,非常方便与灵活,可用于互联互通车地应用协议。
互联互通车地协议解析的实现:
互联互通车地协议数据解析脚本由vobcToZc.lua 文件组成,用于互联互通车地应用协议的解析,本文以车地通信采用TCP 方式的RSSP-II 安全协议举例。
编写vobcToZc.lua 的解析器脚本,分为三个过程,创建解析器对象、解析器函数、注册至解析表中,其具体内容如下:
表2 ZC→VOBC 各信息包共存表
(1)创建解析器字段。创建解析器需要解析的字段,其具体实现如图1 所示:
图1 解析器字段
(2)解析器函数。解析器函数需要将数据包当获取中的指定的具体位置字段取值后赋值,其具体实现如图2 所示:
图2 解析器函数
(3)注册至解析表。解析器函数实现后,需要将解析器注册到Wireshark 的解析表当中,具体实现如图3 所示:
图3 注册解析器
Lua 语言为弱语言,无需编译,可直接使用。直接将该脚本文件vobcToZc.lua 放在Wireshark 安装目录中,若安装路径在C 盘,则将脚本放入路径C:Program Files(x86)Wiresharkplugins版本号,即可。
用Wireshark 打开之前的抓包数据,加载脚本插件后可以看出原来的传输数据已经被解析成自定义协议VOBCTOZC,如图 4 所示。
打开树状图,发现定义的解析字段已经赋上对应的值,如图5 所示。
图4 UI 信息显示
图5 树状信息显示
目前已用于无锡4 号线室内系统调试的通用辅助工具,据使用人员反映测试过程使用,该脚本提供了较为直观、快捷的解析数据方式,同时希望扩展和补充互联互通区域控制器(ZC)通信协议脚本和互联互通联锁(CI)通信协议脚本等。相比原有抓包再通过解析软件进行解包分析的方式,基于Wireshark 下脚本语言插件的解析方式具有以下优点:
(1)实现性。在Wireshark 实时抓包时,通过脚本语言插件的解析方式就可以直接看到相关对应字段的取值。
(2)便捷性。分析问题时候,可以直接设置过滤条件,找到对应的数据包,如查找某一具体周期的数据、字段取值为特定值的数据包等。
本文利用Wireshark 软件易于二次开发的特性,采用Lua 脚本语言进行解析脚本的编写,将互联互通车地通信应用协议关键字段进行解析,从而能够通过Wireshark 软件可以直观地显示传输数据的内容、筛选符合特定条件的数据包。
已在无锡4 号线室内测试中逐步使用。本文构建的协议数据分析插件为调试、故障排查、测试带来的便利,减少将数据拷贝到特定解析软件解析的过程,提高了调试效率。随着新基建、城市轨道交通行业的发展,本文构建的协议数据分析模式及其实现方式将会在自身及互通厂商室内软件调试、实际工程项目运用中有广阔的应用前景。