一、背景说明
ospf作为IGP两大协议之一,有很多值得深挖的地方,仅通过一篇文章远远不够,后续还将通过多章篇幅进行说明。
二、ospf建立邻居的条件
尽管ospf作为一种链路状态协议,每一台路由器是通过lsa报文(其中包含其他路由器直连网段)在本地计算后形成以自己为根的路由表,但出于安全或其他方面的考虑ospf不是会和任意一台路由器建立邻居关系,ospf建立邻居有下面几个前提条件:
1. 直连路由的接口要宣告进同一个区域中(area)
2. 认证类型和认证密码要一致,查看命令
[R1]display ospf brief
3. 直连路由器的route id冲突不能建立起邻居,route id要求在同一域中唯一, 查看命令
[R1]display ospf routing
4. hello/dead时间间隔要一致,查看命令
[R1]display ospf routing
[R1-GigabitEthernet0/0/0]ospf timer hello/dead
5. 处于同一广播域的路由器接口网络类型要保持一致,查看命令,接口类型可修改
[R1]display ospf brief
[R1-GigabitEthernet0/0/0]ospf network-type broadcast/p2p
6. MA网络(以太网)中物理接口的子网掩码位数要一致,p2p网络(串口)中可以不一致
如上图所示,R1跟R2之间处于同一广播域的路由器接口尽管物理地址掩码不一致,但由于是p2p网络,仍然能建立邻居关系。R2与R3由于是MA网络同一广播域的路由器接口尽管物理地址掩码不一致则无法建立邻居。将R2,R3的网络类型改为p2p后,邻居建立成功。
三、路由器之间lsa报文传递
前文得知,每一台路由器会将自己直连网段的信息通过lsa发送,这样假设同一广播域中有n太路由器,就会有n*(n-1)/2个发送通道,造成了带宽的浪费。
所以规定了只有dr和bdr跟所有的路由器是full状态
其他drother角色的路由器之间2way状态,不传递lsa
所有路由器都通过224.0.0.5地址传递hello信息
只有dr和bdr角色通过224.0.0.6地址来接收lsa
四、ospf的area与虚链路
为了进一步降低带宽消耗,又可将ospf一个域划分为多个区域(area),每个路由器的1、2类lsa只能在本area中传播,area id取值范围在0-4294967295,规定只有area 0为骨干区域,所有非0的area为非骨干区域,连接骨干区域与非骨干区域的路由器则称为ABR(area border router),area 0在一个域中有且只有一个。
上图中R2为ABR,连接了area0与area1,所有该路由器通过3类lsa将不同area之间的路由相互注入
配置命令为:
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24
[R1-GigabitEthernet0/0/0]q
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.0.0.2 24
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 23.0.0.2 24
[R2-GigabitEthernet0/0/1]q
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.0.0.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]q
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]network 23.0.0.2 0.0.0.0
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ip add 23.0.0.3 24
[R3-GigabitEthernet0/0/0]q
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]network 23.0.0.3 0.0.0.0
五、ospf的虚链路
有时候可能因为特殊原因,非骨干区域没有跟area 0直接相连
由于ospf本身的防环机制,不同area之间的路由必须通过area 0来发布,所以此时area 2中路由信息就无法通过1、2类lsa传递给area 0并通过area 0向其他区域发布
此时就需要用到虚链路,虚链路本质上是一种隧道技术,他逻辑上扩大了area 0的范围
上文中说道area 2的1、2类lsa无法传递给area 0,拓扑中能看出area 0与area 2之间相隔了一个area 1,所以就需要在area 1的两台路由器之间建立隧道
R2路由器配置:
[R2]ospf 1
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 #3.3.3为要与R2路由建立虚连接的路由route id值
R3路由器配置:
[R3]ospf 1
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
再到R2上看,此时已经学习到4.4.4.0/24网段的路由了。
尽管已经相互学习到路由,但R2上无法直接通过邻居接口
需要通过ospf虚拟连接命令查看
六、虚链路的使用场景
上面介绍了在特殊情况下没有直接连接area 0的区域可以使用虚链路通过隧道进行连接,但虚链路不是为这种场景设计,虚链路多用于路由的备份。
如下图所示,此时如果R1与R2之间的连线故障
则拓扑结构就变为
尽管area 1与每个area 0都相连,但一个域中只能存在一个area 0,所以此时给R3与R4之间加一条虚链路能防止这种情况的发生。