OSPF的为什么要划分区域?
- 区域内LSA的数量和设备数量成正比。
- 区域内有1类LSA和2类LSA,且都包含拓扑和路由信息。
- 路由信息改变都会影响区域内所有设备。
- 拓扑信息改变区域内所有设备都需要重新计算SPF树。
::: warning OSPF的区域边界在路由器的接口上。 :::
ospf的区域类型:
骨干区域: area id = 0 ,称为骨干区域。又称传输区域,是所有区域连接的核心,用于区域与区域之间数据信息的传递交互。
非骨干区域: area id =! 0 ,称为非骨干区域。又称末节区域,是区域规划的边界,用于业务接入。
特殊区域:非骨干区域改变得来。
OSPF的设备类型:
- 区域内:IR设备,内部路由器,所有接口都属于一个区域。
- 区域间:ABR设备,区域边界路由器。
- 区域外:ASBR设备。
::: tip ABR基本概念:连接了多个区域,且包含骨干区域。 ABR的作用:在区域间泛洪区域内相应的LSA。 :::
ABR的类型:
- 真ABR:连接了多个区域,并且在区域0中存在活跃的邻居关系。
- 假ABR:设备指定自己为ABR,但是不执行ABR的操作。
- 半真半假ABR:连接了多个区域,但只在区域0中存在接口,不存在邻居。具备了真正ABR的操作,但是不具备真正ABR的防环(违反防环规则)。
- 特殊ABR:被虚链路包含的设备,称为虚链路ABR。
ospf区域的防环规则:
- 非骨干区域必须和骨干区域相连。骨干区域有且只有一个(否则会出现环路)。
- 区域间的3类LSA,一定是由ABR产生并泛洪的。
- ABR可以接收但不能计算非骨干区域的3类LSA,也不会将这个3类LSA发送到其他区域。(如果骨干区域做了分割,两个区域就不能通信。)
::: danger 动态路由协议邻居之间的数据信息传递是单向的,不能传回来,否则直接成环。 如果需要发回去,需要再接一根线做双向的邻居。 :::
3类LSA
network summary LSA:网络汇总LSA(将区域内的相互共享),由ABR产生,并在其他区域内泛洪。
ABR针对区域内如下信息产生3类LSA:
- 1类LSA是否存在路由信息:
- **如果存在,则可以由ABR转换为3类。** - **如果不存在,则ABR不会转换为3类。**
- 2类LSA一定会由ABR转换为3类(2类LSA描述一个广播型网络,一定存在路由信息)。
ABR针对区域间如下信息产生3类LSA:
- 如果是骨干区域的3类LSA,会由ABR转换为新的3类LSA。
- 如果是非骨干区域的3类LSA,防环机制存在,ABR不转换。
ABR:
区域内设备只存在本区域的LSDB,无法通过SPF树计算到其他区域的设备。
因为存在ABR设备,所以区域内的设备可以通过ABR访问到其他区域:
区域内的设备如何得知ABR? 成为ABR的设备在通告1类LSA的时候,会将flag标志位的B bit置位,表示自己是ABR。 如下: 更新一条路由抓LSU报文查看flag字段:
[AR2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
查看AR2的1类LSA描述也可以看到: 上图中表示在区域0中,AR2是ABR,向下翻可以看到在区域1中,AR2也是ABR。
拓扑中AR1会学到ABR设备转发来的两条3类LSA,分别是AR2和AR3之间的网段和AR3的环回口,如下: ::: tip 3类LSA描述了其它区域内的路由信息。 一条3类LSA仅描述一条路由信息。 :::
<AR1>dis ospf lsdb summary 3.3.3.3 查看3类LSA的明细信息
Type : Sum-Net
Ls id : 3.3.3.3 其他区域内的路由网段
Adv rtr : 10.2.2.2 ABR的RID
Ls age : 1641
Len : 28
Options : E
seq# : 80000001
chksum : 0x66d9
Net mask : 255.255.255.255 路由网段对应的掩码
Tos 0 metric: 1 ABR到达目的网络的开销
Priority : Medium
::: tip
上述明细中的开销值1是ABR到AR2的开销,这个3类LSA是由ABR通告给AR1的,描述内容是ABR到AR2的。AR1不能直接使用该开销值,需要先计算AR1到ABR的开销值,然后再叠加ABR到AR2的开销,就是AR1到达目的网段AR3的总开销值。
:::
区域内泛洪
设备成为了ABR,就会将区域之间的信息转换为3类,直接进行泛洪操作。 如上AR3到AR4的开销是2,即两端的LSA不需要经过区域0可以直接进行泛洪,路径是AR3-AR2、AR2-AR4。 ::: tip 区域0的作用就是使得AR2成为ABR执行区域间泛洪。 :::
3类LSA的开销计算: 3类LSA内会携带ABR到其他区域内目的网段的开销,本区域计算3类LSA时,需要先计算到达ABR的开销,将两个开销进行叠加,得到计算3类LSA路由后的开销。
3类LSA的优选
上图中,AR4的环回口的路由经过AR2变为3类LSA通告给AR1,AR1通过1类LSA通告给AR3的接口G0/0/0,AR3处于区域1的接口G0/0/1收到3类LSA后,由于该接口已经收到了区域1AR4发来的1类LSA,,就不会再接收区域0的接口G0/0/0发来的3类LSA了。 AR2和AR3都是ABR,都会转发区域1传来的路由信息: 如上,ABR互联区域的AR1内,共有6个3类LSA。(先计算区域内的路由条目数量,再乘以ABR的数量,就是ABR互联区域3类LSA的条目数量。)
::: tip LSA的优选规则: 1类LSA、2类LSA优于3类LSA。 骨干区域的3类LSA优于非骨干区域的3类LSA。 :::
3类LSA的更新、撤销:
更新:ABR通告的3类LSA( ls age = 0,ls seq 从1开始,每次更新加1)。 撤销:ABR撤销的3类LSA( ls age = 3600,ls seq 与更新3类LSA时一致,也会+1)。
邻居关系建立完成后,在AR4创建环回口,使得OSPF更新: 上图中两个更新的LSU报文原因是AR2和AR3都是ABR各转发通告一次。 undo环回口的OSPF: LS Age变为3600老化时间。序列号保持不变。 ::: warning 撤销时,AR4执行撤销动作(即undo的动作),AR2和AR3只是将产生的3类LSA执行撤销。 一条3类LSA中只能携带一条路由信息,可以使用时间值做撤销。 :::
虚链路
背景: 由于企业机房进行升级改造、搬迁、融合,导致OSPF需要重新规划网络,操作过程中要求业务不能中断。
融合后的网络可能存在如下问题:
- 两个骨干区域。
- 非骨干区域没有和骨干区域连接。
- 不存在骨干区域。
总的来说就是骨干区域存在问题,ABR存在问题。 OSPF可以使用虚连接(虚链路)解决。
如上图,区域2需要被连接到区域0,区域2与区域1相连,所以需要在区域1建立虚链路。将区域1当作区域0,在AR2和AR3上操作:
[AR2-ospf-1-area-0.0.0.1]vlink-peer 10.3.3.3
[AR3-ospf-1-area-0.0.0.1]vlink-peer 10.2.2.2
::: warning
[AR2-ospf-1-area-0.0.0.1]vlink-peer
IP_ADDR<X.X.X.X> Neighbor router ID
在配置虚链路时,指定是对端RID,RID不是地址:
虚链路只能通过SPF树计算到对端的RID(SPF树只存在在区域内),即虚链路只能在同区域内建立。
如果区域2后面还有区域3,就只能通过AR2-AR3,AR3-AR4建立两条虚链路,将AR3、AR4都变为ABR,才能完成区域0和区域3的连接。AR2可以指定AR4的RID,但是找不到AR4,原因是SPF树不能从AR2计算到AR4,所以不能从AR2-AR4直接建立虚链路。
:::
再查询AR1的路由表,就可以查到AR4的环回口:
虚链路实际上就是构建了虚拟的区域0,可以当作真正的区域0使用,是区域0的扩展。虚链路就是区域0的一个接口。 虚连接包含的设备是逻辑上的ABR设备(第四类ABR、特殊ABR)。
::: tip 建立虚链路的设备有什么特点?
- 一定存在一台真正的ABR设备。(如上图中的AR2)
- 都在非骨干区域。
- 建立虚链路的设备一定是同区域的设备。 :::
如上,AR3做了虚链路,就有了区域0的接口,就会存在区域0的数据库,并将自己宣告为ABR设备。
虚链路建立完成后的设备特点:
<AR3>dis ospf lsdb router 10.3.3.3 如下查看在区域0的flag(options)置位
Area: 0.0.0.0 会存在区域0的数据库
Link State Database
Type : Router 在区域0通告1类LSA
Ls id : 10.3.3.3 描述AR3的状态,即为AR3的RID
Adv rtr : 10.3.3.3 AR3通告的LSA,即为AR3的RID
Ls age : 845
Len : 36
Options : ABR E 通告自身为ABR设备
seq# : 80000001
chksum : 0xbc38
Link count: 1 增加新的链路类型
* Link ID: 10.2.2.2 虚链路邻居的RID
Data : 10.1.23.3 去往虚链路邻居的接口地址
Link Type: Virtual
Metric : 1 去往虚链路邻居实际物理链路的开销
::: warning 上述开销是实际的接口链路开销,如果中间有多台设备,开销就是实际链路开销的累加值。 :::
虚链路建立后邻居关系
虚链路是通过实际的物理链路来建立邻居关系的。
虚链路邻居之间交互的协议报文,目的地址是单播的: 如上从AR2的G0/0/0接口抓包,可以看到两个单播地址(224.0.0.5是组播地址)。 ::: warning 如果AR2和AR3之间还有其他的设备,虚链路邻居通信时的单播报文,中间设备只做转发。 ::: 单播报文目标地址计算: 区域内的LSDB是同步的,用SPF计算的步骤。 第一步:以自己为根计算去往邻居的出接口,出接口的地址为SIP。 第二步:以邻居为根计算去往本端的出接口,出接口的地址为DIP。 重启AR3的OSPF进程,抓AR3发出的目标地址是组播的1类LSA: 上图抓包显示是发送给区域1内邻居关系的,声明自己通过虚链路成为ABR设备。
<AR3>dis ospf lsdb router 10.3.3.3 如下查看在区域1的flag(options)置位
Area: 0.0.0.1 在区域1通告1类LSA
Link State Database
Type : Router
Ls id : 10.3.3.3 描述AR3的状态,即为AR3的RID
Adv rtr : 10.3.3.3 AR3通告的LSA,即为AR3的RID
Ls age : 130
Len : 36
Options : ABR VIRTUAL E 通告自身是因为虚链路成为的ABR
seq# : 80000008
chksum : 0x4f25
Link count: 1
* Link ID: 10.1.23.2
Data : 10.1.23.3
Link Type: TransNet
Metric : 100
总结: 虚链路通过单播报文建立连接关系。 虚链路建立后的设备AR3在区域0和虚链路穿越的区域1的1类LSA有不同的类型表示:
- 区域0:通告自己是ABR并添加新的链路状态。
- 虚链路穿越的非骨干区:通告自身为ABR,options(flag)字段V bit置位。
虚链路的使用场景2:
- 骨干区域的备份
- 如上在3和4之间的非骨干区域建立虚链路(骨干区域),1和2断开后,骨干区域仍然可以连成一片。*
- 次优路径的解决 上图中AR8访问AR5的环回口,分析可得:AR5-AR7是1类LSA,AR5-AR6-AR7是1类LSA转3类LSA,1类LSA优于3类LSA,虽然AR5-AR7之间链路开销为100,路由器仍会选择此路径。 实际查看: 从上图判断,访问路径应为AR8-AR7-AR6-AR5(cost累加为3)。 上图可知访问路径实际为AR8-AR7-AR5。
::: tip 每一台设备都会独立计算最优路径,如上图中AR8的路由表中,根据开销计算可知路径AR8-AR7-AR6-AR5,但AR7的判断是直接转发给AR5: ::: 如果在AR6和AR7之间做虚链路,AR6-AR7之间传递1类LSA,同类LSA优选开销更小的,就可以解决次优路径的问题:
[AR6-ospf-1-area-0.0.0.1]vlink-peer 10.7.7.7
[AR7-ospf-1-area-0.0.0.1]vlink-peer 10.6.6.6
建立虚链路后出现1类LSA: 此时AR7的路由表选择了开销值更小的路径,转发给了AR6:
虚链路场景3: 没有合理配置虚链路会造成路由的环路: 上图中AR14访问AR11的环回口,路径如下。 AR14-AR11: AR13通过到AR10的虚链路学习到AR11的路由,但需要走实际链路到AR12: AR12收到的1类LSA开销默认到AR11: AR11-AR14: AR13传递了包含AR14的3类LSA,根据虚链路,AR13是在AR10后的,所以拓扑计算需要先到AR10: 根据虚链路AR10转发到AR13,走实际链路到AR12: AR13在区域1内泛洪AR14的3类LSA (包括虚链路) ,AR12是ABR,不计算该3类LSA,AR12转发到AR14,走骨干区域AR11,发生环路: 路径如下: ::: tip 上图中AR11和AR14的环回口通信,AR14环回口的描述由AR13转为3类LSA在区域1泛洪传到AR12,通过虚链路将3类LSA传到AR10,AR10是通过单播报文学到AR14的环回口,然后将3类LSA在区域0中泛洪,传到AR11,AR11再通过1类LSA发给AR12。 AR11到AR14时,AR11中的路由是通过AR10学习的,路由先走到AR10,AR10访问AR14时需要走虚链路,实际路径是先到AR12。AR12从AR11、AR13都学到了AR14的路由,优选骨干区域,就形成了环路。 ::: ::: warning 上述AR12在骨干区域0中收到描述AR14路由的3类LSA路径是:AR10-AR11-AR12。不能从AR10直接将3类LSA送到AR12(AR10和AR12互联的0/0/1口属于区域1。) OSPF以接口划分区域,一个接口只能被宣告到一个区域。 ::: 改进:
- 将AR10-AR13的虚链路改到AR12-AR13。
- 在AR10-AR13存在虚链路的基础上,再增加一条AR10-AR12的虚链路(或再增加一条AR12-AR13的虚链路)。 ::: warning ABR通告3类LSA时,会把3类LSA的adv rtr改成自身的RID,后续转发时adv rtr不会改变。 如下是AR11收到AR10转发来的AR13通告的AR14路由,adv rtr仍为AR13: 上述改进2,AR13通告3类LSA时,adv rtr为AR13的RID,AR10转发时adv rtr不变,即AR12从AR10收到的是AR13通告的信息,虚链路是AR12-AR10-AR13,走实际链路就是AR12-AR13。 即路由路径是AR14-AR13-AR10-AR12-AR13-AR14。不会出现环路。 :::
虚链路打破了原有ospf的防环机制,所以虚链路需要新的机制来防止环路。 下图是AR15和AR18的环回口通信环路: 防环规则:
- 虚链路建立后,ABR不会向虚链路穿越的区域泛洪骨干区域的LSA。 (如上图,AR18学到AR15的骨干区域3类LSA后,不会再向区域1泛洪)
- 虚链路建立后的ABR,向其他非骨干区域泛洪骨干区域的LSA时,需要在虚链路穿越的区域学习到对应的3类LSA(虚链路是逻辑上的链路,需要对应实际链路。)
满足上述两条规则,LSA才可以正常泛洪。
骨干区域的3类LSA数量: 以上图为例,AR2和AR3存在虚链路: 区域0内的3类LSA数量=区域1内网段数量×区域1内ABR数量+区域2内网段数量×区域2内ABR设备=1×2+1×1=3 区域1内的3类LSA数量=区域0内网段数量×区域0内ABR数量+区域2内网段数量×区域2内ABR设备=1×1+1×1=2(虚链路建立后出现的ABR不会向虚链路穿越的区域泛洪骨干区域的3类LSA。)