彭伟刚 徐彬辉 南京邮电学院
[摘要] 为了解决移动节点的移动性问题,曾经提出过特定主机路由技术、源路由技术和隧道技术三种解决方案,本文通过对这三种技术方案的对比,阐述了采用隧道技术来解决移动性问题的原因,并对移动IP中使用的三种隧道技术即IP的IP封装,最小封装和通用路由封装作了简要的介绍。
因特网和移动通信的逐步融合突破时间和空间的限制让人们随时随地接入因特网,是个人通信的神圣目标,而移动IP技术正是实现这一目标的技术之一。移动IP提供了一种有效的、可扩展的机制来解决因特网内的节点移动性问题,即利用移动IP技术你可以在移动的过程中不用重新启动计算机,无需重新配置系统,就可以随时随地接入因特网,甚至不要中断你当前的通信连接,这也正是移动IP的优势所在。
1 问题的提出
移动数据网是固定IP网络的无线扩展,当前的移动数据网都提供了移动性管理机制,使得移动节点可以在移动的过程中接入因特网并保持其原有的通信连接。但是,由于移动数据网制式的不同,提供的移动性解决方案也不同,他们之间都是不兼容的,这对未来移动数据网络的融合是不利的,因而需要一种统一的移动性管理方案,以方便网络之间的互通,实现真正的网络之间的无缝漫游,这就促成了移动IP技术的产生。
移动IP的首要目标就是解决节点的移动性问题。传统的IP选路机理只适用固定主机的路由管理,而移动节点的路由是一种动态路由,因此,移动数据网中的移动性管理必须具备对移动节点动态路上的管理机制。为此先后提出了三种方案:特定主机路由技术、源路由技术和隧道技术,来解决移动节点的移动性问题。
2 解决移动性的三种方案
2.1 解决移动性的方案
特定主机路由技术是相对于现有的IP网络中的网络前缀路由而言的,它在路由器中为每一个主机建立一个路由表项,根据每一个特定主机的IP地址对数据包进行选路。移动IP使用特定主机路由技术解决移动节点的移动性,至少要在移动节点的家乡网络到移动节点拜访的外地网络之间所有的路由器上建立特定主机路由。
源路由技术使用了在IP头中定义的一个可选项:Loose Source and Record Route。这个可选项中列出了一个或者多个中间目的地址,要求数据包在到达最终目的地址之前必须经过这些中间地址。移动节点要发送一个数据包给通信对端时需要在数据包给通信对端时需要在数据包的Loose Source and Record Route中加入自己目前所连接的外地网络的路由器的地址,接收方接收到该数据包后将Loose Source and Record Route选项中的中间地址取出,并按照其相反的方向将数据包按照移动节点选定的路由送往移动节点。
隧道是一个数据包封装在另一个数据包的净荷中进行传送时所经过的路径。采用隧道技术将发送给移动节点的数据包封装后转发到一个中间节点,然后由此中间节点解封后再将恢复出来的原始数据包转发到移动节点。在一个隧道中涉及到2个实体:封装节点和解封节点,通常将封装节点称为隧道的入口,解封节点称为隧道的出口。在移动I宫隧道的入口是移动节点的家乡代理,出口是移动节点的转交地址。任何一个节点只要知道移动节点的家乡地址就可以和它建立通信连接。移动节点更换了位置以后只要通过注册机制将移动节点的转交地址通知了家乡代理以后,家乡代理就可以通过隧道将发送给移动节点的数据包转发到移动节点的转交地址,进而转发到移动节点。
2.2 三种方案的比较
使用特定主机路由的突出缺点就是需要发送大量的路由信息。特定主机路由的数量取决于移动节点的家乡链路到移动节点拜访的外地网络之间的路由器的数目,这些路由器通常可以达到数百个。因而每一个移动节点在移动位置后至少要向数百个节点发送特定主机路由。而且,移动节点往往需要经常改变其接入因特网的位置,切换链路以后必须要发送路由更新消息。在最坏的情况下,每一次改变链路移动节点原先路径上的特定主机路由。如果链路的切换很频繁,因特网的带宽将被这些路由更新信息消耗掉。而使用隧道技术则只需改变隧道入口和隧道出口这两个路由器的路由表项就可以了,因而远远少于特定主机路由下的路由信息。当移动节点的接入位置发生变化时同样只要更新这两个节点上的路由信息就可以了,而不用对移动节点的家乡链路到拜访的外地链路之间的所有路由器都发送路由更新消息,从而有效地减少了因特网上的路由更新消息的数量。
使用源路由技术时IP数据包需要因特网上所有路由器都进行额外的处理,即每一台转发数据包的路由器都要判断自己的IP地址是不是该数据包的一个中间地址,然后进行相应的处理。实践表明,对经过的数据包的处理相对于转发而言速度上相差一个数量级,这样的性能恶化是不能忍受的,而且出于安全性的考虑防火墙可能会拒绝使用IP源路由选项的数据包。而采用隧道技术,发往移动节点的数据包在家乡代理封装以后送入隧道,在整个隧道的传输过程中按照现有的IP路由机制对该数据包进行选路,沿途路由器不需要任何的附加的处理开销,只要在隧道的出口处对数据包进行拆封和转发,就可以有效地提高数据包的转发速度。
采用隧道技术,将发给移动节点的数据包封装后的新的IP包在因特网的传送过程中被当作普通的IP数据包,只要在要提供移动IP功能的节点上增加数据包的封装和解封功能就可以将数据包转发给移动节点,不提供移动IP功能的节点则不需要做任何的改动,因而可以实现在现有的IP网络上的平滑的升级。采用隧道技术对处于外地网络的节点提供数据包的路由机制,使得无论移动节点位于什么位置都可以使用其在家乡网络的IP地址来发送和接收数据包。从而实现了动态的路由管理,解决了移动节点的移动性问题。
3 移动IP中使用的隧道技术
目前移动IP中定义了3种隧道技术,即IP的IP封装、最小封装和通用路由封装(GRE)。
3.1 IP的IP封装
IP的IP封装是一种最简单的隧道技术,也是提供移动IP功能的节点必须实现的一种封装机制。IP的IP封装就是将一个IP数据包作为另外一个IP数据包的净荷,从而形成具有两个IP报头的新的数据包。
在IP的IP封装机制下作为净荷的原始IP数据包不需要做任何的改动,只要对新的IP报头按照现有的IP协议做适当的设置就可以了。大部分的设置可以从原努数据包拷贝而得,比如版本ver、服务类型TOS等。源地址和目的地址分别设置为隧道的入口和出口点,即入口设为移动节点的家乡代理的地址,出口设为移动节点的转交地址,可以是外地代理转交地址也可以是配置转交地址。因特网的报头长度IHL、总长度和校验和都要根据新的IP包来进行重新计算。标记域设置为一个唯一的值,标识域和片偏移域要根据是否对原始数据包进行了分片而设置。协议类型域设置为4表示新的数据包的净荷仍然是IP数据包。设置一个合适的生存时间,以保证数据包可以到达隧道的出口。在隧道的出口接收到封装过的数据包后,将外层IP包头剥除后恢复出原始数据包。
封装中要特别注意的问题是防止递归封装,在防止递归封装的处理方法上IP的IP封装和下面要介绍的最小封装采用了相同的机制,在这里一并介绍。递归封装是这样一个过程,由于路由的循环使得数据包在离开隧道之前又重新进入了这个隧道,即数据包在职一个隧道中兜圈子。这样每次封装都会在数据包外加封一个报头,每个报头又都有自己的生存时间,数据包越来越大,并且不停的在网络内部循环,永远都出不了隧道,在网络内部造成虚假流量。可以以通过两种方法来判断数据包是否已经封装过。第一种方法是判断要进行封装的IP数据包的源IP地址是否和隧道入口的地址(即家乡代理的IP地址)相同,若相同则认为数据包已经被封装过,此时丢弃接收到的数据包;第二种方法是如果要进行封装的数据包的源IP地址与隧道入口处路由表指示的隧道出口地址系统,则认为出现了递归封装,丢弃该分组。如果不是这两种情况则认为没有出现递归封装。
3.2 最小封装
最小封装是对IP的IP封装的改进,其设计思想是对IP的IP封装进行压缩,即压缩掉原始IP报头和新的报头共有的冗余部分来提高封装的效率。其余现方法是在原始数据包的报头和净荷之间插入最小转发报头,并对原努数据包的报头做最适当的改动。最小转发头的作用是存储原始理由信息,原始数据包的IP头设置为在隧道中传输的路由信息。
首先,在原始IP包的净荷和报头之间加入最小转发报头。最小转发报头的协议类型域存储原始数据包的协议类型。原始目的地址存储原始数据包中的目的地址。原始源地址根据其存在与否设置,若不存在则S设置为0,此时最小转发头的长度是8字节,设置为1表示原始源地址存在,此时最小转发头的长度是12字节,原始源地址域设置为原始数据包的源地址。头校验和是对最小转发头的样验,不包含IP报头和IP净荷。
其次,对原始IP报头作如下改动:协议类型改为55,表示新的数据包的净荷是经过最小封装的数据包。源地址和目的地址分别设置为隧道的入口和出口,即家乡代理的IP地址和移动节点的转交地址。因特网报头长IHL、总长度和校验和由新的数据包计算得到,总长度比原始数据包的长度增加8或者12个字节,这取决与原始源地址是否存在。
在隧道的出口处要去掉最小转发头,从最小转发头中恢复出原始数据包的路由信息,然后把该数据包转发给移动节点。
3.3 通用路由封装
通用路由封装(GRE)不仅支持IP协议,而且还支持其他类型的网络层协议,它允许任何一种协议的数据包作为净荷封装在任何其他一种协议的数据包中。
在进行多协议封装时将要封装在其他协议数据包中作为净荷的数据包被称为净荷包,封装其他数据包的外层数据包被称为传送包。按照通常的封装机制,如果M种不同协议的净荷包里封装在N种传送包中要有MXN中的转换协议来处理这种封装,在通用路由封装中则将M种净荷包封装进GRE中,然后再把GRE封装到传送包中,这种只需要M+N种转换协议来处理这种封装。
通用路由封装的GRE头中的大部分内容是可选的,其中包含了校验和、偏移、密钥、序号和路由等可选项。这些可选项通过GRE头的前2个字节的标记和版本域来定义。C是校验和存在指定比特,R是路由存在指示比特,K是密钥存在指示比特,S是序列号存在指示比特,s是严格源路由指示比特。如果这些位设置为1表示相应的可选项存在。版本号必须置为0。
协方类型指示净荷包的协议类型,根据实际情况填写,如0x800表示IP数据包:偏移域用来指示从路由域的开始到活跃源路由项的第一个字节的偏移量;校验是对GRE头和净荷包的校验;密钥域是由隧道入口加入的一个4个字节的数字,接收方可以据此来认证发送者;接收方可以根据序列号来判断发送方发送数据包的顺序;路由域包含了源路由项的列表。
Recur是递归封装控制域,这是一个有别于前两种封装机制的特别之处,在GRE封装中通过这个域来对递归封装进行控制。每次进行封装前,都要检查一下这个域的取值,如果是0就不进行封装将数据包丢弃,如果是非0值就对其进行GRE封装,封装后的Recur要减去1,直到为0为止。在GRE封装后一般把该域设置为0,即不允许进行递归封装。这种防止递归封装的机制也用在了IPv6中。
3.4 三种隧道技术的比较
IP的IP封装是最简单的,也是移动IP中要求必须实现的隧道技术。IP的IP封装无论是否对原始数据包进行了分片都可以应用,而最小封装只能应用于没有进行IP分片的数据包。IP的IP封装相当于最小封装来说花费的开销更大,IP的IP封装是增加20比特或者12比特,其效率更高。但是最小封装是通过对改造过的原始数据包的IP头来进行选路的,这样每经过一个路由器它的生存时间都要减少,这样数据包不能到达隧道出口的概率大大增加,要谨慎使用。通用路由封装是效率最差的,它除了要在原始数据包前加一个GRE头以外,还要再加一个新的IP报头,但是GRE可以支持多种协议的封装,在这种情况下IP的IP封装和最小封装就无能为力了。而且在处理多种协议的封装时GRE采用了牺牲效率来减少复杂性的方法,特别适合于多种协议之间的封装,而且其特有的防止递归封装的机制也很有吸引力。三种隧道技术各有优势,在实际的应用中可以根据不同的应用情况作出选择。
4 结论
相对于特定主机路由技术和源路由技术而言,使用隧道技术很好地解决了移动节点的移动性问题,使得移动节点在改变了位置时可以不改变其IP地址,只通过家乡地址就可以接入因特网。
摘自《移动通信》2002年第7期