首先从OSPF的邻居建立说起:
1,初始阶段,R1不知道它的邻居是谁,给R2发hello包时,邻居为空。
2,R2收到R1发的hello包时,发现hello中没有自己,于是将R1的route-id添加到自身的hello包里邻居列表中,此时状态为init(收到hello包但在邻居列表中没有看到自己)。
3,R1收到R2的hello包,在邻居列表中看到了自己,此时状态为2-way,并把R2的route-id添加到自身的hello包里邻居列表中,发给R2。
4,R2收到含有自身route-id的hello包,状态变为2-way,邻居建立完成。
接下来看下hello包的结构:
包头部分:
hello包部分:
ospf封装于IP协议之上,协议号为89.
ROUTE-ID
1.同区域两台直连。
两台直连的路由器router-id不能一致,如果一致则不能建立邻居关系,因为在exstart状态时会通过router-id确认主从关系,如果主从关系不能确认则不能达到完全邻居关系。
2.同区域两台不直连
R1-R2及R2-R3都可以正常建立邻居,但同步数据库的时候就会出现问题。因为R2的lsdb 中,关于adv为1.1.1.1的LSA1或LSA2只能有一份。
域内路由计算:
1.假设R1宣告一条路由10.10.10.0/24。R1会把这条LSA (adv=1.1.1.1,type=1,LS ID=1.1.1.1,Seq=A)发送给R2。R2收到后会发给他的邻居R3。
2.R3收到发现通告者是1.1.1.1,但是自己又没有这个网段,于是会给R2发送一个新的自己的LSA1 (adv=1.1.1.1,type=1,LS ID=1.1.1.1,seq=A+1)。
3.R2收到后会与之前从R1收到的LSA1进行比较,此时R2会选择从R3发过来的Seq更大的LSA1,于是也会转发给R1。
4.R1收到后发现自己有这个网段,又会发送一条新的自己的LSA1 ( seq=A+2) ,会一直出现这样重复的情况,而导致路由动荡。
域外路由计算:
1.假设R1引入一条路由10.10.10.0/24,R1会把这条LSA (adv=1.1.1.1,type=5,LS ID=10.10.10.0,seq=B)发送给R2,R2收到后会发给他的邻居R3。
2.R3收到发现adv为1.1.1.1,但是自己又没有这个网段,于是会给R2发送一个( adv=1.1.1.1,type=5,LS ID=10.10.10.0,age=3600s,seq=B)的LSA5。进行删除。
3.R2收到后,会与之前收到的LSA5进行比较,因为seq和check sum与之前的一样,所以会优选age=3600s的,然后也会转发给R1。
4.R1收到后发现自己有这个网段,又会发送一条新的LSA5 (seq=B+1),会一直出现这样重复的情况,而导致路由动荡。
AREA ID
两台直连路由器建立OSPF邻居关系要求宣告进同一区域,如果像上图R1的G0/0/0口宣告进区域0,R2的G0/0/0宣告进区域1,则邻居建立失败。
认证
OSPF的认证字段在OSPF的包头中。
Autype:认证类型。
0:不认证。
1:明文认证。
2:MD5认证
Authentication:认证信息
其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。
MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
OSPF可以在接口视图下配置认证,也可以在区域下配置认证。
OSPF要求认证类型和认证信息完全一致才可以建立邻居关系,如果一端认证配置在接口视图下,一端配置在区域视图下,只要认证信息完全一致也是可以建立邻居关系的。
网络掩码
广播型网络要比较掩码,但是P2P网络即使掩码不同也能建立起邻居关系。
因为P2P网络类型的路由器可以使用1类LSA的P2P和STUB类型独立表达自己接口的所有网络,且默认底层为PPP链路,不同网段也能访问。
HELLO 和DEAD时间
OSPF有四种网络类型,P2P,P2MP.广播和NBMA
其中广播和P2P默认的HELLO时间为10秒,DEAD时间为40秒。
P2MP和NBMA默认的HELLO时间为30秒,DEAD时间为120秒。
HELLO和DEAD时间要一致才能建立起邻居关系。
网络类型
NBMA只能与NBMA建立 full 邻接关系,与其他网络类型都无法建立FULL的邻居关系;(单播发现邻居)
广播 与P2P,能建立full 邻接关系,但不能正常计算路由;(构建的拓扑不一致)
广播 与 P2MP,通过修改hello/dead timer可以建立full邻接关系,但也不能计算路由;
P2P 与P2MP,通过修改hello/dead timer可以建立 full邻接关系,路由计算也正常。
区域类型不一致
option位中 ,e=1、n=0为普通/骨干区域。
e=0、n=0为stub区域,e=0、n=1为nssa区域。
total stub 与 stub可以建立邻居关系。
total nssa 与nssa可以建立邻居关系。
静默接口
OSPF设置了静默接口后,不接收也不发送HELLO包,自然无法建立邻居关系。
MTU值
只影响邻接关系,不影响邻居关系。
MTU字段在exstart状态进行比较, MTU在DD报文中,如果一致性不通过,就会停在exstart状态,如果不进行MTU一致性检测,报文会被重复分片,降低转发效率。
华为设备默认将DD中的MTU设置为0,并不做MTU的比较,如果使用ospf mtu-enable,,则DD报文中的MTU会被设置为IP MTU,并且在本接口对对端接口做MTU比较。