一、邻居关系建立
状态含义:
down:这是邻居的初始状态,表示没有从邻居收到任何信息。
init:在此状态下,路由器已经从邻居收到了hello报文,但是自己的router id不在所收到的hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
2-way:在此状态下,路由器发现自己的router id存在于收到的hello报文的邻居列表中,已确认可以双向通信。
邻居建立过程如下:
1、rta和rtb的router id分别为1.1.1.1和2.2.2.2。当rta启动ospf后,rta会发送第一个hello报文。此报文中邻居列表为空,此时状态为down,rtb收到rta的这个hello报文,状态置为init。
2、rtb发送hello报文,此报文中邻居列表为空,rta收到rtb的hello报文,状态置为init。
3、rtb向rta发送邻居列表为1.1.1.1的hello报文,rta在收到的hello报文邻居列表中发现自己的router id,状态置为2-way。
4、rta向rtb发送邻居列表为2.2.2.2的hello报文,rtb在收到的hello报文邻居列表中发现自己的router id,状态置为2-way。
因为邻居都是未知的,所以hello报文的目的ip地址不是某个特定的单播地址。邻居从无到有,ospf采用组播的形式发送hello报文(目的地址224.0.0.5)。
二、lsdb同步(一)
状态含义:
exstart(信息交换初始状态):邻居状态变成此状态以后,路由器开始向邻居发送dd报文。master/slave关系是在此状态下形成的,初始dd序列号也是在此状态下确定的。在此状态下发送的dd报文不包含链路状态描述。
exchange(信息交换状态):在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的dd报文。
loading(加载):在此状态下,路由器与邻居之间相互发送lsr报文、lsu报文、lsack报文。
full:lsdb同步过程完成,路由器与邻居之间形成了完全的邻接关系。
lsdb同步过程如下:
1、rta和rtb的router id分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当rta的邻居状态变为exstart后,rta会发送第一个dd报文。此报文中,dd序列号被随机设置为x,i-bit设置为1,表示这是第一个dd报文,m-bit设置为1,表示后续还有dd报文要发送,ms-bit设置为1,表示rta宣告自己为master。
2、当rtb的邻居状态变为exstart后,rtb会发送第一个dd报文。此报文中,dd序列号被随机设置为y(i-bit=1,m-bit=1,ms-bit=1,含义同上)。由于rtb的router id较大,所以rtb将成为真正的master。收到此报文后,rta会产生一个negotiation-done事件,并将邻居状态从exstart变为exchange。
3、当rta的邻居状态变为exchange后,rta会发送一个新的dd报文,此报文中包含了lsdb的摘要信息,序列号设置为rtb在步骤2中使用的序列号y(隐式确认),i-bit=0,表示这不是第一个dd报文,m-bit=0,表示这是最后一个包含lsdb摘要信息的dd报文,ms-bit=0,表示rta宣告自己为slave。收到此报文后,rtb会产生一个negotiation-done事件,并将邻居状态从exstart变为exchange。
4、当rtb的邻居状态变为exchange后,rtb会发送一个新的dd报文,此报文包含了lsdb的摘要信息,dd序列号设置为y+1, ms-bit=1,表示rtb宣告自己为master。
5、虽然rta不需要发送新的包含lsdb摘要信息的dd报文,但是作为slave,rta需要对master发送的每一个dd报文进行确认。所以,rta向rtb发送一个新的dd报文,序列号为y+1,该报文内容为空。发送完此报文后,rta产生一个exchange-done事件,将邻居状态变为loading。rtb收到此报文后,会将邻居状态变为full(假设rtb的lsdb是最新最全的,不需要向rta请求更新)。
三、lsdb同步(二)
1、rta开始向rtb发送lsr报文,请求那些在exchange状态下通过dd报文发现的、并且在本地lsdb中没有的链路状态信息。
2、rtb向rta发送lsu报文,lsu报文中包含了那些被请求的链路状态的详细信息。rta在完成lsu报文的接收之后,会将邻居状态从loading变为full。
3、rta向rtb发送lsack报文,作为对lsu报文的确认。rtb收到lsack报文后,双方便建立起了完全的邻接关系。
从建立邻居关系到同步lsdb的过程较为复杂,错误的配置或设备链路故障都会导致无法完成lsdb同步。为了快速排障,最关键的是要理解不同状态之间切换的触发原因。
四、整体流程图
这是形成邻居关系的过程和相关邻居状态的变换过程。
down:这是邻居的初始状态,表示没有从邻居收到任何信息。在nbma网络上,此状态下仍然可以向静态配置的邻居发送hello报文,发送间隔为pollinterval,通常和router deadinterval间隔相同。
attempt:此状态只在nbma网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为hellointerval。如果router deadinterval间隔内未收到邻居的hello报文,则转为down状态。
init:在此状态下,路由器已经从邻居收到了hello报文,但是自己不在所收到的hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的hello报文的邻居列表中。
2-way received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的hello报文的邻居列表中)。init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入exstart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-way。
2-way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
1-way received:此事件表示路由器发现自己没有在邻居发送hello报文的邻居列表中,通常是由于对端邻居重启造成的。
exstart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送dd报文。主从关系是在此状态下形成的;初始dd序列号是在此状态下决定的。在此状态下发送的dd报文不包含链路状态描述。
exchange:此状态下路由器相互发送包含链路状态信息摘要的dd报文,描述本地lsdb的内容。
loading:相互发送ls request报文请求lsa,发送ls update通告lsa。
full:两台路由器的lsdb已经同步。
对比手机APP控制,SR101语音遥控器的优势在哪里?
当华为邂逅Vogue:迸发不一样的火花!
SK海力士发布2022财年第三季度财务报告
华为P50系列或将问鼎DXOMARK榜首
用3DA87C制作调频发射电路,3DA87 FM transmitter
OSPF状态机详细过程简析
DC-DC升压电路图和工作原理讲解
智能手机怎么做防水
基于DSP和CPLD的小型无人机飞控计算机设计
MAX1121 1.8V、8位、250Msps模数转换器,L
Pico Neo 2 VR一体机亮相CES 将带来优秀的行业应用和游戏体验
孟晚舟担任华为轮值董事长 华为三位轮值董事长确认
上一代搭载A13芯片与5nm工艺的麒麟芯片升级后的区别在哪?
为什么有人向AI泼冷水
华为芯片困境的转机来了?
Sonnet发布具有11个端口的雷电4扩展坞
USB开发的这个错误你犯了吗
英国制造新型硅基可持续使用60年的LED灯泡
机器人“刷机”将带来市场的一轮洗牌?
怎样将一个开源游戏移植给一款32位微控制器