李春平,叶裴雷,许碧雅,朱婷婷
(广东白云学院大数据与计算机学院,广州 510000)
随着互联网的迅速发展,互联网终端用户呈现爆发式增长,导致传统的标识互联网主机的IPv4地址资源紧张[1]。这是由于IPv4网络协议采用的是32位IP地址结构。一方面,IPv4协议结构中没有设计专门进行安全性验证的字段,只有简单的头部校验和验证,因此IP数据包在传输过程中存在安全隐患,容易被截获和篡改,导致数据完整性失效。解决这些问题的最终办法是使用新的128位地址结构的IPv6协议替代传统的IPv4协议[2]。
另一方面,数据包在网络传输过程中,需要寻找最佳途径将数据包转发到目的地,担任转发任务的通常是路由器或三层交换机之类的三层设备。为了找到最佳路由,在路由器上需要执行路由算法,例如RIP、OSPF、BGP等不同的路由协议[3]。RIP是基于距离矢量的路由协议,由于跳数限制,通常应用在中小规模的网络中,BGP是一种边界网关协议[4],通常运行在自治系统边界路由器上。而OSPF是另一种内部网关协议,它基于链路状态,采用最短路径优先算法,实现快速收敛,能在大型网络中部署。目前有两个常用的版本OSPFv2(OSPF版本2)和OSPFv3(OSPF版本3)。OSPFv2是用来支持IPv4网络,OSPFv3用来支持IPv6网络[5]。因为IPv6将在未来代替IPv4协议,因此本文讨论基于IPv6的OSPF路由协议。
OSPF有3个主要组件:数据结构、路由协议消息和算法。
(1)数据结构。OSPF路由器数据结构包括邻接数据库、链路状态数据库(LSDB)、转发数据库,对应着邻居表、拓扑表和路由表等3张表。
(2)路由协议消息。OSPF消息通常封装在IP数据包中,OSPF数据包类型主要由Hello、数据库描述(DBD)、链路状态请求(LSR)、链路状态更新(LSU)、链路状态确认(LSACK)组成[6]。
(3)算法。OSPF采用SPF(Shortest Path First)算法即最短路径优先算法计算路由,以达到路由快速收敛的目的。
当路由器运行OSPF路由进程时,它会依次进行以下操作:发现邻居并与之建立建立邻接关系;交换路由信息;计算最佳路由;实现收敛。
OSPF在尝试实现收敛时会进入几种状态:Down状态、Init状态、Two-Way状态、ExStart状态、Exchange状态、Loading状态和Full状态。
(1)建立邻接关系。当运行了OSPF的相邻路由器收到一个Hello数据包,路由器会对照自己的邻居表,检查这个Hello数据包中的路由器ID,如果邻居表中没有存储这个ID信息,接收路由器将把这个源路由器ID作为邻居添加到邻居表中,以此建立邻接关系。
(2)交换路由信息。在多接入网络中,OSPF会选择出一个DR作为所收发LSA的收集与分发点。如果DR发生故障,则会选择BDR。在Two-Way状态之后,路由器转变为数据库同步状态。
(3)计算最佳路由。OSPF根据链路状态数据库里面的内容,利用SPF算法,计算到每一个目的网络度量值,从中选取最小值作为首选路由,添加到路由表中。
(4)实现收敛。当整个OSPF区域中的所有路由器都对网络拓扑有了统一的认识,既没有新的路由器增加,也没有路由器从中删除,路由器中所有路由条目都彼此交换完成的过程,这个时候邻居表、链路状态数据库和路由表达到稳定,这个过程叫收敛。OSPF能够实现快速收敛,在小型网络中,收敛时间一般在5秒内。
OSPF可以使用单区域OSPF或多区域OSPF两种方式之一进行实施。
如前所述,OSPF路由协议从发现邻居到交换链路状态信息直至建立路由表,最后达到收敛,是一个完整的过程。OSPF在执行SPF算法和存储邻居表、拓扑表、路由表这3张表是以占用路由器CPU和内存资源为代价,这种机制是无法规避的,当网络规模变得庞大时,路由表也会变大,同时路由器计算量也会增加,路由器资源消耗会越来越大。这将会导致网络可用性降低,稳定性变差。因此,为了提高网络的可用性,增强网络稳定性,在中大型网络中部署OSPF路由协议时要将路由优化的技术和方法考虑进来[7]。
单区域OSPF如果没有汇总路由,每台路由器必须保留关于路由域中的每个网络的详细信息,因此路由表会变得非常大。采用多区域OSPF的好处是:路由表减小、链路状态更新开销降低、SPF计算次数减少,从而带来路由综合性能的提升[8]。
路由器ID采用32位结构,格式与IPv4地址相同,它所显示的形式是x.x.x.x。启用了OSPF路由进程的路由器使用路由器ID来唯一标识路由器和参与DR的选择。路由器ID基于以下3个标准之一确定:①使用OSPF router-id rid配置命令明确定义;②如果没有明确定义router-id,路由器将选择所有已配置环回接口的最高IPv4地址;③如果未配置环回接口,则路由器会选择其所有物理接口的最高活动IPv4地址。
为了正确选举每个区域中的DR,防止在同等优先级的情况下抢占DR权利,导致路由信息在网络中过多传播,可自定义路由器ID。
同样的,在IPv6接口上启用OSPF之前,OSPFv3需要分配一个32位路由器ID。使用router-id rid命令可以在OSPFv3中定义路由器ID。
在LAN环境中,末节网络通常不需要接收路由器发来的路由更新通知,以免造成不必要的带宽资源浪费和安全隐患。为了防止OSPF路由更新通过指定路由器端口发送,向不必要的网络扩散,可以配置OSPF被动接口来完成指定路由更新通知,以减少LAN的流量。
使用passive-interface路由器配置模式命令防止通过路由器接口传输路由消息,但是仍允许通过该接口接收路由信息,并通告给其他路由器。在被动接口上无法建立邻居邻接关系。因此,路由器接口一旦配置为被动接口,则该接口通常连接到末节网络[9]。
包括更改路由器参考带宽、更改接口带宽、更改路由开销,以适应具体的网络,使路由器与网络匹配,从而改善网络综合性能[10]。
路由重分布的作用是在路由器上转换路由协议类型和格式,以实现不同的路由协议之间的路由信息交换。例如,在一个运行RIP和OSPF两种不同路由协议的网络中,可以将RIP重分布到OSPF协议中。在同时配置有直连路由、默认路由、动态路由的网络中,可以通过重分布,将直连路由和默认路由传播到整个网络中,提高配置效率。
如图1所示,建立OSPFv3多区域网络,由area0、area1、area2共3个区域组成内部网络,其中area0为骨干区域。区域area1、area2分别与骨干区域area0相连。多区域网络中共有R1、R2、R3、R4共4台路由器,用ISP路由器模拟外部网络路由器。内部网络路由器上运行OSPFv3路由协议,内网与外网之间部署静态默认路由。
图1 IPv6多区域网络拓扑图
设备地址分配如表1所示。
表1 IPv6地址规划
R2 R3 R4 ISP PC0 PC1 PC2 PC3 SERVER0 G0/0 G0/1 S0/0/0 G0/0 G0/1 G0/0 G0/1 G0/2 S0/0/0 G0/0 NIC NIC NIC NIC NIC 2021:1212::2/64 EUI-64 2021:2323::1/64 EUI-64 2019:2525::1/64 2021:3434::1/64 2021:2323::2/64 2021:3434::2/64 2020:2222::1/64 2020:3333::1/64 2019:2525::2/64 2018:1111::1/64 SLAAC SLAAC SLAAC SLAAC SLAAC N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A SLAAC SLAAC SLAAC SLAAC SLAAC
3.3.1 R1配置
Router(config)#hostname R1
R1(config)#interface g0/0
R1(config-if)#ipv6 address 2021:1212::1/64
R1(config-if)#no shutdown
R1(config-if)#interface t g0/1
R1(config-if)#ipv6 address 2017:1111::1/64
R1(config-if)#no shutdown
R1(config-if)#interface g0/2
R1(config-if)#ipv6 address 2017:1122::1/64
R1(config-if)#no shutdown
3.3.2 R2配置
Router(config)#hostname R2
R2(config)#interface g0/0
R2(config-if)#ipv6 address 2021:1212::2/64
R2(config-if)#no shutdown
R2(config-if)#interface g0/1
R2(config-if)#ipv6 address 2021:2323::1/64
R2(config-if)#no shutdown
R2(config-if)#interface s0/0/0
R2(config-if)#ipv6 address 2019:2525::1/64
R2(config-if)#no shutdown
3.3.3 R3配置
Router(config)#hostname R3
R3(config)#interface g0/0
R3(config-if)#ipv6 address 2021:3434::1/64
R3(config-if)#no shutdown
R3(config-if)#interface g0/1
R3(config-if)#ipv6 address 2021:2323::2/64
R3(config-if)#no shutdown
3.3.4 R4配置
Router(config)#hostname R4
R4(config)#interface g0/0
R4(config-if)#ipv6 address 2021:3434::2/64
R4(config-if)#no shutdown
R4(config-if)#interface g0/1
R4(config-if)#ipv6 address 2020:2222::1/64
R4(config-if)#no shutdown
R4(config-if)#interface g0/2
R4(config-if)#ipv6 address 2020:3333::1/64
R4(config-if)#no shutdown
3.3.5 ISP配置
Router(config)#hostname ISP
ISP(config)#interface g0/0
ISP(config-if)#ipv6 address 2018:1111::1/64
ISP(config-if)#no shutdown
ISP(config-if)#interface s0/0/0
ISP(config-if)#ipv6 address 2019:2525::2/64
ISP(config-if)#no shutdown
3.4.1 规划OSPF多区域
本实例中,由area0、area1、area2共3个区域组成内部网络,其中area0为骨干区域。每个常规区域均与骨干区域相连。通过在路由器上执行ipv6 ospf process-id area area-id命令配置路由器所在区域。
3.4.2 重新定义路由器ID
以R1路由器配置为例,多区域网络中其它路由器可参照R1配置。
R1(config)#ipv6 unicast-routing
R1(config)#ipv6 router ospf 1
R1(config-rtr)#router-id 1.1.1.1
3.4.3 配置被动接口
在路由器连接末节网路的接口上执行passive-interface interface-id,配置被动接口。
R1路由器上的末节网络配置被动接口:
R1(config-rtr)#passive-interface g0/1
R1(config-rtr)#passive-interface g0/2
R4路由器上的末节网络配置被动接口:
R4(config-rtr)#passive-interface g0/1
R4(config-rtr)#passive-interface g0/2
3.4.4 更改OSPF度量
以R1路由器配置为例,多区域网络中其它路由器可参照R1配置。
(1)修改参考带宽值。
R1(config-rtr)#auto-cost reference-bandwidth 1000
R1(config-rtr)#exit
(2)修改开销值。
R1(config)#int g0/0
R1(config-if)#ipv6 ospf 1 area 1
R1(config-if)#ipv6 ospf cost 500
(3)修改hello-interval与dead-interval值。
R1(config-if)#ipv6 ospf hello-interval 4
R1(config-if)#ipv6 ospf dead-interval 24
3.4.5 执行路由重分布
(1)配置访问外网的静态默认路由。与外网的通信是通过R2路由器连接的,因此在R2上配置静态路由。
R2(config)#ipv6 unicast-routing
R2(config)#ipv6 route::/0 Serial0/0/0//配置访问外网的静态默认路由
(2)传播静态默认路由。为了将R2上部署的静态路由传播到内网其它路由器上,减少在其它路由器上的重复配置,在R2上执行重分布路由命令。
R2(config)#ipv6 router ospf 2
R2(config-rtr)#router-id 2.2.2.2
R2(config-rtr)#auto-cost reference-bandwidth 1000
R2(config-rtr)#default-information originate//传播默认路由
(3)重分布直连路由。可在R4上执行重分布直连路由,将area2外的直连路由传播到其它区域路由器的路由表上。
R4(config)#ipv6 unicast-routing
R4(config)#ipv6 router ospf 4
R4(config-rtr)#router-id 4.4.4.4
R4(config-rtr)#redistribute connected//重 分 布 直 连路由
3.5.1 在R2上查看邻居建立情况
可以看到R2的邻居ID分别为1.1.1.1与3.3.3.3,这两个ID分别是R1、R3路由器的,说明R2与R1、R3相邻。
图2 R2邻居表信息
3.5.2 查看链路状态数据库
在R2上执行show ipv6 ospf database时,会显示出链路状态数据库即拓扑情况。该信息与实际网络拓扑相关,信息可能会比较长。本实验截取部分显示。
图3 R2拓扑表信息
3.5.3 查看路由表
通过执行show ipv6 route命令,可以查看路由表情况,IPv6路由表已经建立起来。
图4 R2路由表信息
3.5.4 连通性测试
在配置了OSPFv3路由协议并进行优化之后,对全网连通性进行测试。在终端PC及服务器上设置好IPv6参数,主机之间通过命令来测试连通性。
PC0 ping PC2,回显结果如下:
C:>ping 2020:2222::20d:bdff:fe77:64d2
Pinging 2020:2222::20d:bdff:fe77:64d2 with 32 bytes of data:
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time=1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time<1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time<1ms TTL=124
Reply from 2020:2222::20D:BDFF:FE77:64D2:bytes=32 time=13ms TTL=124
Ping statistics for 2020:2222::20D:BDFF:FE77:64D2:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=0 ms,Maximum=13 ms,Average=3 ms
由上可见,内网是连通的。再测试内网和外网的连通性。
PC0 ping SERVER0,回显结果如下:
C:>ping 2018:1111::209:7cff:fe49:79c
Pinging 2018:1111::209:7cff:fe49:79c with 32 bytes of data:
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=12ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=125
Ping statistics for 2018:1111::209:7CFF:FE49:79C:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=1 ms,Maximum=12 ms,Average=3 ms
PC2 ping SERVER0,回显结果如下:
C:>ping 2018:1111::209:7cff:fe49:79c
Pinging 2018:1111::209:7cff:fe49:79c with 32 bytes of data:
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=61ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=3ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=1ms TTL=124
Reply from 2018:1111::209:7CFF:FE49:79C:bytes=32 time=2ms TTL=124
Ping statistics for 2018:1111::209:7CFF:FE49:79C:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximate round trip times in milli-seconds:
Minimum=1 ms,Maximum=61 ms,Average=16 ms
通过从不同区域内的主机发送ping包到服务器,均能收到服务器的响应,说明全网已连通。
通过分析当前多区域网络中运行OSPF协议存在的问题,给出了在IPv6多区域网络环境下部署OSPF路由协议优化的技术与方法,该方法可解决大规模网络中部署OSPF存在路由性能降低的问题。给出了一个完整的案例,按文中提出的优化方法进行了实践部署,并进行了验证,取得了较好的效果,具有一定的应用和借鉴意义。