许 涛, 金晓军
(上海船舶运输科学研究所 军品分 所 ,上海200135)
随着船舶自动化系统向信息集成化——船舶综合平台管理系统(Integrated Platfor m Management System,IPMS)方向发展,船舶推进监控系统作为IPMS的分系统,应满足全船异构系统间互连、互通、互操作的要求,并解决网络带宽占有率过高引起的网络延时、阻塞等问题。在基于IPMS的船舶推进监控系统中引入组播通信技术作为优化带宽的重要手段,可以节省网络带宽、提高数据传送效率,有效地解决主干网络堵塞等问题。
IPMS集成了推进监控、电站监控、损管监控、综合导航、综合舰桥和综合决策等分系统。各分系统分别构建各自的子网,与平台管理网络构成一体化信息网络平台,实现数据共享(见图1)。该系统采用工业以太网,双环形网络拓扑结构,为确保系统的可靠运行,配置了2台支持组播功能的工业以太网交换机,底层网络设备均配备支持组播功能的双冗余以太网卡。
图1 某型船综合平台管理系统网络结构图
船舶推进监控系统的网络通信包括内部数据交换和与IPMS其他分系统的数据通信,具有数据传输量大、单点发送多点接收等特点。通常采用单播通信方式时,某些数据链路上会产生大量重复的数据包,导致网络带宽占有率高、数据传输效率低、服务器负载大;采用广播通信方式时,任一网络设备发送的数据都将被传送到所有在网设备,不能保障信息安全性,还可能由于路由回环引起严重的广播风暴。
为了满足系统网络通信的要求,针对IPMS的网络传输数据量大、设备节点多、实时性要求高等特点,船舶推进监控系统采用组播通信方式传输数据。组播通信是指在网际协议(Inter net Pr otocol,IP)网络中将数据包以尽力传送的形式发送到网络中的某个确定节点子集,它在源主机和目标主机之间实现了单点对多点网络连接,并且只向有需求的目标主机发送其所需数据包,这样既能1次将数据传输给多个有需求的主机,又能保证不影响未入组主机的通信。此外,组播通信可以给处在不同子网中的目标主机发送同一数据包。
1)源主机和目标主机的网络接口卡以及其间所有网络设备必须支持组播,且相互兼容。
2)建立有效的通知和查询机制,即因特网组管理协议(Inter net Gr oup Message Pr otocol,IGMP)。主机利用通知机制把自己参与的组播组通知给路由器;路由器利用查询机制知晓本地子网中是否有属于该组播组的主机。
3)具有有效的IP地址分配策略,确保将IP组播地址的28位地址空间映射到介质访问控制(Media Access Contr ol,MAC)组播地址的23位地址空间。
组播通信采用的是用户数据报(User Datagram Protocol,UDP)连接方式,通信过程中,相同的组播数据流在每条链路上最多只有1份(见图2)。源主机向组播组地址发送报文,只有加入到该组播组的目标主机A、C可以接收到这份报文,具体通信过程如下:
源主机向相邻路由器发送1条IGMP入组消息,相邻路由器收到后,动态跟踪组播组,使用组播路由协议在源主机和目标主机各路由器间建立组播生成树,从源主机伸展到目标主机A、C。源主机和目标主机之间建立组播路由后,数据报文就从源主机沿着组播路由传输给各目标主机。目标主机接收到源主机的数据后,网络接口卡滤出组播群组的MAC地址,网络驱动器对此地址作出反应后把数据传输到网络协议栈,最后进入到应用层,实现数据通信。
图2 组播通信流示意图
IGMP协议用于实现群组成员之间的网络通信功能,封装在IP报文中,协议号为2。IGMP协议具有3种版本:IGMPv1中定义了基本的组成员查询和报告过程;IGMPv2增加了组成员快速离开的机制;IGMPv3增强了主机控制能力,支持指定源/组功能。
主机使用IGMP协议通知路由器加入组播组;路由器使用IGMP协议查询本地子网中是否有属于本地组播组的主机;路由器之间使用IGMP协议建立组播路由,传输组播群成员关系,实现跨网络的组播。
组播通信中的组播地址包括IP组播地址和以太网组播地址。IP组播地址采用IPv4中的D类地址,范围为[224.0.0.0,239.255.255.255]。其中[224.0.0.0,224.0.0.255]是局部链接组播地址,用于局域网,路由器不转发该范围内的IP包;[224.0.1.0,238.255.255.255]是预留组播地址,用户可用组播地址,全网范围内有效;[239.0.0.0,239.255.255.255]是管理权限组播地址,内部使用,用于限制组播范围。以太网组播地址由IP组播地址映射取得,即将IP组播地址的低23位代替特定以太网地址中的低23位。
Vx Wor ks是美国风河公司开发的基于优先级抢占的高性能嵌入式实时操作系统,具有高速的任务切换和快速的中断反应能力,实时性好、可靠性高。Vx Wor ks提供了完备的网络功能,网络协议栈遵循工业标准BSD4.4,提供socket编程接口。Vx Wor ks网络层次分为应用层、网络协议层、多路复合(multiplexer,MUX)层和数据链路层(见图3)。
图3 Vx Wor ks网络层次结构图
MUX层是Vx Wor ks为了实现多驱动和多协议接口增加的中间层,介于网络协议层和数据链路层之间,屏蔽了网络协议层和数据链路层的直接交互,为两层提供统一、规范的网络接口。MUX层不存在自己的协议,也不会在传输的数据包上添加该层次的任何信息,支持增强型网络驱动(Enhanced Net wor k Driver,END)和网络协议包(Net wor k Pr otocol Tool kit,NPT)两种形式的驱动程序,其接口采用END实现。
在Vx Wor ks环境下实现组播通信(见图4)。
1)调用函数ip Attach()将IP协议绑定到MUX层,并设置子网掩码和分配IP地址。
2)调用函数socket()创建UDP套接字。
3)调用函数bind()绑定套接字与本地地址和端口号。
4)调用函数setsocketopt()配置套接字,通过套接字IP_ADD_MEMBERSHIP选项功能让主机入组,设置方法如下:
i mr_interface为INADDR_ANY时,选择默认组播接口。主机未入组时可以发送数据,不能接收组内数据。
5)利用IP_MULTICAST_TTL选项功能设置数据包生存时间,取值范围为[0,255]。当默认值为1时,组播数据只能在同一网段内传输。设置方法为:setsockopt(sock,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl));
6)利用IP_MULTICAST_LOOP选项功能控制数据回传。设置方法为:setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop));
当loop值为0时,禁止回传;当loop值为1时,允许回传。
7)调用函数route Add()添加静态路由表项。
8)接收和发送数据。
9)通过套接字IP_DROP_MEMBERSHIP选项功能退出组播组,其设置方法为:setsockopt(sock,IPPROTP_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(sreq))
10)调用close()函数关闭套接字。
根据实际情况增加网络初始化组件、网络设备组件和网络协议组件等Vx Wor ks提供的网络组件,即可在Vx Wor ks环境下实现组播通信。
图4 Vx Wor ks下实现组播通信的流程图
基于Vx Wor ks的组播通信方式现已应用于某型船主推进装置监控系统中,实际应用证明,采用组播技术进行网络通信,可以有效地节省网络带宽、降低网络流量、避免网络堵塞。
[1] Beau Williamson.IP组播网络设计开发[M].顾金星,译.第1卷.北京:电子工业出版社,2000.
[2] 陈智育.Vx Wor ks程序开发实践[M].北京:人民邮电出版社,2004.
[3] 张杨,于银涛.Vx Wor ks内核、设备驱动与BSP开发详解[M].北京:人民邮电出版社,2009.
[4] 吕秋云.组播技术及应用系统的实现[EB/OL].[2012-01-30].http://tech.c114.net/166/a138024.ht ml.