多媒介通信系统链路管理的设计和实现
摘要:军事通信系统和某些民和领域对通信可靠性和抗毁性的需求使得点到点的链路倾向于建立在多种通信媒介、多种协议上。介绍了一种借鉴OPC规范,基于COM技术,在多协议、多种协议上。介绍了一种借鉴OPC规范,基于COM技术,在多协议、多通信媒介上进行链路管理和调度的解决方案,并给出了具体实现。
关键词:多种通信媒介 多协议 链路调度 COM
在许多应用中,如军事通信中的C4I系统、政府部门和特殊行业中的某些重要通信系统,对通信网络的可靠性、抗毁性有着非常苛刻的要求,既要求在正常情况下有较高的通信效率,又要求在恶劣环境下能保证基本的通信,因此仅仅依赖单一通信媒介难以达到可靠性的要求。在C4I系统中,把现有的和未来的全部传输媒介资源综合到通信系统中已经成为通信网络追求的目标之一。在民用领域,例如高速公路联联网收费系统中,因为需要一个24×7的可靠通信平台,亦采用了不同类型的通信媒介(如图1),它通常把专线作为主用线路,把公众电信网提供的拨号线(普通调制解调顺或ISDN)连接作为临时备用线路。不同通信媒介的效率和经济性差别很大。对不同类型的通信链路必须进行综合调度,做到自适应不同的网络环境,自动在主用链路和多条备用链路间进行切换。这样才能适应这些系统对网络生存能力的要求。
传统开过程中,常把最上端的应用程序直接建立在多种通信设备上,在应用程序中直接对不同类型链路进行管理和调度,这对整个系统的开发、升级、扩展带来了很大问题。一方面应用软件开发者需要耗费大量精力在不同的通信设备上,而这些工作在别的同类项目中无法复用;另一方面,当系统需要升级通信设备,或者扩展新的通信媒介时,几乎相当于重新开发整个系统。同时,在多个应用程序共享通信设备时容易产生冲突。借鉴超链思想以及微软和工业控制界共同推出的OPC(OLE for process control)规范的设计思路,提出了基于COM技术的解决方案。
图1 节点间的多种通信媒介综合使用
1 系统设计
1.1 设计思想
可以把所有媒介所提供的通信资源看作单一的逻辑数据链,即超链,它表示每一个节点到相邻点的连接,而并不关心具体的通信媒介OPC规范通过提供标准接口的方法,使下层设备无需了解上层应用,上层标准接口的方法,使下层设备无需了解上层应用,上层应用亦无需关心下层设备的细节。借鉴二者的思想,在应用软件和通讯设备间增加了一层类似中间件的通信平台,使得应用软件和通信设备间的无关性得以实现,并把对通信设备的访问进行统一管理,解决了并发冲突问题。
1.2 系统结构
根据ISO七层网络体系定义,在传送(Transport)层之上对底层进行封装,是因为在多媒介情况下,多种协议是分布式网络体系的一个基本要求。一方面,一般情况下,不同的通信媒介适用的传送层协议是完全不同的;另一方面,系统中所传输的不同数据类型对通信性能(如一次可传输消息大小、实时性等指标)的要求差别很大。针对不同数据类型,设计具有不同性能的传送层协议,并实现自适应调度,是实际应用的需求。只有在传送层之上进行封装才有可能屏蔽不同媒介所带来的差异。系统整体描述如图2所示。
链路的调度管理层对不同协议、不同通信媒介以及不同链路进行一管理和调度。通信媒介1~n表示诸如专线网络、拨号线-MODEM、无线调制解调器-无线电台及与此类似层次、将来扩展的不同通信媒介,链路调度管理层对这些通信媒介进行初始化、激活、配置,并获得它们的数据接口和所有应该得到的状态。协议1~n表示诸如基于TCP的协议、基于UDP的协议、半双工高速短波协议以及将来扩展的各种不同协议,它们的管理同样由链路调度管理层进行,接口并不直接暴露给上层,而是由管理层封装后向上层提供统一的接口。协议模块在需要发送数据或者有数据到来时并不直接与各通信媒介模块通信,而是通过链路管理层访问通信媒介模块所提供的接口。这是因为许多通信模块(与物理设备联系紧密)并不支持并发访问,链路管理层把对它们的访问串行化。
1.3 模块化和可扩展性
在不同的应用中,所用的协议和通信组件不尽相同,要求在链路管理层不做过多的改动,既能加入新的协议模块和通信媒介模块。这样就需要设计和实现做到模块化,且各模块和链路调度模块之间必须隔离开。链路调度模块通过尽量统一的接口对各模块进行调度和管理。微软的组件对象模型技术(COM)就提供了这种特性。OPC规范应用COM/OLE技术实现了模块化和可扩展性,但OPC规范主要针对工业控制领域,在本设计中无法完全实现,故直接采用COM技术,借鉴OPC的设计思想构建本设计。每个协议模块和通信媒介模块均是一个单独COM组件,通过接口和回调接口与链路调度模块进行通信,链路管理模块以总线方式实现对协议模块和媒介模块的管理。而协议组件和通信媒介组件之间的通信则由链路调度模块转发。
javascript:window.open(this.src);" style="cursor:pointer;"/>
所面临的难点之一在于协议组件和通信媒介组件可以有相同的数据接口,但是这些组件的特性千差万别,在设置参数和获得当前状态方面无法做到大致统一的接口,可以通过组件自解析的方式解决。链路管理模块和这些组件之间的参数用字符串或数组的方式传递,各组件在得到这些字符串后根据本身的情况进行解析,得到特定的参数。
难点之二,如前文所述,通信媒介组件与物理层密切相关,很难做到支持并行化的输入。在多条独立链路不同的线程中同时使用同一通信媒介时,各链路对物理层的操作将产生冲突,必须对通信媒介组件的数据输入进行串行化处理(排队),使同一时刻,只处理一个输入。在COM组件的多线程模型中,单线程套间(STA)模型有如下特点:如果某COM组件的对象生成在单线程套间中,则只有与同在一个套间特定的线程可以访问该对象不在同一套间的其他线程必须通过列集(marshal)技术才能访问该对象。这种技术基于COM ORPC协议和消息阶列机制,自动把对该对象的访问串行化了。所以如果每个通信媒介组件都只有一个对象且生存在STA中,则通过列集技术它的访问自动被串行化。
1.4 媒介模块和协议模块的设计
媒介组件封装了与网络平有关的操作,向上提供了建链、断链、发送数据、接收数据(回调)、参数设置、状态改变报告(回调)、参数查询、状态查询等接口。
例如在高速公路网络中,专线网络和拨号线后备链路都基于IP网络,Windows套接字接口(Winsock)提供了一个基本与协议无关的传送接口从而封装了基本操作。但是对于不同协议,具体操作仍稍有不同,如面连接的TCP和面向无连接的UDP向上层暴露的SOCKET连接过程就很不相同,同时对不同协议参数信息的查询和设置接口差别也很大;而拨号线后备链路在SOCKET连接之外还有拨号、挂断等操作。媒介组件在Winsock基础上又给出了一层封装,把建立链路、撤销链路、等差别较大的操作在此层完成,向上层暴露统一的建链方法。对于参数的设置和信息查询,媒介组件同外界通过不定长度的数组或字符串交换,这样就形式了掩盖了差异,保持了接口的统一性。
对于特殊的后备媒介,如无线MODEM-无线电台方式,媒介组件必须提供与IP网络相一致的接口,而对设备的操作(串口、MODEM、电台)进行封装。节点ID系统(与IP系统类似)也在此组件中进行管理。
在媒介模块之上完成的协议控制以独立的COM组件方式存在。这是考虑到媒介类型与协议并非一一对应,一种协议可能适用于多种媒介,一种媒介亦可能使用多种协议。
2 链路的管理、维护和调度
链路的管理、维护和调度是本设计的重点内容之一,可从运行角度和维护测试角度分别考虑。在运行中,系统的每个节点都可能通过多条链路与多个节点通信,每条链路所使用的通信媒介和协议又不尽相同。与同一节点通信的过程中,有可能在不同的通信媒介和协议间切换。同时,链路管理层必须实时获得各条链路的运行状态和当前参数,如通断情况、吞吐量等,以作出正确的调度决策。从维护测试角度,需要设置各条链路所涉及的协议参数和涉及通信媒介的参数;新节点必须能够自动加入,成为任一节点的客户端。
2.1 多链路管理
链路管理层必须维护一张链路表,以记录各条链路的情况(如表1)。
表1 链路管理表结构
目的ID | 通信媒介 | 链路标识 | 对应目的地址 | 优先纺 | 链路状态 |
000001 | 'U' | 0001 | 192.169.0.1 | 1 | NO |
目的ID是节点的全网唯一标总值,通信媒介用字符标识,链路标识是链路的唯一标识。对应目的地址为下一层(特定通信媒介)的地址:若基于UDP/IP或TCP/IP,则为IP地址;若基于短波或者别的通信媒介,则为在下一层约定的地址。优先级表示与同一目的ID通信时优先采用哪条链路。与同一节点间的链路可能有数条,它们互相独立且对等,只是优先级不相同。链路状态包括中止和激活两种。中止状态指链路保持在侦听态,能接收数据帧关上报链路管理组件,而发送线程中止运行;激活状态指两节点在此链路上进行通信。链路由中止状态到激活状态转换的过程称为激活,包括启动发送线程,通过发送握手帧和接收握手成功帧与目的ID进行握手等过程。
链路表包括了所有可能使用的链路,在本节点启动时,只激活优先级最高的链路。若优先级最高链路无法激活,则激活次高的链路,以此类推,直到连接上。若激活了非最高优先级链路,则保持高优先级链路的“试图连接状态”。若均无法激活,则停止主动激活,等待被动激活。在所有激活的链路上,服务器主动发出“心跳信号”,侦测链路状态,包括链路是否中断、心跳信号回应时间等,并实时反映到链路表上。
图3 链路切换(自动切换、非自动切换)流程图