王 文 龙
(喀什大学 计算机科学与技术学院,新疆 喀什 844008)
网络中的路由器通过路由选择协议进行路由选择,其核心是路由选择算法。路由选择协议依据作用范围分为内部网关协议(IGP)和外部网关协议(EGP),而内部网关协议中,RIP和OSPF是广泛使用的协议。而RIP的最大度量值为15跳,从而限定了使用RIP的网络的大小,一般只适用于小型网络,对于中型网络都难以满足。因此,为弥补RIP的不足,改善其在网络扩展方面的严重不足,OSPF使用链路状态及路径开销(cost)作为路由选择算法的基础,没有限制跳数,所以从理论上说,OSPF适用于所有规模的网络[1]。
对于OSPF路由问题,已经有了一些研究[2-17],有一定的局限性。为对OSPF路由有较深入的研究,本文在Cisco Packet Tracer和GNS3仿真环境下,设计简单的网络拓扑,对单区域OSPF和多区域0SPF等OSPF路由进行设计、配置,并通过抓包分析路由选择情况,以期对路由器使用OSPF进行路由选择进行较深入的分析研究,并能应用到实践中。
开放式最短路径优先协议(Open Shortest Path First,OSPF)是内部网关协议中最流行、应用最广泛的一种路由协议,它是一种分层的、基于链路状态的路由选择协议,克服了RIP协议和其他基于距离向量的路由选择协议的缺点。OSPF路由计算的一般过程:
(1) 路由器间通过发送hello报文确定邻居关系,然后通过交换LSA(链路状态通告)达到邻居路由器间的LSDB(链路状态数据库)同步,从而建立邻接关系;
(2) 区域中每个网段的路由器通过洪泛法进行hello报文的交互,选举本网段的DR(指定路由器)/BDR(备用指定路由器),本网段中每个路由器将自身的LSA发给所在网段的DR/BDR,再由DR/BDR将LSA以组播的方式发给网段中所有的非DR/BDR路由器;
(3) 当路由器初始化或网络结构发生变化时,路由器采用洪泛法在区域中交换LSA,用来交换链路状态数据并更新自己的数据库,直至达到稳定;
(4) 当网络稳定下来,即OSPF收敛后,每个路由器根据自身的链路状态数据库的信息,采用SPF(最短路径优先)算法计算并创建路由表(包括到达每个可以到达目的地的Cost(开销)及到达该目的地所要转发的下一个路由器(next-hop));
(5) 当网络链路状态动态变化时,路由器需要通过上面的过程进行通告,并维护自身的路由信息,若链路状态未发生变化,每隔30 min进行自动更新路由信息。
在Cisco Packet Tracer下,构建如图1所示网络拓扑及配置。为R1、R2配置OSPF路由,主要的配置步骤和结果如下:
R1(config)#route ospf 1
R1(config-router)#network 192.168.1.0 0.0.0.255 area 1
R1(config-router)#newwork 202.1.1.0 0.0.0.255 area 1
R2(config)#route ospf 1
R2(config-router)#network 192.168.2.0 0.0.0.255 area 1
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R1#show ip route
O 192.168.2.0/24 [110/2] via 202.1.1.2, 00:01:25, FastEthernet0/0
R2#show ip route
O 192.168.1.0/24 [110/2] via 202.1.1.1, 00:01:35, FastEthernet0/0
图1 单区域OSPF网络拓扑图
此时R1的路由表中有一条到达192.168.2.0/24网络的cost为2、下一跳为202.1.1.2的OSPF路由,R2的路由表中有一条到达192.168.1.0/24网络的cost为2、下一跳为202.1.1.1的OSPF路由。此时由PC1pingPC2:
PC>ping 192.168.2.2
Reply from 192.168.2.2: bytes=32 time=0ms TTL=126
对ping进行抓包分析:PC1发出的封装了ICMP的IP包到达路由器R1后,R1转发给R2,R2转发给PC2,PC2将响应包转发给R2,R2将响应包转发给R1,R1将响应包转发给PC1,使得PC1 ping通PC2。
接下来进行抓包分析,R1和R2会定期(每隔10 s)发送hello包,该包封装在IP包中,随后封装到Ethernet II帧中进行发送。当网络稳定下来,即网络收敛下来后,查看R1发给R2的hello包的Inbound PDU Details信息,主要内容如表1所示,而R2发给R1的hello包主要内容如表2所示。
从表1看出,R1发给R2的hello包,主要向R2通告了R1的RID为202.1.1.1,所属的AREA ID为0.0.0.1(即1),R1的f0/0端口所在的网段202.1.1.0/24的DR为202.1.1.2,BDR为202.1.1.1,R1的邻居路由器的RID为202.1.1.2。表2的含义与表1类似,不再赘述。
表1R1发给R2的hello包表2R2发给R2的hello包
ROUTERID:202.1.1.1ROUTERID:202.1.1.2AREAID:0.0.0.1AREAID:0.0.0.1DESIGNATEDROUTER:202.1.1.2DESIGNATEDROUTER:202.1.1.2BACKUPDESIGNATEDROUT⁃ER:202.1.1.1BACKUPDESIGNATEDROUTER:202.1.1.1NEIGHBOR:202.1.1.2NEIGHBOR:202.1.1.1
另外,需要注意,当OSPF的hello包封装到IP包中时,目的地址并非是路由器的接口地址,而是组播地址。具体的,R1发送的封装hello包的IP包的主要内容见表3,R2发送的封装hello包的IP包的主要内容见表4。
表3R1发送的IP包表4R2发送的IP包
SRCIP:202.1.1.1SRCIP:202.1.1.2DSTIP:224.0.0.5DSTIP:224.0.0.5
从表3和表4看出,组播地址均为224.0.0.5,这是OSPF协议规定的非DR/BDR的路由器工作的组播地址,而224.0.0.6是DR/BDR工作的组播地址。
为减少自治系统内部交换LSA的通信量,OSPF允许在自治系统内进行区域划分,主要有骨干区域、标准区域、末梢区域(Stub)、完全末梢区域(Total Stub或者Stub no-summary)和非纯末梢区域(NSSA),每个区域都有一个32位的无符号数值作为区域ID,骨干区域的ID为0。其它非骨干区域必须与骨干区域相连接,或与骨干区域建立虚链路(Virtual Link),每个区域内部的路由器只需要知道本区域的链路状态,骨干区域中的区域边界路由器负责区域间的信息收发。末梢区域禁止外部AS的信息进入本区域,该区域路由器的路由表中有域内路由和域间路由,无域外路由,去往AS以外的域外路由通过缺省路由实现。完全末梢区域禁止外部AS和本AS内的其它区域的信息进入该区域,该区域路由器的路由表中只有域内路由,无域间路由和域外路由,去往域间和域外的路由通过缺省路由实现。非纯末梢区域允许使用路由重分布将OSPF自治系统以外的路由通告到OSPF自治系统的内部。
在Cisco Packet Tracer下,构建如图2所示网络拓扑及配置。为路由器配置OSPF路由,A0为骨干区域,A1、A2为标准区域,A3为非纯末梢区域,A4为完全末梢区域,A5为末梢区域,这6个区域构成一个OSPF自治系统,而由R6和R7构成一个RIP自治系统。A1未与A0直接连接,需在A1的区域边界路由器R2与A0的区域边界路由器R3之间建立virtual-link连接,使A1与A0进行逻辑连接。而R6作为两个自治系统之间的边界路由器,需配置路由重分布。配置的主要步骤:
R1(config)#route ospf 1
R1(config-router)#network 1.1.1.1 0.0.0.0 area 1
R1(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config)#route ospf 1
R2(config-router)#area 2 virtual-link 3.3.3.3
R2(config-router)#network 2.2.2.2 0.0.0.0 area 2
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config-router)#network 202.1.2.0 0.0.0.255 area 2
R3(config)#route ospf 1
R3(config-router)#area 2 virtual-link 2.2.2.2
R3(config-router)#network 3.3.3.3 0.0.0.0 area 0
R3(config-router)#network 202.1.2.0 0.0.0.255 area 1
R3(config-router)#network 202.1.3.0 0.0.0.255 area 0
R3(config-router)#network 202.1.5.0 0.0.0.255 area 3
R4(config)#router ospf 1
R4(config-router)#area 4 stub no-summary
R4(config-router)#area 5 stub
R4(config-router)#network 4.4.4.4 0.0.0.0 area 0
R4(config-router)#network 202.1.3.0 0.0.0.255 area 0
R4(config-router)#network 202.1.4.0 0.0.0.255 area 4
R4(config-router)#network 202.1.6.0 0.0.0.255 area 5
R5(config)#router ospf 1
R5(config-router)#area 4 stub no-summary
R5(config-router)#network 5.5.5.5 0.0.0.0 area 4
R5(config-router)#network 202.1.4.0 0.0.0.255 area 4
R6(config)#router ospf 1
R6(config-router)#area 3 nssa
R6(config-router)#redistribute rip subnets
R6(config-router)#network 6.6.6.6 0.0.0.0 area 3
R6(config-router)#network 202.1.5.0 0.0.0.255 area 3
R6(config)#router rip
R6(config-router)#version 2
R6(config-router)#redistribute ospf 1 metric 5
R6(config-router)#network 202.1.7.0
R7(config)#router rip
R7(config-router)#version 2
R7(config-router)#network 7.0.0.0
R7(config-router)#network 202.1.7.0
R8(config)#router ospf 1
R8(config-router)#area 5 stub
图2 多区域OSPF网络拓扑图
R8(config-router)#network 8.8.8.8 0.0.0.0 area 5
R8(config-router)#network 202.1.6.0 0.0.0.255 area 5
查看R3、R1、R5、R8路由表,其主要的OSPF路由内容如下:
R3#show ip route
O IA 202.1.1.0/24 [110/2] via 202.1.2.2, 01:35:55, FastEthernet0/1
O IA 202.1.4.0/24 [110/2] via 202.1.3.2, 01:36:21, FastEthernet0/0
O IA 202.1.6.0/24 [110/2] via 202.1.3.2, 01:36:21, FastEthernet0/0
O N2 202.1.7.0/24 [110/20] via 202.1.5.2, 01:36:31, FastEthernet1/0
R1#show ip route
O IA 202.1.3.0/24 [110/3] via 202.1.1.2, 01:12:18, FastEthernet0/0
O IA 202.1.4.0/24 [110/4] via 202.1.1.2, 00:00:13, FastEthernet0/0
O IA 202.1.5.0/24 [110/3] via 202.1.1.2, 00:00:13, FastEthernet0/0
O IA 202.1.6.0/24 [110/4] via 202.1.1.2, 00:00:13, FastEthernet0/0
O E2 202.1.7.0/24 [110/20] via 202.1.1.2, 00:00:13, FastEthernet0/0
R5#show ip route
O*IA 0.0.0.0/0 [110/2] via 202.1.4.1, 01:17:46, FastEthernet0/0
R8#show ip route
O IA 202.1.1.0/24 [110/4] via 202.1.6.1, 01:20:56, FastEthernet0/0
O IA 202.1.2.0/24 [110/3] via 202.1.6.1, 01:21:06, FastEthernet0/0
O IA 202.1.3.0/24 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
O IA 202.1.4.0/24 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
O IA 202.1.5.0/24 [110/3] via 202.1.6.1, 01:21:06, FastEthernet0/0
O*IA 0.0.0.0/0 [110/2] via 202.1.6.1, 01:21:26, FastEthernet0/0
不难看出,A3是非纯末梢区域,通过R6的路由重分布,使R3获得RIP自治系统中202.1.7.0/24的路由。A1通过virtual-link与A0逻辑连接,使R1获得域间路由和域外路由。A4为纯末梢区域,则R5只有一条静态的OSPF路由。A5为末梢区域,使R8获得域间路由,而域外路由只有一条静态路由。相应的抓包分析与单区域情况类似,不再赘述。
在使用OSPF的路由器间通告LSA时,可以采用洪泛法,但洪泛法开销大,为减少开销,区域中每个网段的路由器可通过hello报文的交互,选举本网段的DR/BDR(DR失效时BDR起作用),选举原则是:(1)路由器接口优先级最高和次高的为DR和BDR;(2)若优先级相同,则路由器的ROUTER-ID最大和次大的为DR和BDR(若未指定路由器的RID,则用路由器回环接口Loopback的IP地址作为RID,若未配置回环接口,则用路由器物理端口中最大的IP地址作为RID)。下面分析使用OSPF的网络选举DR/BDR的过程。
在Cisco Packet Tracer下,构建如图3所示网络拓扑及配置。以R1为例配置OSPF路由,R2、R3、R4的配置与R1类似。
R1(config)#route ospf 1
R1(config-router)#router ospf 1
R1(config-router)router-id 1.1.1.1
R1(config-router)network 202.1.1.0 0.0.0.255 area 0
图3 选举BD/BDR网络拓扑图
查看R2的邻居信息,R1、R3、R4与R1类似。
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
3.3.3.3 1 FULL/BDR 00:00:35 202.1.1.3 FastEthernet0/0
4.4.4.4 1 FULL/DR 00:00:31 202.1.1.4 FastEthernet0/0
1.1.1.1 1 2WAY/DROTHER 00:00:35 202.1.1.1 FastEthernet0/0
不难看出,202.1.1.0/24网段已经选举出R4为DR,选举出R3为BDR,二者是该网段中RID最大的路由器。此时进行抓包分析,路由器依次以洪泛法向其它所有路由器发送含有本路由器RID的hello包,每个路由器经过比较收到的hello包中的RID,最终选举出本网段中的DR/BDR。
上述情况是所有路由器的接口优先级均采用默认优先级(值为1),现将R1的f0/0端口优先级改为2,并重新启动所有路由器的OSPF进程,查看R2的邻居信息,结果如下。
R1(config)#interface FastEthernet0/0
R1(config-if)#ip ospf priority 2
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
图4 路由分布网络拓扑图
1.1.1.1 2 FULL/DR 00:00:34 202.1.1.1 FastEthernet0/0
3.3.3.3 1 2WAY/DROTHER 00:00:34 202.1.1.3 FastEthernet0/0
4.4.4.4 1 FULL/BDR 00:00:37 202.1.1.4 FastEthernet0/0
此时,优先级为2的R1选为DR,其余优先级为1的RID最大的R4选为BDR。在选举DR/BDR时,还需考虑路由器OSPF进程启动的顺序,若网段的DR/BDR尚未选举出来,进程已全部启动,则按照优先级和RID进行选举;若DR/BDR已经选举出来,则后启动OSPF进程的路由器不会改变已经选举出的DR/BDR。
在某些情况下,OSPF路由器不希望学习从某个指定接口接收来的LSA中的某个网段的路由信息,则可以通过对该路由器进行路由分布配置,禁止学习从指定接口接收来的LSA中的某个网段的路由信息。
在GNS3下,构建如图4所示网络拓扑及配置。为路由器配置单区域OSPF路由,R1、R2、R4的配置与单区域配置类似,而R3的配置如下:
R3(config)#access-list 1 deny 202.1.1.0 0.0.0.255
R3(config)#access-list 1 permit any
R3(config)#router ospf 1
R3(config-router)#network 202.1.2.0 0.0.0.255 area 0
R3(config-router)#network 202.1.3.0 0.0.0.255 area 0
R3(config-router)#distribute-list 1 in fastEthernet0/0
通过上述配置,使得R3禁止从其f0/0接口学习202.1.1.0/24网段的路由信息,查看R3、R4的路由表,结果如下:
R3#show ip route
C 202.1.2.0/24 is directly connected, FastEthernet0/0
C 202.1.3.0/24 is directly connected, FastEthernet0/1
R4#show ip route
O 202.1.2.0/24 [110/20] via 202.1.3.1, 00:00:19, FastEthernet0/0
C 202.1.3.0/24 is directly connected, FastEthernet0/0
O 202.1.1.0/24 [110/30] via 202.1.3.1, 00:00:19, FastEthernet0/0
不难发现,R3的路由表中没有202.1.1.0/24网段的路由信息,已被禁止学习,而R4中学习到了该网段的路由信息。因此,路由分布仅仅本地有效,不影响其他路由器学习。
在使用OSPF时,骨干区域会获取所有网段的路由通告,当AS较大时,会造成骨干区域路由器路由表庞大,而若某个网段不稳定,又会造成LSA的洪泛。为解决这些问题,可以将网段地址进行汇总,即路由汇总,从而减少路由器路由表的大小,减少LSA洪泛。而域间路由汇总在ABR上实现,外部路由汇总在ASBR上实现。
在GNS3下,构建如图5所示网络拓扑及配置。在配置OSPF路由时,R1、R2构成area0,R2、R3、R4、R5构成area1,R1、R3、R4、R5的配置与多区域配置类似,而区域边界路由器R2的配置如下。
R2(config)#router ospf 1
R2(config-router)#network 212.1.1.0 0.0.0.255 area 0
R2(config-router)#network 202.1.1.0 0.0.0.255 area 1
R2(config-router)#area 1 range 202.1.0.0 255.255.248.0
图5 域间路由汇总网络拓扑图
通过上述配置,将area1中的202.1.1.0/24、202.1.2.0/24、202.1.3.0/24、202.1.4.0/24四个网段汇总为202.1.0.0/21。查看R1的路由表,结果如下:
R1#show ip route
C 212.1.1.0/24 is directly connected, FastEthernet0/0
O IA 202.1.0.0/21 [110/20] via 212.1.1.1, 00:00:21, FastEthernet0/0
不难发现,经过边界路由器R2的路由汇总,R1的路由表只有一条汇总后的网段路由信息,并没有area1中四个网段的路由信息。若没有R2的路由汇总,则R1的路由表就会有area1中4个网段的路由信息。
本文在Cisco Packet Tracer和GNS3仿真环境下,对OSPF路由进行了较深入的研究。通过设计简单的网络拓扑,对单区域OSPF路由、多区域OSPF路由、DR/BDR的选举、路由分布和域间路由汇总进行配置,并通过抓包分析OSPF的通告情况,从而对路由器使用OSPF进行路由选择进行较深入的分析研究,形成了明确的分析结论。这些分析和结论既可以作为学习的参考,又可以指导实物环境下路由器的OSPF路由设置,从而解决OSPF路由配置的相关问题。
[1] 李丙春,王文龙,刘 静,等.路由与交换技术[M].北京:电子工业出版社,2016.
[2] 付承彪,田安红.两种动态路由协议分析及其实验设计与仿真[J].实验技术与管理,2016(7):140-144.
[3] 马素刚.路由协议OSPF的研究与仿真[J].计算机系统应用,2016(5):228-231.
[4] 史玉锋,赵 燕,李 明.解析ospf协议中常用的7类LSA[J].电子测试,2016(1):39-40.
[5] 刘小虎,张玉臣,方青坡,等.半实物网络仿真动态路由方案设计与实现[J].系统仿真学报,2015(9):2089-2095.
[6] 李 永,甘新玲. 基于Packet Tracer的路由综合实验设计与实现[J]. 实验室研究与探索,2015(9):111-114.
[7] 李林林,孙良旭,吴建胜,等. 单机环境下路由交换技术综合实验设计[J]. 实验室研究与探索,2015(8):115-118.
[8] 曹腾飞,孟永伟,黄建强,等. 西部高校计算机网络实验[J]. 实验室研究与探索,2015(4):129-131,140.
[9] 陈 伟.基于仿真技术的OSPF动态路由的应用研究[J].长江大学学报(自然科学版),2011(9):87-89+9.
[10] 杨振启,杨云雪.OSPF协议中ABR动态选举研究[J].计算机工程,2011(13):80-82.
[11] 肖 阳,杨媛媛.OSPF的区域类型、路由类型和末梢区域的配置[J].信息安全与技术,2011(4):21-23+26.
[12] 王 东.OSPF路由协议在多区域中的应用[J].重庆科技学院学报(自然科学版),2010(2):172-174.
[13] 杜宇扬.OSPF协议动态配置技术研究[J].西安邮电学院学报,2010(1):134-138,147.
[14] 柴 晟,罗传军,罗惠琼.自治系统内部路由的仿真实验分析[J].微计算机信息,2007(18):235-236,229.
[15] 张春青,张宏科.OSPF动态路由协议中的路由计算[J].北方交通大学学报,2003(3):100-103.
[16] 严斌宇,卢 苇,黄 锐.OSPF路由选择协议的研究[J].四川大学学报(自然科学版),2002(3):460-464.
[17] 张春青,张宏科.OSPF动态路由技术的研究与实现[J].通信世界,2002(1):50-51.