1. 问题描述
根据乌鲁木齐区域管制中心与兰州区域管制中心移交协调的现状和实施AIDC的需求,双方计划相互引接对方部分区域ADS-B信号,以加强管制区边界附近的ADS-B覆盖,并实现基于ADS-B信号的AIDC管制移交。
乌鲁木齐区域管制中心已完成单播引接的相关测试并顺利接入自动化系统提供管制使用,但是受限于北京ADS-B一级数据处理中心系统配置及传输链路,只能提供2路单播的接入信号,而乌鲁木齐现场ADS-B二级数据处理中心运行平台及验证平台等相关设备共需12路不同目的地址的单播信号,以满足网络安全和信号冗余要求。
因信号安全冗余不足,信号引接服务器无法随时切换。此危险源已列入《ADS-B信号引接安全评估报告》。乌鲁木齐区域管制中心根据上述风险源,制定了相应的风险管控措施,编写信息转发程序将接收到的北京一级数据中心(NDPC)单播ADS-B信息进行组播转发,并接入所需的多种信息处理系统。
区管中心数据转发项目小组使用NAT转发和程序转发两种不同的方法探讨了方案的可行性,并选择程序转发方式编写程序实现了组播转换的既定目标。目前该方案已应用于生产平台,软件运行稳定,未发生软件异常和数据中断现象,运行效果良好。
2. 方案介绍
2.1. 方案选择
该项目的核心需求是解决ADS-B信息的UDP数据包转发问题。基本原则是以现有的成熟的网络技术功能剥离源数据包UDP/IP信息,根据发送地址,发送端口,目的地址,目的端口等信息需求重新进行封装,并以组播的形式通过指定网卡投递给二级数据中心及其验证平台等下游设备。
根据上述需求分析,有两种方案可供选择:第一种为系统数据包服务的转发功能。需要架设NAT服务器,对数据包网络地址进行转换;第二种为通过C语言编写程序调用Linux系统的网络套接字(Socket)接口,对数据包重新封装。
2.1.1. NAT服务转发
NAT的全名是Network Address Translation,即网络地址的转换 [1]。一个数据包在进行NAT服务器转发时需要经过三个步骤:
A. 经过NAT Table的PREROUTING链;
B. 经由系统路由判断是否进入本机,若不进入本机,则进入Filter Table的FORWARD链;
C. 经过NAT table的POSTROUTING链,最后转发出去。
在这个过程中,如果在A阶段修改了数据报文的目标地址,叫做DNAT (Destination NAT);如果在C阶段修改了数据报文的源地址,叫做SNAT (Source NAT) [2]。
如图1所示,NAT服务器监听网卡指定端口(网卡一),若收到北京一级数据中心发来的UDP数据包,先通过DNAT替换数据包中目的地址,再通过SNAT将源地址替换为本地ADS-B站点网段指定地址,经由指定端口(网卡二)发出。至此,由北京数据中心发出的数据包便伪装成为了本地站点的发送数据。
项目实施阶段实现了单播数据的地址转换功能,但在进行组播转换时无法实现,查阅Linux相关文献 [3]:
Do multicast routing. The kernel needs to be compiled with CONFIG_MROUTE and a multicast routing daemon is required. conf/all/mc_forwarding must also be set to TRUE to enable multicast routing for the interface
Nb: per interface setting (where “interface” is the name of your network interface); “all” is a special interface: changes the settings for all interfaces.
在实现组播的转发功能时,需要打开mc_forwarding配置,但打开该配置时需重新编译内核。而在对内核进行编译后,有可能导致系统运行不稳定,通过NAT转换的方式不适用于组播运行环境。因此,该方案可实现单播的运行环境,若需要进行组播转发,需采用第二种方案。
2.1.2. Socket编程转发
套接字(Socket)是网络主机上的应用进程之间,进行双向通信的端点。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制 [4]。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 [5]。
该方案实际是利用C语言编写应用程序,建立网络套接字sockfdRecv,用以监听转发系统指定端口。若收到北京数据中心发往指定目标地址和端口的ADS-B数据包,剥离包头信息,取得UDP包内封装信息。将该信息封装进新的UDP包。封装期间设置组播地址为目标地址,设置特定端口地址用以区分不同信息源,并通过绑定的本机网络套接字sockfdSend发送到网络中去。
2.2. 信号流程
软件启动后首先进行初始化,通过主函数传递接收地址,组播地址,发送地址等参数。
初始化结构体addrRecv, addrSend, addrMulticast分别表示程序监听地址及端口,发送地址及端口,组播地址及端口。
初始化套接字sockfdRecv,用以监听转发系统指定端口。注意需将文本的主机地址转换为二进制网络字节序的IP地址,即地址的大小端转换。此外,还需将套接字绑定到本机指定端口上。
初始化套接字sockfdSend,用以发送重新封装的数据。注意绑定指定的组播地址和端口,以及发送地址和端口。
循环接收数据包,剥离原始包头,重新封装并经由指定端口发送至网络。
循环期间通过C++异常处理机制确保接收到异常数据包后,只抛出异常,主程序不会立刻中断。
上述信号流程如图2所示:
2.3. 软件配置说明
转发软件采用开机自启方式执行,所需配置参数包括:
1) 单播目的地址:该地址为新疆ADS-B信号二级数据中心ADCD1服务器信号引接子网X网地址,也是北京一级数据中心发送单播ADS-B数据的目的地IP地址。这样配置可在紧急情况下,将信号直接接入ADCD1服务器信号引接子网。保证在转发服务器故障时,通过应急线路旁路转发服务器,二级数据中心的接入信号不中断。
2) 单播目的端口号:与单播目的地址类似,需与北京一级数据中心单播数据目的地端口和乌市二级数据中心接收数据端口保持一致,需事先在二级数据中心DBM主机中增加一级中心数据单播参数配置。
3) 发送数据网卡的IP地址:该地址为转发服务器发送组播数据的网卡地址,与二级数据中心信号引接子网X网保持同一网段即可。二级数据中心在处理相应的ADS-B数据时,对数据源地址要求不严格,但是对端口号的检测要求较严格,这也是识别不同信号源的唯一标识。
4) 目的组播地址:该地址为转发信息的组播目的地址,需事先在二级中心DBM主机中予以配置。
5) 目的组播端口号:与目的组播地址类似,该端口为转发信息的组播数据包目的端口,需事先在二级中心DBM主机中予以配置。
单播目的地址和端口号,保证软件收到北京一级数据中心发送的ADS-B单播数据;指定发送数据网卡的IP地址能够人工选择ADS-B组播数据输出网口,配置时注意转发服务器的信号流转方向,不要配错网卡;指定组播地址和端口号,最终实现向二级数据处理中心多个数据处理服务器发送相应的ADS-B数据。
3. 软件转发平台搭建
3.1. 测试环境安装
平台搭建采用两台工作站作为组播转发服务器,一台三层交换机作为引接网关交换机。组播转发服务器采用CentOS7作为底层操作系统,保证组播转发软件长时间运行的可靠性。转发软件将ADS-B信息的UDP单播数据包转换为组播数据接入ADS-B数据处理中心接入交换机。
3.2. 网络拓扑配置
交换机启用三层路由转发功能,作为民航通信大网的接入网关,将单播ADS-B数据转发至组播转发服务器。整个转发平台的网络拓扑图如图3所示。
预留民航通信大网至ADS-B数据处理中心接入交换机的冷备应急线路,保证在组播转发服务器故障时能够将UDP单播ADS-B数据直接接入ADS-B数据处理中心。
4. 方案效果
根据软件开发和模拟平台测试结果,该方案实现了ADS-B单播数据至组播数据的转发,满足了现场ADS-B二级数据处理中心运行平台及验证平台等设备的12路信号引接需求,也为后期引接需求的扩展提供了支持。自2021年底,该软件部署已在生产环境中进行部署,占用的系统资源较少,未发生程序异常退出或信号中断现象。
乌鲁木齐区域管制中心作为ADS-B一级数据处理中心数据引接的试点单位,数据转发平台的建设为其它地区空管局引接一级中心数据提供了有效经验。
该平台与转发数据的耦合关系较低,除了ADS-B单播信息的组播转发功能外,还可用于雷达、综合航迹、飞行计划等信息的分发,实现了业务内网与下游信息系统的网络隔离,提高了信息安全防护能力,为民航信息安全提供了保障。