软件学报
JOURNAL OF SOFTWARE
1999年 第6期 第10卷 Vol.10 No.6 1999



一种用于单向链路网络的路由算法*
黄 浩　吴礼发　陈道蓄　谢 立　孙钟秀
　　摘要　价格低廉的卫星只收接收器能接收卫星发送的高带宽的数据,但是它不能向卫星发送数据.这样,卫星到这种接收器的链路就是单向的链路.现有的路由协议要求每条链路都是双向链路,不能处理单向链路的问题.一些学者利用“隧道”方法来解决这个问题.但是，这种方法需要事先知道一条从接收者到卫星上行链路发送站的“隧道”,因而不能适应网络拓扑结构的动态变化.文章提出了一种动态路由算法,它能用于具有单向链路的网络，并能适应网络拓扑结构的动态变化.
　　关键词　单向链路,单向网络,路由算法,距离向量,卫星通信.
　　中图法分类号　TP393
　
A Routing Algorithm for Network with Unidirectional Links
HUANG Hao　WU Li-fa　CHEN Dao-xu　XIE Li　SUN Zhong-xiu
(State Key Laboratory for Novel Software Technology 
Nanjing University Nanjing 210093)
(Department of Computer Science and Technology Nanjing University Nanjing 210093)
　　Abstract　 An inexpensive satellite receiver can receive high bandwidth traffic from a satellite, while no bandwidth from the receiver to the satellite is provided. Therefore the connection between the satellite and the satellite receiver is unidirectional. The existing routing protocols stand on the fact that any links are bi-directional. They can not handle unidirectional links. Some scholars use a tunneling method to solve this problem, but the tunneling method needs a fixed back channel from satellite receiver to the satellite uplink station. It can not adapt to dynamic topology change. In this paper, the authors propose a dynamic routing algorithm that can be applied to networks with unidirectional links. The routing algorithm can also adapt to the change of network topology. 
　　Key words　Unidirectional link, unidirectional network, routing algorithm, distance vector, satellite communication.
　　目前，Internet上的路由协议(routing protocol)的一个基本假定就是任意一对路由器之间的链路都是双向的.即如果报文能从站点A发往站点B,则也一定能从站点B发往站点A.然而，近年来出现了单向(unidirectional)或非对称(asymmetric)的链路.卫星通信系统在数据传输速率、地面站的大小、电源需求和移动性方面差别很大.例如,有像公文包大小的手持的系统可以接收和发送每秒几K位的数据，也有直径为几米的接收天线的地面站,可以接收和发送每秒几百兆位的数据.DBS系统［1］在功能和移动性方面则是一个折衷.在DBS系统中,地面的上行站收集信息,然后发送给广播卫星,最后由广播卫星播回地面.在DBS系统中,卫星运行在对地同步轨道上,能覆盖很大的区域,并使得天线设计简化，免去了跟踪等费用.地面接收站的天线只有几十厘米,耗电很少,易于移动和安装,但它只能接收,而不能向卫星发送数据.这就使得卫星链路成为单向的链路.图1［1］描述了一个具有单向链路的DBS系统.

图1　DBS系统
　　当前计算机网络上运行的路由协议(例如RIP［2］,OSPF［3］,MOSPF［4］,BGP［5］,IGMP［6］等)的一个基本假定是每条链路都是双向链路.原有的基于双向链路的路由协议在具有单向链路的网络中将不能正常工作.为了解决正在飞速发展的卫星通信网络和移动无线计算机通信中的路由问题,一些学者开始考虑构造新的适于在具有单向链路的网络上运行的路由协议.IETF(internet engineering task force)成立了一个UDLR(unidirectional linkrouting)工作组,提出了一些初步的解决问题的方法.H.Izumiyama［7］给出了一种利用“隧道”将一条单向链路模拟成双向链路的方法,这种方法要求单向链路的接收者记下发送者的IP地址,当这条链路的接收者要给发送者发送报文时,将此报文打包成IP包,按发送者的IP地址发送出去.这种方法不适用于网络拓扑动态变化的情况.文献［8～10］给出了对现有的路由协议,如RIP,DVMP,OSPF等进行修改以适应于具有单向链路的方法.这些方法要求单向链路的接收者知道有一条固定的从它到发送者的路径，但是这在一般的具有单向链路的网络中是难以做到的.T.Ernst［11］给出了一种基于有向图闭路的路由算法.这种方法利用洪泛的方法找到若干闭路,闭路上的任一结点都知道到其他结点的路径,链路或结点出现故障时也要用选择洪泛的方法通知其他结点.
　　本文给出了一种可运用于具有单向链路的网络的路由算法.它适用于带有单向链路的网络,并能适应网络拓扑的变化,不必事先知道单向链路的接收者到它的发送者的一条“隧道”.它也可以与其他现有的路由算法并存,即不与单向链路相邻的结点可以不改变原有的路由协议.
1 单向链路网络的概述
　　为叙述明确起见,我们给出若干在本文中要用到的术语和符号.一条链路如果只能沿固定的一个方向发送数据而不能沿相反的方向发送数据,则称此链路为单向链路,否则称为双向链路.部分链路或全部链路是单向链路的网络称为单向网络,否则称为双向网络.至少与一条单向链路相邻的路由器称为单向结点,否则称为双向结点.若两个结点由一条单向链路连接,则该单向链路的箭尾结点称为父结点,箭头结点称为子结点.
　　首先，我们将单向网络抽象成一个有向图.结点表示路由器,弧表示链路,弧上的权表示距离(时延或费用等).在本文中称这种表示网络的有向图为网络图.因为在计算机网络中，任意两个进行通信的主机一般都需要进行信息交互,也就是要求网络中任意两结点是相互可达的,所以不妨假定我们所讨论的网络图是强连通的.
　　我们将网络图中所有的结点分成两类:一类是双向结点,另一类是单向结点.一个单向结点,如果至少有一条单向链路以其作为箭尾结点,则称为单向出发结点.算法在每个单向结点上都维护着两个表.每个表都是由形如(node,distance,next-hop)的三元组所组成.三元组中的3个分量分别称为结点域、距离域和次结点域.设e是某结点上距离向量中的三元组,我们分别用node(e),dist(e)和next(e)表示三元组e的结点域、距离域和次结点域.一个表称为到达距离向量,另一个表称为出发距离向量.结点X上的到达距离向量记为IN(X),出发距离向量记为OUT(X).若(F,3,G)是结点A上所维护的到达距离向量,则它表示从F到A有一长度3的路径,在这条路径上，F是起点,与F紧邻的下一个结点为G.若(K,4,B)是结点A上所维护的出发距离向量中的一个三元组,则它表示从A到K有一长度4的路径,在这条路径上，A是起点,与A紧邻的下一个结点为B.各结点根据本结点上的出发距离向量来维护自己的路由表.
　　本文给出的路由算法通过相邻结点交换、比较距离向量来维护自己的距离向量.为此，我们给出相邻两个结点上两个同类型三元组之间的关系的概念.设G=(V,E,W)是一赋权有向图,它表示一个我们要讨论的单向网络.设(X,Y)∈E,即X是Y的父结点,(S,n,N)∈IN(X),(Q,m,M)∈IN(Y),或(S,n,N)∈OUT(X),(Q,m,M)∈OUT(Y),若S=Q,则称(Q,m,M)是与X结点上的三元组(S,n,N)对应的三元组.设(X,Y)∈E,(S,n,N)∈IN(X),(S,m,M)∈IN(Y),若n+1≤m,则称(S,n,N)优于或等价于Y结点上对应的三元组(S,n,M).设(X,Y)∈E,(T,n,N)∈OUT(X),(T,m,M)∈OUT(Y),如果m+1≤n,则称Y上的三元组(T,m,M)优于或等价于X上对应的三元组(T,n,N).为叙述简单起见,在我们的算法中，假定每条弧的权都为1.目前主要考虑两种单向网络:
　　(1) 有若干双向网络,这些双向网络是被一些单向链路互联起来的网络,本文称这样的网络为双向网络岛群，如图2所示.图中不含箭头的线段表示两条方向相反的弧.A1～A7,B1～B2,C1～C2是3个双向网络岛.

图2　双向网络群岛
　　(2) 网络中每条链路都是单向链路,称这样的网络为纯单向网络，如图3所示.

图3　纯单向网络
2 路由算法
2.1 纯单向网络的路由算法
　　算法1. 到达距离向量的建立.
　　(1) 定期向所有子结点发送自己的到达距离向量.
　　(2) 当收到父结点X的到达距离向量时,若本地结点的到达距离向量中无结点域为X的三元组,则加入(X,1,本地结点),计时器置零;否则将其修改为(X,1,本地结点),计时器清零.
　　(3) 收到父结点的到达距离向量时,对于它的每一个三元组都检查在本地结点上是否有与其对应的三元组.若无,则将其距离域的值加1后添进本地的到达距离向量,计时器置零.若有,则当父结点的三元组优于或等价于本地结点的三元组时,将父结点的三元组的距离域的值加1后取代本地结点中对应的三元组,计时器清零.
　　(4) 定期检查到达距离向量中的所有三元组,将它们计时器的值都加1,并将那些计时器的值超过阈值的三元组都删除.
　　(5) 若父结点送来的到达距离向量中包含本结点的三元组,且能从父结点的到达距离向量中找到本结点到这个父结点的路径,则通过源路径方式向父结点发送自己的出发距离向量.
　　步骤(4)是一个超时机制,它可使由于网络拓扑的变化已经不存在的路径被删除而代之以新的路径.表1～表3为图3所示的网络中结点是I,D,A上的到达距离向量.图4是根据A结点上的到达距离向量画出的各结点到A的路径.
表1　I结点的到达距离向量

NodeDist.Next
D11
G11
C2D
E2D
F2G
H2G
J3H
B3C
A4B
K4B


表2　D结点的到达距离向量

NodeDist.Next
C1D
E1D
B2C
A3B
K3B
I4A
G5I
F6C
H6G
J7H


表3　A结点的到达距离向量

NodeDist.Next
D1A
I1A
C2D
E2D
G2I
F3G
H3G
B3C
J4H
K4B

　　　　　
图4　结点A的到达路径
　　步骤(5)的依据是根据父结点的到达距离向量能够建立一个到父结点的路径,我们将在第3.1节给出它的证明.这里，我们以图3所示的网络为例来说明,其中假定每条弧的权(长度)为1.当A结点收到父结点D送来的到达距离向量(见表2)时,发现本地结点A到达D的距离为3,从而知道有A到D的长度为3的路径AX1X2D.并且，从表2中可以看出，A到D的路径上第2结点为B(因为有三元组(A,3,B),B是A在该路径上的相邻结点),即X1=B;第3结点为C(因为有三元组(B,2,C)),即X2=C;第4结点为D(因为有三元组(B,2,C)).从而知道A到D的路径为ABCD.
　　算法2. 出发距离向量的建立.
　　(1) 每当收到父结点送来的到达距离向量时,若能从中找到从本结点到父结点的路径,则通过源路径方式向父结点发送自己的出发距离向量.
　　(2) 当收到子结点X的出发距离向量时,若本地结点的出发距离向量中无结点域为X的三元组,则加入(X,1,X),计时器置零;否则，将其修改为(X,1,X),计时器清零.
　　(3) 当收到子结点的出发距离向量时,对于它的每一个三元组都检查在本地结点上是否有与其对应的三元组.若无，则将其距离域的值加1，次结点域改为该子结点后添进本地的到达距离向量中,计时器置零.若有,则当子结点的三元组优于或等价于本地结点的三元组时,将子结点的三元组的距离域的值加1，次结点域改为该子结点后取代本地结点中对应的三元组,计时器清零.
　　(4) 定期检查出发距离向量中的所有三元组,将它们的计时器都加1，并将那些计时器的值超过阈值的三元组都删除.
　　距离向量的修正　当一个结点或链路失效时,相应的子结点或链路的箭头结点在规定时间内收不到从相应的父结点或链路来的路由消息,从而使原来的距离向量中的某些三元组因超时被删除,取而代之的是根据其他结点送来的距离向量重新建立相应的新的三元组.下面以图3所示的网络中链路D→I出现故障时为例,说明A结点与I结点的距离向量中部分三元组重建的过程.
　　当D→I链路出现故障时,结点I不会再收到从D发来的定期的距离向量更新消息.在I结点上原来的到达距离向量中,包含了根据从D发送的距离向量建立的三元组(D,1,I),(C,2,D),(E,2,D)等,而原来从G发送来的距离向量只能推出(E,3,F),(C,4,E),(D,7,A)等，因此被忽略.这时,因为I在规定时间内未收到从D发送来的定期更新信息,到达距离向量中的三元组(D,1,L),(C,2,D),(E,2,D)因超时而被删除,取而代之的是根据从G发送来的到达距离向量而建立的有关结点D,C,E等的三元组.很快地,结点I上新的到达距离向量将被建立,如表4所示.
表4　I结点上无链路D→I时的到达距离向量

NodeDist.Next
G1I
F2G
H2G
J3F
E3H
C4E
B5C
A6B
K6B
D7A


2.2 双向网络群岛的路由算法
　　在双向网络群岛的结构中,单向结点和与之关联的单向链路是连接各岛的关键结点和链路.只要单向结点知道了它们之间的路径和距离,再将这些路由信息通告各自岛内结点就可以了.为此,我们首先将双向网络群岛的拓扑结构作一个简单的变换:在每个岛内只保留单向结点;岛内单向结点之间都用方向相反的两条链路相连,其距离为原两结点间的最短距离;原单向结点之间的链路与距离不变.例如,图2所示的双向网络群岛变换后如图5所示.我们将单向结点的路由工作分成两部分:与岛内双向结点之间的路由信息交换(采用原来岛内所用的路由协议)和与整个群岛中所有的单向结点之间的路由信息交换.一个岛内的所有单向结点参加同一个多目通信组,使得所有的单向结点能像在纯单向网络中执行路由算法1和算法2一样.在这个纯单向网络中,有一些单向链路就是双向网络群岛中的单向链路,在这些链路上,路由信息的传递方法不变.另一些单向链路在原双向网群岛中不存在(但它们之间存在一条链路),在这些链路上,传递信息利用岛内的多目通信的方式传递.即单向结点除了按向单向链路接口传递信息之外,还要利用多目通信的方法向岛内的单向结点传递路由信息.算法1和算法2略作修改后分别成为算法3和算法4.岛内的双向结点有两种方法能将信息送给岛外结点:一种是将岛内的一个出发单向结点设置为默认路由器,目标地址不在岛内则送给这个默认路由器;另一种是岛内单向结点将自己的出发距离向量通告给岛内的结点. 

图5
　　算法3. 到达距离向量的建立.
　　(1) 定期向所有子结点和单向路由信息组发送自己的到达距离向量.
　　(2)、(3)、(5)、(7)分别同算法1的(2)～(5).
　　(4) 当收到非父结点的岛内单向路由信息组的到达距离向量时,确定其发送者(设为X)到本地结点的距离(设为s);对于它的每一个三元组都检查在本地结点上是否有与其对应的三元组,若无，则将其距离域的值加s后添进本地的到达距离向量,计时器置零.若有,如果收到的距离向量中的三元组为(Z,t,Y),与之对应的三元组为(Z,u,W),并且t+s≤u,用(Z,t+s,Y)取代本地到达距离向量中的三元组(Z,u,W),计时器清零.
　　(6) 在双向网络群岛的网络中按源路径传递出发距离向量时,源路径只包含单向结点.如果在源路径中相邻的结点(例如图2中的A1和A3)在同一个岛内,而它们在这个岛内并不直接相邻,则前一个结点(例如A1)应根据自己的出发距离向量,将自己到下一结点在本岛内的路径(例如A1～A2～A3)添进源路径中自己和下一个结点之间,使得这两个单向结点之间的双向结点都能传递这个报文.
　　算法4. 出发距离向量的建立.
　　(1)～(3)、(5)分别同算法2的(1)～(4).
　　(4) 如果这个出发距离向量是从单向路由信息组来的,确定其发送者(设为X)到本地结点的距离(设为s),如果收到的出发距离向量中的三元组为(Z,t,Y),与之对应的本地的三元组为(Z,u,W),并且t+s≤u,用(Z,t+s,X)取代本地到达距离向量中的三元组(Z,u,W),计时器清零.
3 算法的性质与性能分析
3.1 算法的性质
　　性质1. 若X,Y是网络图中的两个结点,且存在从Y到X的路径,则存在e∈IN(X),使得node(e)=Y.
　　证明:性质是显然的,证明略.
　　性质2. 若X,Y是网络图中的两个结点,X是Y的父结点,且存在Y到X的路径,则Y可以找到Y到X的路径.
　　证明:用数学归纳法.因为X是Y的父结点,所以X会定期地向Y发送到达距离向量IN(X),Y能获得父结点X的最新的到达距离向量.因为存在Y到X的路径,由性质1,必存在e∈IN(X),使得node(e)=Y.若dist(e)=1,则结点Y必然得知Y就是X的父结点,所以可知自己到父结点的路径.归纳假设，当存在e∈IN(X),node(e)=Q,dist(e)=k时,Y能得知Q到X的路径.我们来证明当e∈IN(X),node(e)=Y,dist(e)=k+1时,Y能知道自己到父结点X的路径.记next(e)=Z,由三元组的意义可知，必有f∈IN(X),node(f)=Z,dist(f)=k.由归纳假定Y可以得知Z到X的路径,设为ZA1A2...Ak-1X,这样，Y可以进一步得知Y到X的路径为YZA1A2...Ak-1X.
　　性质3. 若网络图中两个结点X,Y是双向可达的,则存在e∈OUT(X)，使得node(e)=Y;存在f∈OUT(Y)，使得node(f)=X.
　　证明:设X到Y之间有一条路径XA1A2...AnY,Y到X之间有一条路径YB1B2...BnX.Y到其父结点An之间必有路径.由性质1,存在s∈IN(An)使得node(s)=Y; 由性质2,Y将得知Y到An的路径.根据算法2,Y将把自己的出发距离向量发送给An,所以An将在自己的出发距离向量中加入三元组(Y,1,Y),即存在t1∈OUT(An),使得node(t1)=Y.同理,An也会知道它到An-1的路径,将自己的包含三元组(Y,1,Y)的出发距离向量发送给An-1,这样,必存在t2∈OUT(An-1),使得node(t2)=Y,即An-1知道它到达Y的路径.依此类推,最终X将知道X到达A1,A2,...,An,Y的路径,即存在e∈OUT(X)，使得node(e)=Y.同理,可以证明存在f∈OUT(Y)，使得node(f)=X.
3.2 算法的模拟实验
3.2.1 纯单向网络的模拟
我们用C语言在PC机上用模拟的方法实现了路由算法1和算法2.通过对图3所示的单向网络和其他一些单向网络的实验，结果表明，各结点都能正确地建立距离向量.链路失败消息和链路恢复消息都能使各结点的距离向量得到正确的修正.
3.2.2 双向网络群岛的模拟
　　图1描述了休斯(Hughes)公司实现的一个“卫星信息传播与局部再分布”的原型系统［1］的示意图.在这个系统中,有一颗地球同步通信卫星和Internet上的一个固定站点作为卫星的上行站(uplink center);分布在不同地区的若干带有卫星接收天线和接收解码器的只接收卫星发送数据的微机移动站;移动站通过低轨道卫星电话系统，或蜂窝电话系统，或公用电话交换网，向Internet访问点IAP(internet access point)发送数据.移动站装备成只接收的卫星下行站,可以节省大量的费用.我们把这个原型系统抽象成如图2所示的双向网络群岛.其中A1结点是卫星的上行站;B1,C1都是卫星下行站,它们只从卫星单向链路接收数据.A2和A3是IAP.B2和C2用通常的双向链路分别与B1和C1相连.在如图2所示的网络中,假设在各岛上运行RIP或OSPF算法,A1作为默认的路由器.结果表明，每个单向结点上都能得到正确的距离向量.模拟实验表明，本文提出的路由算法在纯单向网络上和双向网络群岛上是完全可行的路由算法.
3.3 算法的性能分析与比较
　　本文提出的算法能在具有单向链路的网络中完成路由功能,是可适应网络拓扑结构变化的动态路由算法.本文提出的算法在每个结点上存储的主要包括到达距离向量和出发距离向量.存储量大约是现行Internet的利用距离向量机制的路由协议RIP的两倍.因为RIP只考虑链路的一个方向,而本文提出的算法要考虑链路的两个方向.本文提出的算法在建立出发距离向量时,路由信息都是用源路径法传递,不必采用任何洪泛机制,报文传送的范围和容量都很小,因而路由信息量要少.与基于“隧道”机制的方法相比,本文提出的算法不需要固定的“隧道”,因而能适应网络拓扑结构的变化.与基于寻找闭路机制［11］的方法相比,本文提出的算法不必存储闭路,因而没有冗余信息.
4 结 论
　　本文研究了单向链路网络,给出了一个距离向量型的路由算法.从理论证明和模拟实验都表明算法是可行的.这方面的工作方兴未艾,还有许多的工作要做,比如多目传送的路由问题.完整协议的制定与实现还需要做大量的研究工作.
*　本文研究得到国家攀登计划基金资助.
作者简介　黄浩,1957年生,博士生，副教授,主要研究领域为计算机网络.
　　　　　吴礼发,1968年生,博士生,主要研究领域为计算机网络.
　　　　　陈道蓄,1947年生,教授,主要研究领域为分布式计算与并行计算.
　　　　　谢立,1942年生,教授,博士生导师,主要研究领域为分布式计算和并行处理.
　　　　　孙钟秀,1936年生,教授,博士生导师,中国科学院院士,主要研究领域为分布式系统.
本文通讯联系人:黄浩,南京 210093,南京大学计算机科学与技术系
作者单位：南京大学计算机软件新技术国家重点实验室 南京 210093　　南京大学计算机科学与技术系 南京 210093
参考文献
　1　Zhang Yong-guang, Dao S. Integrating direct broadcast satellite with wireless local access. In: Proceedings of the 1st International Workshop on Satellite-based Information Services. New York: Rye, 1996. 24～29
　2　Maldin G. RIP version 2 carrying additional information. RFC 1388, January 1993
　3　Moy J. OSPF version 2. RFC 1583, March 1994
　4　Moy J. Multicast extensions to OSPF. RFC 1584, March 1994
　5　Rekhter Y, Li T. A border gateway protocol 4. RFC 1771, March 1995
　6　Deering S. Host extensions for IP multicasting. RFC 1112, August 1989
　7　Izumiyama H, Tosaka A. An IP tunneling approach for unidirectional link routing. Internet-Draft, July 1997
　8　Duros E, Chuitema. Handling of unidirectional links with RIP. Internet-Draft, March 1996
　9　Duros E, Dabbous W. Handling of unidirectional links with DVMP. Internet-Draft, March 1996
　10　Duros E. Handling of unidirectional links with OSPF. Internet-Draft, 1996
　11　Ernst T. Dynamic routing in networks with unidirectional links［MS. Thesis］. University of Nice-Sophia-Antipolis, France, 1997
本文1997-11-20收到原稿,1998-06-30收到修改稿
