理解并配置:IPv6的OSPFv3
OSPFv3主要用于在IPv6网络中提供路由功能,OSPFv3是基于OSPFv2上开发用于IPv6网络的路由协议。而无论是OSPFv2还是OSPFv3在工作机制上基本相同;但为了支持IPv6地址格式,OSPFv3对OSPFv2做了一些改动,下面将介绍OSPFv3与OSPFv2的异同点。
OSPFv3与OSPFv2类似也使用组播进行工作,OSPFv3的DR路由器使用众所周知的IPv6组播地址FF02::6这个地址,它类似于IPv4环境中的224.0.0.6;其他的OSPFv3的路由器使用FF02::5这个组播地址,它类似于IPv4环境中的224.0.0.5
OSPFv3与OSPFv2相同点:
OSPFv3协议设计思路和工作机制与OSPFv2基本一致,相同点如下所示:
n数据包类型相同:其中包括Hello、DBD(数据库描述)、LSR(链路状态请求)、LSU(链路状态更新)和LSAck(链路状态确定包)。
n区域划分相同:包括骨干区域、一般区域、末节区域、NSSA(次末节区域)和完全末节区域。
n路由器类型相同:包括内部路由器(internalrouter)、骨干路由器(backbone router)、区域边界路由器(area border router)和自治系统边界路由器(autonomoussystem boundary router)。
n使用网络类型相同:包括点到点络网、点到多点网络、多路访问网络、NBMA网络。
n邻居发现和邻接关系形成机制相同:OSPF 路由器启动后,便会通过 OSPF接口向外发送 Hello报文,收到 Hello报文的 OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。
nLSA泛洪和同步机制相同:为了保证 LSDB内容的正确性,需要保证 LSA的可靠泛洪和同步。
nDR选举机制相同:在 NBMA网络和广播网络中DR和BDR的选举过程相同。
n路由计算方法相同:采用最短路径优先算法(SPF)计算路由。
OSPFv3与OSPFv2不同点
为适应IPv6运行环境,支持IPv6报文的转发,OSPFv3相对OSPFv2做出相关的改进,使得OSPFv3可以独立于网络层协议,并且其扩展性加强,可以满足未来的需求。其与OSPFv2不同点如下所示:
n基于链路的运行
n使用IPv6链路本地地址
n链路支持多实例复用
n通过RouterID唯一标识邻居
n认证的变化
nOPSFv3更灵活的处理未知LSA类型
nOSPFv3增加了本地链路洪泛扩散的范围
nOSPFv3取消了寻址的概念
理解基于链路的运行:
OSPFv2是基于网络运行的,也就是说两台路由器要形成邻居关系,它们必须在同一个子网。OSPFv3是基于链路运行的,一个链路可以划分为多个IPv6前缀(类似于子网的概念),节点即使不在同一个前缀范围,只要在同一链路上也可以形成邻居关系,这与OSPFv2完全不同,因为在IPv6中一条链路可以属于多个子网。
理解使用IPv6链路本地地址:
OSPFv3将使用本地链路地址作为报文发送的源地址。一台路由器可以学习到同一链路上相连的所有路由器的本地链路地址,并使用这些本地链路地址作为下一跳来转发报文。但是在虚拟链路连接上,必须使用全球范围地址或者本地站点地址作为OSPFv3协议报文发送的源地址。本地链路地址只在本地链路上有意义且只能在本地链路上泛洪。
理解链路支持多实例复用:
在OSPFv3中支持链路多实例复用,所谓链路多实例复用是指:在一条共享型广播链路上可以运行多个OSPF实例(Instance)。比如:如图12.121所示,路由器R1与R2属于同一个OSPF路由域;路由器R3和R4属于另一个OSPF路由域,但是它们连接到同一个广播网络中,共享同一条链路且都能相互建立邻居关系,正常的行为应该让路由器R1与R2建立邻居关系;路由器R3与R4建立邻居关系,因为您总不能让路由器R1和R3或者路由器R2和R4建立邻居吧?因为它们不处于同一个OSPF路由域。当然,在OSPFv2中可以使用OSPF的认证功能来隔离这两个OSPF的路由域,但这并不是一种完美的解决方案,因为OPSF路由器将不断的记录被其他邻居拒绝的OSPF认证失败的数据包。而在OSPFv3链路支持多实例复用是因为在OSPFv3报文头中添加Instance ID字段。如果接口配置的Instance ID与接收的OSPFv3报文的Instance ID不匹配,则丢弃该报文,从而无法建立起邻居关系。
理解通过Router ID唯一标识邻居:
在OPSFv2中,当OSPF运行在广播网络或者NBMA网络上时,OSPFv2的邻居是通过路由器的接口地址进行标识,而其他链路的 OSPFv2的邻居则是通过路由器ID(RID)来表示。在OSPFv3中取消了这种不一致性,所有类型的链路全部通过RID来标识邻居,而且OPSFv3的RID将会作为配置的必须项,在OPSFv2中RID的配置是可选项,在OSPFv3中如果不为路由器配置RID那么OSPFv3将无法启动,会出现如图12.122所示的提示:
理解认证的变化:
在OSPFv2中OSPF拥有自己特有的认证方式,这些认证消息被包含在OSPFv2的数据包中。OSPFv3自身不再提供认证功能,而是通过使用IPv6提供的安全机制来保证自身报文的合法性。所以,OSPFv2报文中的认证字段,在OSPFv3报文头中被取消。
理解OPSFv3更灵活的处理未知LSA类型:
在OSPFv2上会对未知的LSA作丢弃,在OSPFv3中可以把这些未知的LSA当作本地链路洪泛扩散范围,这类似于这些未知的LSA被识别一样,但是在它们自己的SPF算法中将被忽略,这样做的结果是OSPFv3处理网络的变化比v2更容易。
理解OSPFv3增加了本地链路洪泛扩散的范围:
因为IPv6的本地链路地址有广泛的用途,所以OSPFv3增加了一个本地链路洪泛扩散的范围,新增加的LSA叫做链路LSA,它用来携带单个链路上邻居相关联的信息,这种类型的LSA只在本地链路范围内洪泛,所以它不能超出路由器以外进行扩散。
理解OSPFv3取消了寻址的概念:
OSPFv3的路由器LSA和网络LSA不再携带IP地址,这加强了OSPF的扩展性。
演示:在IPv6环境中OSPFv3的配置
演示目标:配置IPv6环境中的路由协议OSPFv3。
演示环境:如图12.123所示。
演示背景:分别在路由器R1、R2、R3上配置三个环回接口,分别配置三个全球单播范围内的IPv6地址,模拟三个不同的IPv6前缀(类似于IPv4的子网),然后在三台路由器上启动OSPFv3,最后来观察IPv6的路由学习结果,查看OSPFv3的邻居关系等。
演示步骤:
第一步:首先完成路由器R1、R2、R3的Ipv6的基础配置,其中包括启动IPv6和配置IPv6的接口地址,激活接口,具体配置如下:
路由器R1的基础配置:
R1(config)#ipv6 unicast-routing* 启动IPv6路由功能
R1(config)#interface e1/0* 进入E1/0接口模式
R1(config-if)#ipv6 enable* 在接口下启动IPv6,将自动生成本地链路地址
R1(config-if)#no shutdown* 激活该接口
R1(config-if)#exit
R1(config)#interface loopback1
R1(config-if)#ipv6 address 2001:1::1/64
路由器R2的基础配置:
R2(config)#ipv6 unicast-routing
R2(config)#interface e1/0
R2(config-if)#ipv6 enable
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface loopback1
R2(config-if)#ipv6 address 2001:2::1/64
路由器R3的基础配置:
R3(config)#ipv6 unicast-routing
R3(config)#interface e1/0
R3(config-if)#ipv6 enable
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface loopback1
R3(config-if)#ipv6 address 2001:3::1/64
第二步:现在开始在完成基础配置的基础上,在各个路由器上启动OSPFv3路由协议,具体配置如下所示:
在路由器R3的OSPFv3配置:
R3(config)#ipv6 router ospf 1* 启动OSPFv3的路由进程1
R3(config-rtr)#router-id 3.3.3.3* 为OSPFv3配置路由器ID(RID)
R3(config-rtr)#exit* 退出OSPFv3的路由配置模式
R3(config)#interface e1/0* 进入E1/0接口模块
R3(config-if)#ipv6 ospf 1 area0 * 使该接口加入到OSPFv3进程1并申明区域为0
R3(config-if)#exit
R3(config)#interface loopback1
R3(config-if)#ipv6 ospf 1 area0
R3(config-if)#exit
注意:在配置OSPFv3时,必须为路由器进程配置路由器ID(RID)这与OSPFv2完全不同,在OSPFv2的环境中,RID是一个可选项配置,但是在OSPFv3的环境中RID是必须配置,否则OSPFv3将无法启动。OSPFv3的RID将仍然以点分十进制的方法显示,比如:1.1.1.1这很像IPv4地址的表达方式。
在路由器R2的OSPFv3配置:
R2(config)#ipv6 router ospf 1
R2(config-rtr)#router
R2(config-rtr)#router-id2.2.2.2
R2(config)#interface e1/0
R2(config-if)#ipv6 ospf 1 area0
R2(config-if)#exit
R2(config)#interface loopback1
R2(config-if)#ipv6 ospf 1 area0
R2(config-if)#exit
在路由器R1的OSPFv3配置:
R1(config)#ipv6 router ospf 1
R1(config-rtr)#router-id1.1.1.1
R1(config-rtr)#exit
R1(config)#interface e1/0
R1(config-if)#ipv6 ospf 1 area 0
R1(config-if)#exit
R1(config)#interface loopback1
R1(config-if)#ipv6 ospf 1 area0
R1(config-if)#exit
第三步:现在可以检查OSPFv3邻居关系的状态、路由学习的情况,以及连通性检测。可以使用show ipv6 ospf neighbor来查看OSPFv3的邻居关系正常,如图12.124所示,并且可知路由器R3是DR路由器,R2是BDR路由器,关于为什么这样选举,在OSPFv2中有详细描述,这里不再重复描述。然后可以通过show ipv6 route查看路由器R1的IPv6路由表,如图12.125所示,可看出R1成功的学习到了路由器R2和R3公告出来的OSPF路由,其中的“O”就表示通过OSPFv3所学到的路由。最后在路由器R1上通过ping指令检测与路由器R2和R3上相关IPv6前缀的连通性,如图12.126所示,一切正常。
第四步:当完成上述配置后,可以通过协议分析器捕获并分析OSPFv3的协议报文,如图12.127所示为路由器R2发出的OSPFv3的协议报文。