吴许俊,朱长水,王 巍
(南京理工大学 泰州科技学院,江苏 泰州 225300)
20世纪90年代IETF制定的IPv6协议经过多年的研究和实践,已经形成了完善的协议体系[1]。与IPv4路由协议相同,IPv6路由协议也分为域内路由协议和域间路由协议,如OSPFv3、RIPng和 IS-ISv6适用于自治系统(AS)内部路由,称为内部网关协议(IGP);而BGP4+用于自治系统之间交换网络可达信息,称为外部网关协议(EGP)。OSPF由于其优异的性能,已经成为应用最广泛的内部网关协议之一。目前我国CNGI-CERNET2核心网和驻地网建设已取得重大进展,而IPv6校园网的建设进程缓慢,为促进IPv6网络建设,本文开展OSPFv3路由协议的研究和组网仿真实验[2]。
为实现大型、异构网络互联,20世纪80年代末IETF的内部网关协议工作组开发了链路状态路由协议OSPF,OSPF版本3专用于IPv6网络。
OSPF是一种基于区域实现的,建立在链路状态(link state)算法和最短路径优先(SPF)算法(也称Dijkstra算法)基础之上的内部网关动态路由协议[3]。每个运行OSPF路由协议的路由器都维护一个用于记录网络链路状态的链路状态数据库(LSDB)。LSDB的每一条记录称为链路状态通告(LSA)。LSA用于描述网络拓扑结构中每一条链路的相关信息,包括接口描述符(链路编号)、链路状态等信息。LSA包含在链路状态更新(LSU)报文中传播。路由器通过LSU报文和其他路由器交换LSA,对LSDB进行更新和维护。因此,LSDB实际上就是一张反映当前区域的完整的网络拓扑结构图。根据LSDB中的LSA,路由器利用SPF算法计算达到其他路由器的最短路径路由,构造自己的路由表。通过LSA的交换过程,相同区域内所有路由器的LSDB保持同步,并最终形成对网络拓扑结构的一致视图。
为适应大规模网络,OSPF将AS划分为若干个具有层次结构的范围较小的区域(area),给每个区域命名一个32位的编号。主干区域 (backbone area)使用自治系统边界路由器(ASBR)跟其他AS互联,使用区域边界路由器(ABR)连接其他普通区域。不同区域内的OSPF路由器根据本区域的链路状态生成LSDB,构造自己的路由表,不了解其他区域的网络拓扑结构。每个区域内的链路状态广播也不会泛洪(flood)到AS其他区域。
OSPF依靠邻接协议、交换协议和扩散协议来完成OSPF分组的交换过程,并最终实现同一路由区域中所有路由器的LSDB同步。
1)邻接协议:检测链路是否可用,在广播型网络与非广播型网络上选举指派路由器(DR)和备份指派路由器(BDR),并通过这种方式使两台路由器之间建立邻居关系。
2)交换协议:当两个路由器通过邻接协议建立双向连接后,就会立即通过交换协议来完成双方链路数据状态数据库的同步过程。
3)扩散协议:为了减少不必要的流量,交换协议发送的只是一些数据库描述包,真正的链路状态通告包是通过扩散协议发送的。
OSPF路由器之间相互交换的信息采用为IP数据报传送,共有五种分组类型:
1)问候(Hello)分组,用来发现和维持邻站关系。
2)数据库描述(Database Description,DD)分组,用来向邻站描述自己链路状态数据库中的链路状态项目的摘要信息。
3)链路状态请求(Link State Request,LSR)分组,用来向邻站请求发送某些链路状态项目的详细信息。
4)链路状态更新(Link State Update,LSU)分组,用可靠泛洪法向全网更新链路状态。
5)链路状态确认(Link State Acknowledgement,LSAck)分组,用来确认邻站的链路状态更新。
相邻路由器之间通过交换OSPF分组建立近邻关系,其基本操作过程如图1所示。
图1 近邻关系的建立过程Fig.1 Establishing process of neighbor relationship
在OSPF中,各个网络节点不必交换整个路由表,而只需维护一张网络图。OSPF有自己的网络拓扑结构,自己提炼信息,从而知道到达各个目的地的最短路径树,生成路由表(所有工作都由OSPF本身完成,不依靠邻居),不会出现如路由信息协议(RIP)的中间环路累加到无穷的问题。
OSPFv3是一个动态路由协议,采用了模块化的设计思想[4],其功能模块关系如图2所示。
图2 OSPFv3功能模块划分及其关系示意图Fig.2 OSPFv3 function modules division and their relationship diagram
1)全局模块:主要用一个全局结构(数据结构)来完成OSPFv3有关全局参数 (如版本号、域列表、实例ID、LSDB等)的配置与管理。
2)域模块:主要完成区域的创建、查找、删除和显示等操作,及域中数据成员的管理。
3)LSDB模块:包括域范围LSDB和AS范围LSDB,主要完成LSA的增加、查找、删除、显示以及统计等操作,并且完成向链路状态数据库添加LSA时所发生的路由表的操作。
4)LSA模块:主要完成OSPFv3中各种LSA的生成。
5)接口模块和接口状态机模块:负责实现路由器接口的管理和接口状态的转移。
6)邻居模块和邻居状态机模块,负责实现路由器邻居的管理和邻居状态的转移。
7)消息发送和接受模块:负责OSPFv3各种分组的发送和接受。
8)数据库交互模块:该模块是OSPFv3协议得以实现的基础,主要是通过泛洪机制来实现同一区域OSPFv3路由器的LSDB的一致。
9)路由处理模块:该模块是OSPFv3路由算法的核心,主要负责在LSDB的基础上进行路由计算,建立和更新OSPFv3路由表,以及输入外部路由。
10)公共功能模块接口:主要负责OSPFv3和路由器的其他进程的接口工作。
OSPFv3继承OSPF最基本的工作机制,如区域划分、DR选取、可靠泛洪、SPF算法等。相对于OSPFv2,OSPFv3已经有了很多新的功能,主要体现在以下几个方面。
基于 “开发一种独立于任何具体网络层的路由协议”,OSPFv3改进之处有:
1)OSPFv3分组的目的地址是链路本地地址而非全球单播地址,使得交换OSPFv3路由信息的路由器之间可以不受子网限制。
2)OSPFv3路由信息被重新设计,表现在全球单播地址不用作OSPFv3分组的源和目的地址,LSA头部不含有地址信息;路由器LSA和网络LSA不含有任何网络地址信息,只描述网络拓扑结构;只能使用路由器ID而非路由器地址来标识或查找邻居路由器;采用域内前缀LSA计算域内路由的地址信息。
OSPFv3增加了24种可选功能,如多播OSPF等,以实现通用性。
通过利用IPv6包的安全头AH,OSPFv3消息可以被认证和加密;在同一链路上可以运行OSPF的多个实例;提供对多宿主机的支持。
使用思科模拟器GNS3结合思科路由器IOS开展仿真实验[6],模拟实现OSPFv3组网的主区域互联、多区域互联和虚连接的几种典型场景。
主干区域内的所有主干路由器相互之间必须保持连通。实验拓扑结构如图3所示,具体配置省略,仅给出关键路由表。
图3 OSPFv3主干区域互联Fig.3 OSPFv3 backbone area interconnection
路由器R1的路由表如下:
R1#show ipv6 route
IPv6 Routing Table-6 entries
Codes:C-Connected, L-Local, S-Static, R-RIP, B-BGP
U-Per-user Static route
I1-ISIS L1, I2-ISIS L2, IA-ISIS interarea, IS-ISIS summary
O-OSPF intra, OI-OSPF inter, OE1-OSPF ext 1,OE2-OSPF ext 2
ON1-OSPF NSSA ext 1,ON2-OSPF NSSA ext 2
LC 2001::1/128[0/0]
via::,Loopback0
C 2002::/64[0/0]
via::,FastEthernet0/0
L 2002::1/128[0/0]
via::,FastEthernet0/0
O 2003::1/128[110/10]
via FE80::C201:7FF:FE98:0,FastEthernet0/0
L FE80::/10[0/0]
via::,Null0
L FF00::/8[0/0]
via::,Null0
主干路由器R1的路由表经过链路状态请求、更新已经同步到达存根区域主机的路由(域内路由)。
主干区域是一个特殊的区域,负责在区域之间分发路由信息。所有普通区域都要和主干区域相连,普通区域之间不能直接而必须通过主干区域才可以进行路由信息交互。实验拓扑结构如图4所示,具体配置省略,仅给出关键路由表。
图4 OSPFv3主干区域与普通区域互联Fig.4 OSPFv3 backbone area and common area interconnection
路由器R1的路由表如下:R1#show ipv6 route
IPv6 Routing Table-7 entries
Codes:C-Connected, L-Local, S-Static, R-RIP, B-BGP
U-Per-user Static route
I1-ISIS L1, I2-ISIS L2, IA-ISIS interarea, IS-ISIS summary
O-OSPF intra, OI-OSPF inter, OE1-OSPF ext 1,OE2-OSPF ext 2
ON1-OSPF NSSA ext 1,ON2-OSPF NSSA ext 2
LC 1::1/128[0/0]
via::,Loopback0
OI 2::1/128[110/2]
via FE80::CE02:AFF:FE74:0,FastEthernet0/0
C 10::/64[0/0]
via::,FastEthernet0/0
L 10::1/128[0/0]
via::,FastEthernet0/0
OI 20::/64[110/2]
via FE80::CE02:AFF:FE74:0,FastEthernet0/0
L FE80::/10[0/0]
via::,Null0
L FF00::/8[0/0]
via::,Null0
路由器R3的路由表如下:
R3#show ipv6 route
IPv6 Routing Table-7 entries
Codes:C-Connected,L-Local,S-Static,R-RIP,B-BGP
U-Per-user Static route
I1-ISIS L1,I2-ISIS L2,IA-ISIS interarea,IS-ISIS summary
O-OSPF intra,OI-OSPF inter,OE1-OSPF ext 1,OE2-OSPF ext 2
ON1-OSPF NSSA ext 1,ON2-OSPF NSSA ext 2
OI 1::1/128[110/2]
via FE80::CE01:2FF:FE98:1,FastEthernet0/0
LC 2::1/128[0/0]
via::,Loopback0
OI 10::/64[110/2]
via FE80::CE01:2FF:FE98:1,FastEthernet0/0
C 20::/64[0/0]
via::,FastEthernet0/0
L 20::2/128[0/0]
via::,FastEthernet0/0
L FE80::/10[0/0]
via::,Null0
L FF00::/8[0/0]
via::,Null0
经过链路状态请求和更新,主干区域边界路由器R1的路由表已经同步普通区域的路由(域间路由),普通区域边界路由器R3的路由表也已经同步到主干区域的路由 (域间路由)。主干区域的网络拓扑对所有的区域边界路由器都是可见的。
很多情况下一个普通区域未必和主干区域存在直接的物理连接,此时普通区域和主干区域之间需要建立一条逻辑上相连的通道,即虚连接(virtual link)。实验拓扑结构如图5所示,具体配置省略,仅给出关键路由表。普通区域2的边界路由器R3与主干区域最近的边界路由器R2经过传输区(非主干区域Area 1)建立一条逻辑链路。
路由器R1的路由表如下:
R1#show ipv6 route
IPv6 Routing Table-10 entries
Codes:C-Connected,L-Local,S-Static,R-RIP,B-BGP
U-Per-user Static route
I1-ISIS L1,I2-ISIS L2,IA-ISIS interarea,IS-ISIS summary
O-OSPF intra,OI-OSPF inter,OE1-OSPF ext 1,OE2-OSPF ext 2
ON1-OSPF NSSA ext 1,ON2-OSPF NSSA ext 2
LC 1::1/128[0/0]
via::,Loopback0
OI 4::1/128[110/30]
via FE80::C201:8FF:FE44:0,FastEthernet0/0
C 10::/64[0/0]
via::,FastEthernet0/0
L 10::1/128[0/0]
via::,FastEthernet0/0
OI 10::2/128[110/10]
via FE80::C201:8FF:FE44:0,FastEthernet0/0
OI 20::/64[110/20]
via FE80::C201:8FF:FE44:0,FastEthernet0/0
OI 30::/64[110/30]
via FE80::C201:8FF:FE44:0,FastEthernet0/0
OI 30::1/128[110/20]
via FE80::C201:8FF:FE44:0,FastEthernet0/0
L FE80::/10[0/0]
via::,Null0
L FF00::/8[0/0]
via::,Null0
路由器R4的路由表如下:
R4#show ipv route
IPv6 Routing Table-10 entries
Codes:C-Connected,L-Local,S-Static,R-RIP,B-BGP
U-Per-user Static route
I1-ISIS L1,I2-ISIS L2,IA-ISIS interarea,IS-ISIS summary
O-OSPF intra,OI-OSPF inter,OE1-OSPF ext 1,OE2-OSPF ext 2
ON1-OSPF NSSA ext 1,ON2-OSPF NSSA ext 2
OI 1::1/128[110/30]
via FE80::C202:8FF:FE44:1,FastEthernet0/0
LC 4::1/128[0/0]
via::,Loopback0
OI 10::/64[110/30]
图5 OSPFv3主干区域与非邻区域使用虚连接互联Fig.5 OSPFv3 backbone area and the adjacent area using virtual interconnect
via FE80::C202:8FF:FE44:1,FastEthernet0/0
OI 10::2/128[110/20]
via FE80::C202:8FF:FE44:1,FastEthernet0/0
OI 20::/64[110/20]
via FE80::C202:8FF:FE44:1,FastEthernet0/0
C 30::/64[0/0]
via::,FastEthernet0/0
OI 30::1/128[110/10]
via FE80::C202:8FF:FE44:1,FastEthernet0/0
L 30::2/128[0/0]
via::,FastEthernet0/0
L FE80::/10[0/0]
via::,Null0
L FF00::/8[0/0]
via::,Null0
经过链路状态请求与更新过程,主干路由器和普通区域的边界路由器的路由表均已经同步到达整个自治系统所有区域网络的路由(包括域内路由和域间路由)。此时,普通区域2与主干区域之间存在的虚拟链路也成为主干区域的一条逻辑链路,同时边界路由器R3也加入了主干区域而成为一台主干区域的边界路由器。
OSPFv3作为组建下一代互联网首选的内部网关动态路由协议,具有优异的路由性能。基于课题作者深入研究了OSPFv3路由协议的相关理论并开展了一系列仿真实验,获得丰富的实验结果,并成功将其应用到IPv6校园网建设中。今后,我们将继续深入研究OSPFv3路由协议的传输容量和服务质量QoS。
[1]Deering S,Hinden R.RFC 2460.Internet Protocol, Version 6(IPv6) Specification[S].1998.
[2]Ferguson D,Moy J.RFC 2740.OSPF for IPv6.R.Coltun[S].December 1999.
[3]RFC 2328.OSPF version 2.J.Moy[S].1998.
[4]张宏科,苏伟.IPv6路由协议原理和技术[M].北京:北京邮电大学出版社,2006.
[5]王宇杰,王锋.OSPFv3及其在高校下一代校园网建设中的应用[J].计算机应用,2002 (5):72-73.WANG Yu-jie,WANG Feng.OSPFv3 and its application in the next-generation campus network construction[J].Journal of Computer Applications,2002(5):72-73.
[6]黄瑜岳,梁伟.基于IPv6的OSPFv3协议的研究和实现[J].常熟理工学院报,2006(7):109-112.HUANG Yu-yue,LIANG Wei.Research and realization of OSPFv3 protocol based on IPv6[J].Journal of Changshu Institute of Technology,2006(7):109-112.