OSPF-1-OSPF的数据库交换(2)
2.Hello过程:
(1)在同一子网中发现其他运行OSPF的路由器
所有启用了OSPF的接口,都会监听发往224.0.0.5的组播Hello消息,这是表示所有OSPF路由器的组播地址。Hello包使用接口上的主用IP地址作为源发出,并不会使用备用IP,(OSPF路由器会通告备用IP,但不会用那些IP发送Hello包和建立邻居关系,与EIGRP和RIP一样)。如果OSPF邻居一方或双方的接口使用“借用IP地址(unnumbered)”,他们也会建立完全邻接关系。
(2)检查某些配置参数是否匹配
当两台路由器都收到了对方发来的Hello包,也就是都发现了对方后,他们会根据收到的Hello包中的参数进行如下检查:
-必须通过认证过程
-必须在同一个子网中,子网掩码也必须相同
-OSPF区域必须相同
-区域类型必须相同(普通,末节,NSSA)
-RID不能重复
-OSPF Hello和失效计时器必须相同
但凡上述参数中有一项不匹配,两台路由器都无法形成邻居关系。OSPF PID(进程ID)可以不同
还有DD包的MTU大小必须相同,MTU的检查不是Hello检查的一部分,MTU不匹配会对ExStart和Exchange阶段的数据库同步过程带来不良影响,但它并不会阻止两台路由器成功建立邻居关系,也包括进入2- Way状态。
(3)在两台路由器之间确认双向可见状态
路由器会在其发出的Hello包中包含了一个邻居列表,表示它已经从这些邻居那里收到了有效且能够接受的Hello包。这个列表的大小是可变的,携带在每个Hello包的尾部,列表中包含的RID表示发出这个Hello包的路由器已经收到并接受了这些路由器发来的Hello包。如果路由器在其邻居发来的Hello包中看到了自己的RID,它就可以确定它和邻居都收到了彼此的Hello包。
(4)监控邻居的工作状态,发生问题及时做出响应
提供邻居之间的“心跳”功能。邻居会按照Hello间隔来发送Hello包, 如果在经历了比失效间隔长的时间 后,仍没有收到Hello包,路由器就会认为这个邻居已经失效。如果接口上的OSPF网络类型是 广播或点到点, 那么这个接口的Hello间隔是10秒;如果接口上的OSPF网络类型是非广播或点到多点,则这个接口的Hello间隔是30 秒;失效间隔默认为Hello间隔的4倍。
下边的debug消息展示了这台路由器的hello和dead不一致,“C”表示“configured”,“R”表示“received”,路由器尝试使用10/40。
下边列出了在同一个接口下R1的hello和dead间隔
下边R1 show了 s0/0.100 的一个邻居,full状态,表明路由器完成了LSDB交换,注意当前失效计时器倒计时,这个例子中是两分钟。1:58表示R1上一次从邻居10.1.111.6接收到Hello包是两秒之前。
3.向邻居传送LSA头部
两台路由器都收到了彼此的Hello包,并且通过了参数检查,他们并不会马上开始发送携带LSA的数据包。他们会先创建并发送DD包,DD包中包含每个LSA的头部。这些头部中包含的信息足够区分每个LSA及其版本,而无需传输LSA的内容。也就是说路由器交换的是她所知道的所有LSA的索引列表;下一步是让路由器从这些LSA中,请求他所缺失或过时的LSA。
DD消息使用一种OSPF定义的简单错误恢复进程。每个DD包中都包含了多个LSA头部,并且分配了一个序列号。接收方通弄向发送方发送一个与其收到的DD包序列号相同的DD包,来确认自己收到了发送方发出的DD包。发送方的发送窗口为一个数据包大小,它会在收到确认后,才发送下一个DD包。