OSPF for IPv6协议的NSSA区域扩展特性研究

时间:2022-08-20 05:28:48

OSPF for IPv6协议的NSSA区域扩展特性研究

【摘 要】本文简述了OSPF for IPv6协议下的NSSA区域扩展属性,提出和分析了多ABR进行转换时可能出现的无法学到路由问题,最后在主流厂商现有实现的基础上提出解决方案。

【关键词】OSPF for IPv6;NSSA区域;ABR;LSA-type 7

0 引言

在数据通信领域,OSPF(Open Shortest Path First-开放最短路径优先)协议因其快速收敛、无自环等特性而广泛使用,并存在适应IPv6的OSPF version3协议,同时OSPF协议扩展属性NSSA(Not So Stubby Area)区域亦适配扩展。

1 NSSA区域简述

NSSA区域允许引入自治系统外部路由,由ASBRType7 LSA(NSSA-LSA)通告给本区域。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA(AS-external-LSA)传播到其他区域。

图1 OSPFv3划分区域典型组网图

如图1所示,整个OSPFv3组网被分为区域0、区域1和区域2。区域0是骨干区,区域1配置为NSSA区,区域0和区域1的区域间路由信息会到区域2,区域1引入的RIP路由生成的7类LSA在ABR1设备上进行7转5后生成5类LSA到骨干区,区域2通过骨干区学到NSSA区域引入的外部路由。

2 现有协议下NSSA区域的问题

在实际网络配置中会出现多个ABR链接NSSA区域及骨干区域的情况,这些ABR均具备7转5能力,选取哪一个ABR来进行转换?选取简单的双ABR情况进行分析。网络拓扑如图2所示:

图2 双ABR网络拓扑

网络配置:

【RT-A】:

ospfv3 1

Router-id 1.1.1.1

Area 1

Nssa

Interface e0/0/2

Ospfv3 1 area 1

Ipv6 address 100:1:1:: 64

【RT-B】:

ospfv3 1

Router-id 2.2.2.2

Area 0

Area 1

Nssa

Interface e0/0/2

Ospfv3 1 area 1

Ipv6 address 200:1:1:: 64

Interface g0/1/3

Ospfv3 1 area 0

Ipv6 address 200:1:2:: 64

【RT-C】:

ospfv3 1

Router-id 3.3.3.3

Area 0

Area 1

Nssa

Interface e0/0/2

Ospfv3 1 area 1

Ipv6 address 300:1:1:: 64

Interface g0/1/3

Ospfv3 1 area 0

Ipv6 address 300:1:2:: 64

【RT-D】:

ospfv3 1

Router-id 4.4.4.4

Area 0

Area 1

Nssa

Interface e0/0/2

Ospfv3 1 area 1

Ipv6 address 400:1:1:: 64

在RT-A上引入静态路由,查看RT-D上5类LSA,其source-id是3.3.3.3,而修改RT-B的router-id为3.3.3.4时,再次查看,其source-id是3.3.3.4,即优选router-id较大的来做7转5转换器。

基于用户自定义网络的需求,主流设备商提供了nssa区域的参数:

translate-always:指定ABR完成NSSA区域的7类LSA转换为5类LSA。

translate-never:指定ABR不能将NSSA区域的7类LSA转换为5类LSA。

图3 hello报文中的options

如在RT-B(其router-id仍为2.2.2.2)area1下配置:nssa translate-always,查看RT-D上5类LSA的source-id,由3.3.3.3变为2.2.2.2。通过截取报文发现由RT-B发出的hello报文中options置上NTbit位,如图3所示。

由RT-B发出的hello报文在维持邻居的过程中发送给RT-D,RT-D就会选择RT-B作为转换器。如果将RT-B与RT-D间链路断掉,此时只有选择RT-C作为转换器,查看RT-D上的5类LSA的source-id为3.3.3.3。

在RT-C ospfv3 1 area1下配置:nssa translate-never,查看Router-D上的LSA,并不存在转换得到的5类LSA,截取报文查看RT-B发出的hello报文的bit位并未变化。判断7转5角色时,如果配置translate-never参数,则区域不进行转换处理。此时恢复RT-B与RT-D间的链路,预料中应该选择RT-B为转换器,但在现有实现中:RT-D并不存在相应前缀的5类LSA。这样就存在:如果在配置过程中,误将多ABR情况下的router-id较大的ABR上NSSA区域配置translate-never参数,且无ABR配置translate-always参数,就会出现上述情况下均未被选为转换器的问题,进而出现存在路由但无法学到的问题。

3 解决方案

观察hello报文的options,其占有24个bit位,因此可以仿效always参数在options添加bit位,称之NEbit位,在配置translate-never参数后,将此标记置1,然后通过邻居间交互的hello报文发给邻居,告之已置上never参数无法成为7转5转换器,在进行转换器选取时,将此ABR排除在外。

写出伪代码如下:

在配置处理中:

If(bit_test(flag, translate-never)) //检查如果配置never参数

Bit_set(options.NE,1) //设置NEbit

Else Bit_reset(options.NE)

选举7转5转换器时:

if(bit_test(options.NE))

Break //设置NEBIT位的ABR跳出转换器选举

Else Seclect_the_transltor //继续选举流程

在收到携带NEbit的hello报文时,其源ABR不参与7转5转换器的选取,从而解决上述问题。我们按照上述伪代码进行编码、版本编译后,可以验证配置:

【RT-C-AREA-1】:Nssa translate-never

截取hello报文,其optinons的NEbit位已置上,且RT-D也能收到转换后的5类LSA,从而验证问题已解决。

4 总结

本文首先对IPv6下OSPF协议的NSSA区域进行简述,然后提出现有协议实现中存在多个ABR情况且无ABR配置translate-always参数情况下,给router-id最大的ABR配置translate-never参数后,无法学到路由的问题,最后给出一种解决思路和验证方案。

【参考文献】

[1]J.Moy,R.Coltun.Request for Comments 5340:OSPF for IPv6[Z].July 2008.

[2]P.Murphy. Request for Comments 3101:The OSPF Not-So-Stubby Area(NSSA)Option[Z].January 2003.

[3]黄瑜岳,梁伟.基于IPv6的OSPFv3协议的研究和实现[J].常熟理工学院学报,2006.

上一篇:计算机网络故障的处理及网络维护方法探讨 下一篇:清水混凝土工艺在变电站工程中的应用