多媒介通信系统链路管理的设计和实现
扫描二维码
随时随地手机看文章
摘要:军事通信系统和某些民和领域对通信可靠性和抗毁性的需求使得点到点的链路倾向于建立在多种通信媒介、多种协议上。介绍了一种借鉴OPC规范,基于 COM技术,在多协议、多种协议上。介绍了一种借鉴OPC规范,基于COM技术,在多协议、多通信媒介上进行链路管理和调度的解决方案,并给出了具体实现。 关键词:多种通信媒介 多协议 链路调度 COM 在许多应用中,如军事通信中的C4I系统、政府部门和特殊行业中的某些重要通信系统,对通信网络的可靠性、抗毁性有着非常苛刻的要求,既要求在正常情况下有较高的通信效率,又要求在恶劣环境下能保证基本的通信,因此仅仅依赖单一通信媒介难以达到可靠性的要求。在C4I系统中,把现有的和未来的全部传输媒介资源综合到通信系统中已经成为通信网络追求的目标之一。在民用领域,例如高速公路联联网收费系统中,因为需要一个24%26;#215;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组件,通过接口和回调接口与链路调度模块进行通信,链路管理模块以总线方式实现对协议模块和媒介模块的管理。而协议组件和通信媒介组件之间的通信则由链路调度模块转发。
所面临的难点之一在于协议组件和通信媒介组件可以有相同的数据接口,但是这些组件的特性千差万别,在设置参数和获得当前状态方面无法做到大致统一的接口,可以通过组件自解析的方式解决。链路管理模块和这些组件之间的参数用字符串或数组的方式传递,各组件在得到这些字符串后根据本身的情况进行解析,得到特定的参数。 难点之二,如前文所述,通信媒介组件与物理层密切相关,很难做到支持并行化的输入。在多条独立链路不同的线程中同时使用同一通信媒介时,各链路对物理层的操作将产生冲突,必须对通信媒介组件的数据输入进行串行化处理(排队),使同一时刻,只处理一个输入。在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 链路切换(自动切换、非自动切换)流程图 本节点与主服务器(即主父节点)和备份服务器(如有)之间的链路必须在本节点运行之前配置,与各客户端(子节点)之间的链路可在运行中动态配置,由客户端主动发起,申请加入。 2.2 链路间切换 在与一个节点通信的过程中,当主用链路(优先级高)断链或拥塞时,必须自动切换到备用链路上进行数据通信,称为自适应切换;亦可禁止自适应切换而由上层控制,称为非自动切换。在许多网络中,父节点备用链路通信是公用的,无法由某两个节点永久占用,只能在需要时申请激活。 在自动切换模式下,切换原则是:尽量使用高优先级链路进行通信。分五种情况讨论:(1)网络层交给链路层一系列待发送消息,此消息结构中包含了目的ID。链路层通过链路列表打到此目的ID对应的已经激活的链路中优先级最高者进行通信。(2)当正在通信的链路中断时,保持该链路的试图连接状态。激活优先级次之的链路,若无,则再次之(此链路应在切换链路集内)。如果没有链路可以被激活,则认为通信中断;若激活优先级链路,则从未被ACK的消息开始发送。(3)在通信中,高优先级的链路被激活时,中断正在使用的链路,转移到高优先级的链路上,从未被ACK的消息开始发送。(4)末在通信中的链路中断时(由心跳信号侦测得知),保持该链路试图连接状态,激活优先级次之的链路,若无,则再次之(在切换链路信内)。如果没有链路可以被激活,则认为通信中断。(5)末在通信中,高优先级的链路被激活时,中断低优先级链路。 非自动切换模式下的要点是保证在切换过程中数据的安全性,不丢失也不重复。向上层提供的非自动切换接口提供三个功能:a.激活某条链路;b.将当前通信切换至某条链路;c.中止(disable)某条链路。在产生通信动作前,上层可以指定目前激活的链路(同时中止其它链路,使激活链路保持在1);如果不能激活指定链路,则报告到上层,由上层继续进行调度。激活链路只有一条,有通信动作产生时,链路层自然采用条链路进行通信。如果需要从链路A切换到链路B,上层必须先激活链路B,此时有A/B两条链路激活。但是通信仍在链路A进行;然后上层将当前通信切换至链路B;链路管理层待上条消息发送成功或失败后,再切换至链路B;最后上层disable链路A,使激活链路仍然只保持一条。在这种模式下,尽管是非自动切换,但是链路管理层仍然对其过程进行干预,保证了数据的安全性。链路切换流程如图3。 2.3 节点动态加入 新的节点希望成为某节点的子节点时,配置与该节点(服务器)之间的链路,并向该节点发出加入申请帧,等待对应回传,从回传信息中判断对方是否允许本节点加入。与服务器之间有可能多链路,申请帧中必须包含所有这些链路的信息。 本节点收到新的客户端加入本网络的申请帧时,由服务器操作员审核是否允许该客户端加入。若允许,从申请帧中获得与该节点间所有链路的信息写入链路表,并把对方发送申请帧所使用的链路设为激活状态,然后发送“成功”应答帧至该节点,至此,即加入了一个新的子节点。若未通过审核,则发送“失败”应答帧至该节点。 本系统的优点在于:(1)基于超链思想,对点到点的多种类型链路、多条链路进行统一管理,使具体通信事务不必关心链路调度;对外接口简单,易于二次开发;(2)基于COM技术和OPC规范设计思想,把协议、媒介驱动、链路管理作为独立的组件,使系统的可扩展性大大增强,可以在基本不改变其他要素的情况下,独立地升级或增加协议或媒介驱动协议,系统的灵活性和适用范围大大增加。