超详细的OSPF邻居状态机详解

黄庆龙
关注

现在我们来解释Hello里的几个字段:(1)router id:建立邻居的OSPF,两边路由器router id不能相同,否则即使建立成功了,也会有问题。

① 两台路由器直连,Router ID 一样,邻居无法建立。

两台路由器Router ID配一样,路由会提示你冲突了:

抓包看到他们确实已发Hello包,但是呢,就是建立不起来。

可能有人就会问,协议程序都是人为控制的,router id一样,你允许它们建立邻居不就好了。
我们来假设一下,如果两台直连router id一样能建立邻居关系,那到了exstar状态时需要选举DD报文的主从关系,主从关系是根据router id 最大来确定为主路由器的。如果都一样,就无法选举,从而就无法进行LSDB信息交换了。    既然到了exstart状态会有问题,那专家们设计协议时就认为在一开始的建立邻居的时候就扼杀掉不就好了,没必要浪费时间。

②两台路由器非直连,Router ID 一样,邻居可以正常建立,但路由会振荡。

现在,龙哥打算在R4起个loopback口,配置10.10.10.10/24,然后宣告到OSPF。

假设R4宣告一条路由10.10.10.0/24,R4会把这条LSA(adv=4.4.4.4,type=1,LS ID=4.4.4.4,seq=8001)发送给R5,R5收到后会发给他的邻居R6,R6收到发现通告者是4.4.4.4,但是自己又没有这个网段,于是会给R5发送一个自己的LSA1(age=1s,seq=8002),R5收到后会与之前adv=4.4.4.4的LSA1进行比较,选择这条seq更大的LSA1,然后也会转发给R4,R4收到后发现自己有这个网段,又会发送一条新的LSA1(seq=8003),会一直出现这样重复的情况,而导致路由动荡。

路由动荡具体表现什么样的?我们可以长ping一下,就知道了,会发现偶尔不通。

现在,我们继续在R4采用引入的方式,引入外部路由20.20.20.20,再看看。

R4引入一条路由20.20.20.0/24,R4会把这条LSA(adv=4.4.4.4,type=5,LS ID=20.20.20.0,seq=8001)发送给R5,R5收到后会发给他的邻居R6,R6收到发现通告者是4.4.4.4,但是自己又没有这个网段,于是会给R5发送一个(age=3600s,seq=8001)的LSA5,R5收到后,会与之前收到的LSA5进行比较,因为seq和check sum与之前的一样,所以会优选age=3600s的,然后也会转发给R4,R4收到后发现自己有这个网段,又会发送一条新的LSA5(seq=8002),会一直出现这样重复的情况,而导致路由动荡。

抓包可以看到,R4和R5一直在更新LSA:

抓包可以看到,R6和R5一直在更新LSA:

③不同区域的两台路由器,Router id一样,邻居可以建立,路由会振荡。

可以上次,邻居是可以建立的。

如果R4和R6不引入外部路由的话,是不会出现问题的。因为ospf在区域间使用LSA3,LSA3是由区域的ABR根据LSA1、LSA2产生的,adv是ABR的router-id,区域间路由只是被当成叶子挂在ABR上,本区域内的spt树上不会出现在有相同router-id的节点,也就不会出现问题。但是如果在相同router-id的设备上做引入的时候就会出现问题了,因为asbr的router-id是需要被ospf域内的所有路由器所知道的,如果发现asbr的router-id与本设备的router-id一样时,会出现问题。

现在我们也在R4引入一条路由20.20.20.0/24,R4会把这条LSA(adv=4.4.4.4,type=5,LS ID=20.20.20.0,seq=8001)发送给R5,R5收到后会发给他的邻居R6,R6收到发现通告者是4.4.4.4,但是自己又没有这个网段,于是会给R2发送一个(age=3600s,seq=8001)的LSA5,R5收到后,会与之前收到的LSA5进行比较,因为seq和check sum与之前的一样,所以会优选age=3600s的,然后也会转发给R4,R4收到后发现自己有这个网段,又会发送一条新的LSA5(seq=8002),会一直出现这样重复的情况,而导致路由振荡。

路由动荡具体表现什么样的?我们可以长ping一下,就知道了,会发现偶尔不通。

(这里我加了-t 25 是为了更明显看出丢包,路由振荡,修改了超时时间。)

(2) Area-id:OSPF是基于接口划分区域的,所以建立邻居关系的路由器必须在同一区域,即 区域id需要一直。

(3)认证:建立邻居关系的两端必须保证认证类型和认证数据要一致。

(4) 掩码:在MA/NBMA掩码要一致,P2P没限制。

(5)Hello/Dead时间:时间参数要一致。

(6)Option:其中重点参考Option中的N和E bit位,N/E必须置为相同(N/E主要表示两端路由器在什么样的区域)

 N=1  E=0 :NSSA

 N=0  E=1 :普通区域

 N=0  E=0  :STUB区域

(7)DD报文中的有个MTU字段,两端需要一致(只会影响LSDB的同步,从2-way到full;华为设备默认不比较该参数,但不一致,后面可能会卡在exchange或loading,可以通过在接口下配置ospf mtu-enable命令使能检查邻居DD报文所携带的MTU是否超过本端的MTU值)

4、状态机

接下来,就是本期要介绍的OSPF状态机,介绍之前,我觉得有必要先理解一下:邻居关系和邻接关系。

邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。

邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系

邻居关系,就是好比你家附近,最近搬了一个新邻居,你们彼此经常路上都会遇到,你也知道她住哪的,她也知道你住哪的,只是你们没有彼此深入了解,交流。

邻接关系,也是好比你家附近,最近搬了一个新邻居,你们不仅彼此知道对方住哪的,你们因为又一次小区活动,得以认识,于是互相交流,了解对方喜好,哪里人等等,那这个时候你们就是邻接关系。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存