翟 巍,李大双,姜永广
(中国电子科技集团公司第三十研究所,四川成都610041)
链路状态路由与距离矢量机制相比由于开销相对较大,不适合于低速移动战术Ad Hoc网络。但是,链路状态路由协议具有一定的优势,例如,能够通过路由协议建立的全局拓扑表为指挥员提供全局的战术单位连通拓扑态势信息,能够通过链路状态信息更好地支持服务质量(QoS)的控制机制,能够更好地支持战术网络的拓扑控制,在定向波束通信网络中针对不同方向链路分别实施功率控制,通过全局最短代价计算在解决与避免路由环路方面比距离矢量路由机制更有优势等。随着传输速率达到几Mb/s甚至几十Mb/s的宽带战术电台、定向波束传输电台的出现与部署应用[1],现代高速电台几乎都实现了基于多点中继(MPR)的优化链路状态路由协议(OLSRv1)[2]。
尽管战术无线网络在向带宽高速的方向发展,但战术应用的需求增长更快,其带宽资源仍然不够使用。传统的链路状态路由开销较大,并且随着战术网络规模的扩大链路状态路由泛洪开销仍然是一个严重的问题。因此,OLSRv2[3]所采取的地址块格式压缩机制对于链路状态路由机制在大规模战术网络中的应用十分重要。
与OLSRv1相比,OLSRv2的主要进步是采取了先进的消息压缩格式和更优化的MPR算法,这种路由消息压缩机制能够大大地降低路由泛洪的开销。IETF MANET(移动Ad Hoc网络)论坛对OLSR的工作机制进行了功能上的分割与剥离,分别拆解为移动Ad Hoc网络分组与消息的通用格式(RFC5444)即、移动Ad Hoc网络多值时间表示(RFC5497)以及移动Ad Hoc网络邻节点发现协议(RFC6130)3个基础性 RFC 规范与 OLSRv2草案[4-6]。目前,已提出了单独的路由MPR优化改进算法草案,并且OLSRv2草案已进展到最后版本状态,等待IETF分配正式的规范编号,预计很快成为正式的RFC规范(即OLSRv2 RFC文档)。
OLSRv2路由协议实现路由泛洪开销压缩的主要方法是高压缩效率的地址块表示格式。此外,也采取了使拓扑消息泛洪范围(连通控制集合(CDS))更小的、更优化的多点中继算法。文中主要研究如何充分利用地址块压缩格式来减小路由泛洪开销的组网方法,对于比OLSRv1更先进的MPR算法,不是文中研究的重点。
RFC5444的分组与消息格式压缩能力主要由地址块压缩机制体现。分组除了包含分组头以外,还可以包含一个或多个消息。一个消息包含有一个消息头、一个消息TLV(类型-长度-值)块、零个或更多个的地址块以及一个地址块TLV块。
一个地址由长度为地址长度(address-length)个字节、以Head:Mid:Tail形式表示的一个序列指示。Head、Mid或Tail不与任何语义相关联,Head指示了地址块内所有地址相同的头部字节内容,Mid指示了地址块内这些地址中间部分的字节内容,Tail指示了地址块内所有地址相同的尾部字节内容。这种独特的表示法使地址能够聚合,它通常具有相同的部分。一个地址块包含了多个地址按顺序排列的一个集合,这些地址共享相同的Head和相同的Tail,但各自具有单独的Mid。Head和Tail各自都可以独自为空,使其能够表示不具有相同的Head或相同的Tail的多个地址对象。
将一个地址描述为具有Head:Mid:Tail的形式、具有地址长度个字节的一个序列。一个地址块内将含有一组按顺序排列的多个地址,这些地址具有相同的首部与尾部字节,并且各自的中间部分(Mid)不相同。一个地址块<地址块>的定义为:
其中:
<地址数>为一个8比特无符号整数域,含有在该地址块中描述的那些地址的数量(num-addr),它绝不能为0。
<地址标志>为一个8比特域,它规定了该地址块的余下部分应如何解释:
bit0:如果bit0=“0”,则<地址块>中将不具有<相同头部的长度>与<相同头部>域。如果bit0=“1”,则<地址块>中包含了<相同头部的长度>域,并且只要相同头部的长度>域的值不为0,<地址块>中也包含了<相同的头部>域。
bit1与bit2:按表1来解释,该表中未给出的组合绝不允许使用。
bit3和bit 4:按表2来解释,绝不允许使用该表中未给出的组合使用。
表1 bit 1与bit 2的定义Table 1 Definition of bit1 and bit2
表2 bit 3和bit 4的定义Table 2 Definition of bit3 and bit4
bit5:如果bit5=“0”,则在<地址块>中不含有<链路代价>域。如果bit5=“1”,则<地址块>中包含了<链路代价>域。
bit6:如果bit6=“0”,则在<地址块>中不含<字节2>域。如果bit6=“1”,则指示所有地址的第2字节都是相同的,则<地址块>中将含有<字节2>域。
bit7:如果bit7=“0”,则在<地址块>中不含有<字节3>域。如果bit7=“1”,则指示所有地址的第3个字节都是相同的,则<地址块>中将含有<字节3>域。
表1解释了bit 1与bit2的组合定义,表2解释了bit 3和bit 4的组合定义。
<相同头部的长度>域占用{<相同头部的长度><相同尾部长度>}域的高4比特,如果存在,将为一个8比特无符号整数域,它将包含所有地址的相同头部的字节数。
相同头部的长度(head-length)为一个变量,若<相同头部的长度>域存在,将等于<相同头部的长度>的值,否则等于0。
<尾部长度>域占用{<相同头部的长度><相同尾部的长度>}域的低4比特,如果存在,为一个8比特无符号整数域,含有所有地址公共的尾部的字节数。
尾部长度(tail-length)为一个变量,若<相同尾部的长度>域存在则等于<相同尾部的长度>的值,否则等于0。
<相同头部的长度>域在相同头部的长度=0的情况下将予以省略,否则指示了所有地址相同的头部的长度那么多个最左边字节的一个域。
<相同的尾部>域在尾部长度=0或bit2=“1”的情况下将被省略,否则为含有所有地址公共的尾部长度个最右边字节的一个域。如果bit2=“1”,则所有地址公共的尾部长度那么多个最右边字节应该全部为0。
地址中间部分的长度(mid-length)是一个变量,其值不能小于零,其定义为:
地址中间部分的长度:=地址长度-相同的头部长度-相同的尾部长度
<地址中间部分>域在mid-length=0的情况下将予以省略,否则每个<地址中间部分>为长度为mid-length字节的一个域,描述与该地址块中对应的每个各不相同的地址的mid。当不能忽略时,代表<num-addr>个<mid>
<前缀长度>为一个8比特无符号整数域,含有一个地址前缀的比特长度。如果bit3=“1”,那么在该地址块内唯一的一个<前缀长度>域中,将含有所有地址共用的前缀长度(prefix-length)。如果bit4=“1”,则<地址数>个<前缀长度>域中的每一个,都包含了该地址块内对应地址的各不相同的前缀长度(以相同的顺序排列)。否则bit 3和bit 4都将为“0”,将不存在任何<前缀长度>域;则每个地址对象都将含有一个等于8*地址长度比特(IPv4为20,IPv6为128)的前缀长度。如果任何一个<前缀长度>域的值大于8*地址长度,则这个地址块有错。
<链路代价>是一个8比特无符号整数域,表示一个1-跳直达的邻节点链路的代价。<链路代价>域的重复个数,由<地址块>域含有的地址数量决定。当含有多个1-跳直达的邻节点链路的代价时,这些链路代价的出现顺序即使那个分别与该地址块中邻节点地址出现的顺序一一对应。当不包含<链路代价>域时,每条1-跳直达的邻节点链路的链路代价都为1-跳,将采用TC消息经过的跳数作为路径代价。
下面给出几个地址块压缩的实例,它们包含了不同情况的多种地址块类型。
1)为了包含地址 a.b.c.d、a.b.e.f以及 a.b.g.h,则head-length=2,尾部长度 =0,mid-length=2,<地址标志>域设置了bit0标志(其值为128),<尾部长度>和<相同的尾部>域被省略,则该地址块的字节内容为3、128、2、a、b、c、d、e、f、g、h,共11 字节长。
2)为了包含地址 a.b.c.g 和 d.e.f.g,则 head-length=0,尾部长度 =1,mid-length=3,<地址标志>域设置了bit1标志(其值为64),<headlength>和 <head>域被省略,则该地址块的字节内容为 2、64、1、g、a、b、c、d、e、f,共 10 字节长。
3)为了包含地址 a.b.d.e 和 a.c.d.e,则 head -length=1,尾部长度 =2,mid-length=1,<地址标志>域设置了bit0和bit1标志(其值为192)。则该地址块的字节内容为2、192、1、a、2、d、e、b、c,共9 字节长。
4)为了包含地址 a.b.0.0、a.c.0.0 及 a.d.0.0,则head-length=1,尾部长度 =2,mid-length=1,<地址标志>域设置了标志bit0和bit2(其值为160),<tail>域被省略,则该地址块的内容为3、160、1、a、2、b、c、d,共 8 字节长。
5)为了包含地址 a.b.0.0 和 c.d.0.0,则 head-length=0,尾部长度 =2,mid-length=2,<地址标志>域设置了标志bit2(其值为32),<head>和<tail>域被省略,则该地址块的字节内容为2、32、2、a、b、c、d,共 7 字节长。
6)为了包含地址 a.b.0.0/n 和 c.d.0.0/n,则 head-length=0,尾部长度=2,mid-length=2,<地址标志>域设置了标志bit2和bit3(其值为48),则该地址块的字节内容为2、48、2、a、b、c、d、n,共8 字节长。
7)为了包含地址 a.b.0.0/n 和 c.d.0.0/m,则head-length=0,尾部长度 =2,mid-length=2,<地址标志>域设置了标志bit2和bit4(其值为40),则该地址块的字节内容为 2、40、2、a、b、c、d、n、m,共9字节长。
当在战术Ad Hoc网络中部署应用OLSRv2时,必须考虑和设计如何充分利用这种地址块压缩的组网机制,便于最大化地降低链路状态路由协议运行的开销。
在OLSRv2协议运行时,将周期地产生Hello消息和拓扑控制(TC)这两种消息。
Hello消息仅限制在节点的1-跳范围内,不需要转发传递。网络密度越大时,则节点的1-跳链路就越多,使得Hello消息内包含的1-跳链路信息(链路两端节点ID的列表)数量就越多。因此对Hello消息的链路表进行压缩能缩短Hello消息的总长度,进而降低无线信道的带宽开销。Hello消息中含有的1-跳链路,包括单向(即入向)链路、对称双向链路、MPR选择信息以及链路代价。
网络内的每个节点周期地产生TC消息,并且由其选取的MPR邻节点中继转发进行泛洪,每个TC消息将在由MPR节点组成的连通控制集合的范围内进行多跳泛洪,非MPR节点不转发TC消息。要充分发挥地址块压缩机制的效率,必须在战术自组织网络的地址规划上需要尽量配合,才能充分发挥其压缩机制的效果。节点周期产生的每个TC消息中,包含了该节点当前的所有双向的(对称的)1-跳链路信息,每条链路信息以链路两端节点的ID来表示。
我们建议在作战术网络规划部署时,战术节点采用类似于IP地址的节点ID编址,不规划无线接口的IP子网地址[7-8]。将每个战术子网内各节点的ID都规划在相同的IP网段内,便于Hello和TC消息实现高效率的地址块压缩。
如上所述,只要对战术网络中各节点ID的规划得当,比如规划在同一IP网段内,则Hello消息和TC消息中的所有1-跳链路信息的对端节点都属于同一个IP网段,这就能够利用地址块压缩机制进行消息长度压缩。这些消息内包含的1-跳链路的本端ID都是相同的,在设计的消息格式中可以仅由一个ID来表示。因而所有的1-跳链路信息只需要列出对端节点的ID即可,这就为充分利用地址块压缩机制创造了极好的条件。
下面分别介绍基于上述节点ID(4字节)规划设计时Hello消息和TC消息的压缩格式表示。
(1)Hello消息压缩格式
当不采用压缩机制时,假设一个节点具有M条1-跳链路,则其原始的Hello消息格式如图1所示。
图1 非压缩的Hello消息格式Fig.1 Uncompressed of the hello message format
其中,链路标志比特含有单/双向指示、MPR选择指示。
采取地块压缩格式时,可以将所有邻节点链路的标志比特和邻节点分别聚集在一起,对邻节点地址块采取地块压缩机制来缩短Hello消息的总长度。其压缩格式如图2所示。
图2 压缩的Hello消息格式Fig.2 Compression of the hello message format
在图2中,假设为各节点规划设计的ID前3字节都相同,仅第4字节不同。
在链路标志域内,每条链路用2 bit作指示标志。D1和S1分别为链路1的方向特性和MPR选择指示,D1=“0”表示单向(即入向)链路,D1=“1”表示对称双向链路。其余链路的标志bit定义相同。
2字节可承载8条链路的标志信息,当具有更多的邻节点链路时,可以根据链路总数动态扩展链路标志域的字节长度。
(2)TC消息压缩格式
当不采用压缩机制时,一个节点具有M条1-跳对称双向链路,则其原始的TC消息格式如图3所示。
图3 非压缩的TC消息格式Fig.3 Uncompressed of the TC message format
采取地块压缩格式时,各节点在构造其TC分组时,可以针对它周期产生的TC消息和接收到的新TC消息,采取聚类封装的方法,即将所有TC消息中的发送节点ID和对称双向链路总数聚集为一个数据块,将所有TC消息中的对称双向链路邻节点ID聚集为一个地址块,采取地块压缩机制来压缩该地址块,从而缩短TC消息的总长度。假设网络中共有N个节点,TC消息中的所有TC消息总共含有K条链路,假设为各节点规划设计的ID前3字节都相同,仅第4字节不同,其压缩格式如图4所示。
图4 压缩的TC消息格式Fig.4 Compression of the TC message format
地址块压缩的效率是比较高的,当一个战术自组织子网内的所有节点ID的掩码长度为24时,则总长为40个字节的10个ID地址的地块块压缩格式长度仅为16字节长,压缩效率接近60%。
OLSRv2将邻节点发现机制和地址块压缩机制分离为独立的RFC规范,OLSRv2协议的重点是对TC消息进行高效率的多点中继泛洪。目前IETF MANET论坛针对经典MPR优化算法已经提出了新的草案。此外,OLSRv2协议文本中还建议将泛洪算法与模糊视野链路状态(FSLS)等先进的路由思想相结合,以进一步降低其泛洪开销。
对运行OLSRv2协议的整个战术网络采取统一的节点ID规划设计,尽量规划在同一个IP网段内,使各节点的ID都具有相同的头部字节。这样就给采取地址块压缩格式对OLSRv2协议发送的Hello消息和TC消息进行信息聚类压缩提供了基础的必要条件。
传统的标准IP路由在单个IP子网(点到点链路或以太网上)内都为1-跳传输,逻辑上不存在同一IP子网内消息多跳转发的情况。而自组织组网要求实现同一IP子网内的消息多跳转发。若基于标准的IP路由技术,则相同子网内的多跳转发必须由位于IP路由层之下的自组织路由垫层实现转发。因此必须采用和实现相同IP子网内的IP层多跳转发技术,需要基于IP协议进行适应自组织特性的设计,既不违反标准的IP路由原则,又能实现同一IP子网内的多跳转发路由。
节点ID可以作为无线接口的IP地址,便于实现基于标准IP路由机制的自组织多跳路由。各节点附属的IP子网信息,既可以通过ID-IP子网映射表预先加载到各个节点,也可以通过TC消息泛洪到各个节点,建立节点ID-IP子网路由映射表,进而建立IP核心路由层的IP子网路由表。
网络规划软件可以预先生成节点ID与其接入/附属IP子网的映射表,加载到各个战术自组织网络节点中。各层子网内通过交换自组织的ID路由信息,建立基于ID的自组织节点路由表,进而在IP层的核心路由表中建立IP子网路由表。
将无线接口定义为标准的广播型IP子网接口,将节点ID作为其6字节MAC地址的低4个字节,其最高(即第1和第2)两个字节采用相同的值,无线子网内各节点的MAC地址仅第6个字节不相同。既可以在初始化建立整个无线子网的静态ARP表,也可以基于动态建立的群节点拓扑表信息来建立整个无线子网的动态ARP表。
实现同一个IP子网内多跳IP路由,可以采用两种方法。
方法一。基于OLSRv2建立的动态路由表,动态建立IP层的标准IP子网路由表,在IP层建立标准IP子网路由表中,下一跳为物理上的下一跳链路邻节点的无线接口IP地址。将接收到的所有IP分组都上传到IP层,由IP层进行标准的(物理上)下一跳IP选路,进而实现多跳中继。由自组织路由协议驱动建立与删除IP层建立基于下一跳链路邻节点的核心路由表,对于相同子网内的多跳(≥2跳)远的目的地,将以某个1-跳邻节点为下一跳IP路由;
方法二。IP层选路确定的“下一跳”地址为连接目的IP子网的节点的无线接口IP地址,由自组织垫层来“潜水”实现多跳中继转发,直到到达逻辑上的真正“下一跳”才上传到IP层进行标准的IP路由转发。在自组织垫层执行的这种多跳中继过程对于IP层是不可见的。由自组织路由协议驱动建立与删除IP层建立基于逻辑上的“下一跳”节点的核心路由表,对于相同子网内的多跳(≥2跳)远的目的地,将以连接目的IP子网的节点的无线接口IP地址作为下一跳IP路由。
采用这种自组织组网路由技术,可以实现战术网络节点的随遇接入、自动重构、动态组网。
文中围绕与OSLRv2草案密切相关的地址块压缩格式(RFC5444)规范如何在战术自组织网络中的应用进行了阐述。论文以地址块压缩的多个实例展示了其压缩机制的具体使用方式,当为所有节点的ID规划的掩码长度等于24时,其地址块压缩效率达到60%。由于OLSRv2拓扑控制报文主要由各节点的地址块构成,因而对于OLSRv2路由分组的压缩效率也将接近60%。需要特别指出的是,OLSRv2并未提出解决移动Ad Hoc网络路由安全的具体方法,与OLSRv2安全设计相关的配套RFC草案正在制定当中,在设计基于OLSRv2的战术路由协议时,对其安全性也应该做进一步的一体化考虑。
[1]王莹,王中武,莫娴.定向Ad Hoc网络邻节点发现与跟踪技术[J].通信技术,2013,46(02):82 -85.WANG Ying,WANG Zhong - wu,MO Xian.Study on Neighbor Discovery and Tracking in Ad Hoc Network with Directional Antenna[J].Communications Technology,2013,46(02):82 -85.
[2]Clausen T,Jacquet P,Adjih C,etal.Optimized Link State Routing Protocol[EB/OL].(2003 - 10 - 5)[2013.12.20].http://www.ietf.org/rfc/rfc3626.txt.
[3]Clausen T,Dearlove C,Jaquet P.The Optimized Link State Routing Protocol version 2[EB/OL].(2013.03.27)[2013.12.20].http://www.ietf.org/rfc/draft- ietf- manet- olsrv2 -19.txt.
[4]Clausen T,Dearlove C,Dean J,etal.Generalized Mobile Ad Hoc Network(MANET)Packet/Message Format[EB/OL].(2009 -2 -16)[2013.12.20].http://www.ietf.org/rfc/rfc5444.txt.
[5]Clausen T,Dearlove C.Representing Multi- Value Time in Mobile Ad Hoc Networks(MANETs)[EB/OL].(2009 -3 -19)[2013.12.15].http://www.ietf.org/rfc/rfc5497.txt.
[6]Clausen T,Dearlove C,Dean J.Mobile Ad Hoc Network(MANET)Neighborhood Discovery Protocol(NHDP)[EB/OL].(2011 -03 -27)[2013.12.19].http://www.ietf.org/rfc/rfc6130.txt.
[7]王中武,李大双,胡薇.OSPF向移动Ad Hoc网络扩展的一种新方法[J].通信技术,2013,46(02):35 -37.WANG Zhong - wu,LI Da - shuang,HU Wei.A New Method for Extension of OSPF to MANET[J].Communications Technology,2013,46(02):35 -37.
[8]姜庆,李大双.OLSR在广义AD-HOC网络中的扩展应用研究[J].信息安全与通信保密,2007(02):149-150.JIANG Qing,LI Da - shuang.Application Research of OLSR in Generalized AD - HOC Network[J].Information Security and Communications Privacy,2007(02):149 -150.