收到对方的hello包,但是还没收到含有自己RID的hello包,即对方没有收到自己的hello包。
这个时候发送 hello(224.0.0.5)中DR字段为全零,因为还没有选出 DR。
Hello包的参数:
1、自己RID 2、Area ID 3、hello-interval 4、hello-deadinterval 5、网络掩码 6、优先级 7、DR/BDR 8、邻居RID 9、认证信息三、TWO-WAY:
两个OSPF路由器都从对端发来的hello包中发现自己的RID。建立邻邻居关系。
建立邻居关系后,邻居路由器之间会判断是否需要建立邻接关系
1、 如果是point-to-point链路,需要建立邻接关系
2、 如果是point-to-multipoint链路,需要建立邻接关系
3、 如果网络类型是虚链路,需要建立邻接关系
4、 本地路由器是网段上的DR,需要建立邻接关系
5、 本地路由器是网段上的BDR,需要建立邻接关系
6、 邻居路由器是网段上的DR,需要建立邻接关系
7、 邻居路由器是网段上的BDR,需要建立邻接关系
广播网络这个阶段选举DR/BDR。DR 一旦当选,除非路由器故障,否则不会更换,即使后来的路由器priority 更高
HELLO包在广播和P2MP网络中是以组播形式发送的,而在NBMA和P2P网络中是以单播发送,都是三层转发。OPSF在广播型网络和NBMA网络中需要选举DR/BDR。如果DR/BDR的选举是根据同一区域而不是同一网段,也就是说可以跨路由器进行选举,那么,首先组播就不能跨路由,其次既然DR/BDR都还没选出来,跨网段的路由也是没有的,单播也自然无法通过。这样一来,由于HELLO包根本无法传到,何谈选举DR/BDR?(一句话:由于HELLO包只能在邻居间交互,而邻居间必须是同一网段,所以DR/BDR选举也要在同一网段进行)。
预启动状态,OSPF路由器建立主从关系,然后由主确定一个发送DD的序列号。
选主从原则:RID大的为主。头两个 dd 报文为空,不包含 lsa 的数据,用于协商序列号。这时候都认为自己是主。
在EX-START状态开始进行Master、Slave的协商。协商M/S的目的是为了决定在后续的LSA交互中,谁来决定DD(Database Description)报文的序列号(Sequence Number),而Router-ID大的那个OSPF路由器的接口将会成为Master,由它来决定DD Sequence Number,对端则成为slave。
这里要注意Master不是DR,要注意与DR的概念进行区分。这个协商过程,是由交互DBD包实现的,使用的是空的DBD包,也就是不包含任何LSA头部的DBD包,这个包当中,有三个位非常关键:I、M、MS。用于ex-start阶段协商Master/Slave的DBD包,I位(或叫做init位)都是置0的,另外MS位如果置1,表示DBD报文始发路由器认为自己的Master,当然起初大家都这么认为,在一系列DBD交换后,就会得到选举结果,被选举为Slave的OSPF接口会将发送的DBD包MS位置为0;另外M位表示More,如果一个OSPF接口发送的DBD包M位置1,在表示这不是最后一个DBD,后续还有DBD包待发送。
常见:
1)router lsa:LID为RID。描述路由器与OSPF区域接口的信息,只在本区域内flooding。
2) network lsa:LID为DR连接该区域的接口IP。有DR产生,描述本区域的路由器信息。是保证在广播网络中只产生一个network lsa 。完成full状态后。路由器使用spf算法,以自己为根,计算出到达已知网络的最佳路径。
若出现无法建立邻居的情况:
1、检查物理链路
检查路由器之间IP地址是否正确,直连能否PING通,如果不通,看看接口有没有打开。
检查命令:show ip ospf interface bri
2、检查OSPF的配置
检查OSPF是否配置正确,相应的接口有没有宣告成功,或者宣告的地址是否匹配,或者是区域等不匹配,再或者是命令本身的错误。
检查命令:show run | s router ospf
3、检查路由器之间OSPF是否有认证存在
可以使用debug ip ospf adj 来查看,可以自己使用不同的情况来验证,如果日志开启,也应该会有提示显示
检查命令:debug ip ospf adj
4、检查OSPF宣告的区域类型是否匹配
区域类型通常有三种Stub/transit/NSSA,也可以通过DEbug来检查:
R1#debug ip ospf adj
5、MTU是否不匹配
邻居建立过程中MTU需要匹配,通常MTU不匹配的情况下,邻居关系始终停留在EXSTART状态,MTU默认为1500,可以通过
命令:Show ip ospf interface +接口来查看,也可以通过Debug。
6、检查是否有访问控制列表ACL禁止了OSPF流量,或者接口被PASSIVE
OSPF通常使用组播地址 224.0.0.5 来发送Hello包,如果被阻止,OSPF邻居无法建立。
检查命令有:show ip os int bri , show ip os nei , show ip access-list .
7、两个路由器的Router id相同,
如果两个路由器的Router id相同,则ospf的master和slave关系不能确定。
检查命令: show ip os , show ip prot , show run | s router ospf
8、另外还有很多原因可导致OSPF邻居不能建立
如:Hello/dead 间隔不匹配 ;
使用了第二地址secondary IP来建立OSPF adjacency