黄 坤,郭书明
(中国卫星海上测控部 江苏 江阴 214431)
雷达数据处理终端是建立在获取以太网数据的基础上的。终端各节点计算机通过以太网获取实时数据,并对实时数据进行处理检验,并最终将雷达状态信息和目标信息显示出来,从而完成对雷达和目标状态实时监控。因此数据处理终端必须具有良好实时性、可靠性。TCP协议在传输层是提供可靠连接的服务,其每次通信都是建立连接-传输数据-撤销连接的过程,每次数据通信都要通过大量的校验,占用大量的系统资源,容易造成网络中的数据阻塞,不利于实时数据的传输。而基于UDP协议的IP多播(Multicast)技术能很好地解决该问题[1-3]。
网络点对多点通信可采用多个基于TCP协议的单播以及基于 UDP 协议的 IP 广播(Broadcast)和 IP 多播(Multicast)[4]。采用多个基于TCP协议的单播方式构建网络,需在每个节点计算机上建立不同的进程处理与其他节点计算机的数据连接,可以确保实时数据在网络中的可靠传输,但是大量进程将给系统造成沉重的负担,不利于大量数据的实时传播。IP广播技术的缺点是网内所有主机无论是否需要都要接收广播数据报,给网络通信和主机带来额外的负担[5]。IP多播可以有多点对多点或是点对多点两种通信模式,其优点是能保证每条通信链路都是相互独立,网内的主机可以自由选择加入某个多播组接收该组的多播数据。IP多播可以大幅度减少网络流量,能更加有效的利用网络带宽,减少网络数据通信阻塞的情况。
IP多播通信由多个通信节点组成,每个通信节点包含有控制层面和数据层面的特征。控制层面定义了通信节点的组成方式,而数据层面定义了数据在节点间是如何传输的。笔者介绍的IP多播采用的是无根层面的IP多播技术,即IP多播的控制层面和数据层面均是无根的[6],网内的每台计算机可以选择性的加入不同的多播组,多播组内每台主机均可接收组内其他节点主机的数据。IP多播的控制层面如图1所示。
图1 IP多播的无根控制层面Fig.1 Rootless control of IP multicast
IP多播应用可以分为:点对多点通信、多点对点通信及多点对多点通信。点对多点通信是指在一个多播组中仅存在一个多播源对组内多个接收端发送信息,是一种比较常见的组播应用形式;多点对点通信是指多播组内存在多个多播源仅对应一个接收端的通信应用模式,通常是双向请求响应应用;多点对多点通信是指多播组内存在多个多播源及多个接收端的通信应用模式,每个接收端可以任意选择多播源,网络拓扑结构灵活,可扩展性强,本文中介绍的雷达终端实时数据处理采用的是多点对多点的IP多播技术。
在VC++6.0的中IP多播是通过SOCKET(套接字)实现的,它是一种进程的通讯机制。SOCKET向应用程序提供了统一的网络通信编程借口,屏蔽了下层通信协议和物理介质的细节,降低了开发难度。VC++6.0中SOCKET函数声明为SOCKET socket ( int af,int type,int protocol),af为协议通信域,type为套接字的类型,protocol为具体的协议。IP多播SOCKET的实现与初始化程序流程为:
1)创建SOCKET,其中af设为 AF_INET地址家族,IP多播只支持数据报类型和UDP协议,即type=SOCK_DGRAM,protocol=IPPROTO_UDP。
2)将SOCKET绑定在本地的一个SOCKADDR_IN格式的IP地址上,SOCKADDR_IN格式的结构为:
3)使用 bind()函数进行绑定,其 int bind(SOCKET s,const struct sockaddr FAR*name,int namelen),可以通过设置sockaddr_in结构地址来设置套接字需要使用的IP地址和端口号,一般来说,5000以上的端口号不为系统所使用,可以使用。
4)调用setsockopt()函数设置选择要加入的多播组地址,其函数原型为 int setsockopt(SOCKET s,int level,int optname, const char FAR*optval, int optlen),level需设置为IPPROTO_IP,optname 设 置 为 IP_ADD_MEMBERSHIP,optval为多播组地址结构,该地址结构为:
multiaddr为需要加入组播地址,ip_interface可以设置为本机的IP地址以便于接收端分辨组播源地址,若无此需要可以设置为INADDR_ANY。
网络组播SOCKET创建及初始化完毕后,若是接收端使用的SOCKET,还需创建网络接收通信事件,以便在接收端口上有数据包出现时驱动主程序启动相关的线程进行相应的数据处理。网络事件的创建可以采用WSACreateEvent()函数实现,并通过 WSAEventSelect()函数与套接字绑定,使用recvfrom()函数接收网络数据。
发送端的SOCKET程序流程类似,只是将SOCKET绑定在本地IP地址上,发送时调用sendto()函数设定接收节点的多播组地址和端口号。
雷达内部各节点计算机通过IP多播在内部网络中进行数据交换,同时各节点计算机构成的雷达多播组也通过IP多播与其他多播组进行数据交换,采用无源的组播分配方式,可以根据需要自行设置多播组的个数,各节点计算机可以自由加入多个多播组,其网络结构如图2所示。
图2 IP多播网络结构图Fig.2 Framework of IP multicast
由于IP多播是基于UDP协议,在设计上需要考虑倒数据传输的冗余量设计。在雷达内网的数据交换中,雷达各节点计算机响应不同时序的中断定时信号上网发送数据包,其流程如下:
1)将中断信号与事件(Event)绑定 中断信号采用硬件驱动,通过DeviceIoControl()函数将硬件中断与程序自定义事件绑定。
2)分支线程(Thread)的创建 雷达终端的各节点计算机主程序中需包含多个不同的分支线程来完成网络数据接收、发送等功能。线程的由CreateThread()函数创建,创建相应的分支线程后,可以设置相应线程的状态,可以设置为挂起或是启动状态,通过SetThreadPriority()函数可以设置线程的优先级。
当中断来临时,与之相应的事件将被至于有信号状态,随之触发程序中相应的线程完成相关数据处理显示工作,如网络数据的收发、雷达数据的实时显示都是通过中断-事件-线程的流程进行,中断时序如图3所示。
各节点计算机数据包大小可以根据需要统一设定,在确保系统冗余情况下又不影响网络资源占用。各节点计算机使用不同的端口号,并将各自的端口号映射到多播组上,各节点计算机向自属的端口发送数据的同时在多播组上接收其他端口上的数据。各分机之间的收发数据是相互独立,即使是某些节点计算机出现故障的情况下,并不会影响其他节点计算机之间数据交换。若采用基于TCP的单播技术,某一次数据交换出现异常时,数据接收端或发送端线程很容易出现死锁造成网络的瘫痪。雷达网络通信结构图如图4所示。
图3 定时信号时序关系图Fig.3 Time sequence of interrupting signals
图4 雷达终端内网结构图Fig.4 Framework of radar terminal network
各节点计算机在创建一个SOCKET用于发送数据,同时针对每个端口都创建一个SOCKET用于接收数据。在初始化SOCKET完成之后,创建接收网络数据线程,调用WSAEventSelect()函数创建网络事件并将其与硬件中断绑定,在接收网络数据线程中调用WSAWaitForMultipleEvents()函数判断网络数据的源节点计算机,将不同节点计算机数据送至不同的缓冲区进行数据实时处理,确保数据正确率。
IP多播在实时网络通信具有以下优点:
1)编程简单,搭建网络灵活,在节点极端机中添加多播组,或在多播组中加入节点计算机都很方便,系统拓展升级潜力大;
2)网络中的通信进程相互独立,容错性强,个别节点计算机故障不会影响整个网络的数据交互;
3)有效利用带宽,较好的避免网络阻塞,数据正确率高。
综上所述,IP多播技术凭借其良好的实时性、容错性和可扩展性,完全满足雷达终端数据实时交互的要求。
[1]徐昌彪.IP组播及其核心技术探讨[J].重庆邮电学院学报,2001,13(3):38-41.
XU Chang-biao.Discussion about IP multicast and core technologies[J].Journal of Chongqing University of Posts and Telecommunications.2001,13(3):38-41.
[2]何代菊.IP组播技术在网络中的应用 [J].重庆文理学院学报,2006,5(5):32-36.
HE Dai-ju.IP multicast technology in network application[J].Journal of Chongqing University of Arts and Science:Nature Science Edition,2006,5(5):32-36.
[3]Xylomenos G,Polyzos G C.IP multicast group management for point-to-point local distribution[S].Computer Communications,1998(2):1645-1654.
[4]陈坚,陈伟.Visual C++网络高级编程[M].北京:人民邮电出版社,2001.
[5]孙东.IP多播技术在实时测控软件中的应用 [J].计算机工程与科学,2004,26(3):21-24.
SUN Dong.Application of the IP multucast technology[J].Computer Engineering and Science,2004,26(3):21-24.
[6]韦冒超.IP多播技术的无根多播实现 [J].航空计算技术,2006,36(1):128-131.
WEI Mao-chao.Achievement about no root multicast of IP multicasting[J].Aeronautical Computing Technique,2006,36(1):128-131.