有俩个因数的影响分别是OSPF的报头和hello报文,下面分别来进行讲解。
一、OSPF报头,即每一个OSPF报文都会协商
1.version:要求两端一致的
2.area id:要求链路两端一致的(记住在一个区域内才能形成邻居关系)
3.router id:要求设备之间不同
1.直连设备之间 RID一定设置不同,设置相同之后会马上报错。
2.非直连设备之间 RID如果设置相同
如上图所示,AR1和AR3的router-id都设置为了10.1.1.1。
我们可以通过抓包来看AR1和AR3都在不断的撤销,为什么会不断的撤销呢?
答:我们可以这样来理解,可以把 OSPF 里的 RID 理解成路由器的 “身份证号”,每个路由器必须有唯一的 ID,这样大家才能互相识别。假设有两台路由器 A 和 B,它们不在同一个网段(比如 A 在 192.168.1.0 网段,B 在 192.168.2.0 网段),但被错误地设置了相同的 RID(比如都是 1.1.1.1)。
当 A 要把自己的网段信息(192.168.1.0)告诉别人时,会发一个 “自我介绍”(1 类 LSA),上面写着 “我是 1.1.1.1,我有 192.168.1.0 这个网段”。
B 收到这个 “自我介绍” 后,一看 RID 是 1.1.1.1,会误以为这是 “自己以前发的旧信息”(因为 B 觉得自己的 ID 才是 1.1.1.1)。B 会想:“这信息不对啊,我现在的网段是 192.168.2.0,得发个新的纠正一下”,于是 B 会发一个新的 “自我介绍”,序列号比 A 的大,内容是 “我是 1.1.1.1,我有 192.168.2.0 这个网段”。
A 收到 B 的新信息后,也会犯同样的错:“这不是我发的啊,我的网段是 1.1.1.0,我得再发个更新的!” 于是 A 又发一个序列号更大的 “自我介绍”,说自己有 192.168.1.0。
就这样,A 和 B 都觉得对方在 “冒充自己发错信息”,于是不断用更大的序列号发新的 “自我介绍” 去 “纠正” 对方,同时把对方发的信息当成 “错误旧信息” 撤销掉。
结果就是:网络里的其他设备一会儿收到 A 说的 192.168.1.0,一会儿收到 B 说的 192.168.2.0,然后又被对方撤销,反复循环,导致这两个网段的路由信息一直不稳定。
我们可以再查看一下lsdb这样更加清晰,注意看下面俩张图的Age,是不是一直都在不断的刷新。
最后得出的结论:邻居可以正常建立,但一段时间后,设备OSPF进程会自动重启,选择不冲突的地址做为RID,下面的图片就是AR1重启之后的RID。所以我们在正常网络规划的时候不要把RID设置成一样的。
4.authentic type/data:要求链路两端一致
二、hello报文
1.netmask:要求链路两端一致
要求两端在同一个相同的网段内
1.两端在不同网段,但是可以实现地址通信(这种是不可取的,这种做出来邻居是直接断开的如下图所示)
如上图所示用AR1的10.1.123.1去访问AR2的10.1.123.2肯定可以通信,如果出现这种情况我们如何排查呢?
我们用这一条命令就可以排除出来,找到数值不为0的这一项就知道掩码出现了问题。
2.hello time:要求一致
3.dead time:要求一致
4.option(N、E):要求一致
需要记住的命令:
reset ospf process 重启ospf进程
[AR2]display ospf error interface GigabitEthernet 0/0/0 可以查看OSPF接口接收报文的协商错误计数
思考为什么OSPF为什么要设计复杂报文交互机制?
答:因为OSPF是基于IP网络的,IP不存在安全可靠的机制,所以OSPF要自身设计