OSPF:开放式最短路径优先协议
无类别链路状态型IGP协议;由于其基于拓扑进行更新收敛,故更新量会随着拓扑的变大而成指数上升;故OSPF协议为了能在大、中型网络中运行,需要结构化的部署----合理的区域划分、良好的地址规划 正常等开销负载均衡; 跨层封装协议,协议号89;
组播更新 224.0.0.5 224.0.0.6 触发更新+周期更新(30min)
OSPF的五种数据包:
hello包 -- 组播收发,用于邻居、邻接关系的发现、建立、周期保活
DBD -- 数据库描述包-- 本地LSDB(链路状态数据库)目录
LSR---链路状态请求 -- 用于询问对端本地未知的LSA信息
LSU-- 链路状态更新 -- 用于共享具体的每一条LSA信息
LSack 链路状态确认 -- 确认包
OSPF的状态机(8种):
Down 一旦接收到对端的hello包进入下一个状态
Init 初始化 若接收到的hello包中存在本地的RID,那么进入下一个状态机
2way 双向通讯 邻居关系建立的标志
条件:点到点网络直接进入下一个状态机;MA网络进行DR/BDR选举,非DR/BDR之间不能进入下一个状态机;
Exstart预启动 使用不携带数据库目录信息的DBD包,进行主从关系的选举,RID数值大为主,优先进入下一个状态机
exchange准交换 使用携带数据库目录信息的DBD包,进行目录共享,需要ACK确认
loading加载 接收到其他邻接的目录信息后,和本地进行比对,若本地存在未知的LSA信息,将使用LSR询问对端,对端使用LSU来更新这些LSA信息,直至双方数据库一致;
LSU需要ACK确认;
Full 转发 标志着邻接关系已经建立;
补充:
1)在MA网络中(进行DR/BDR选举)存在7种状态机
init是路由器A收到邻居B的hello包,但该hello包中没有A的RID;
2)在点到点网络init状态机在判断可以建立邻居后,直接进入exstart状态机;没有2way状态机----6种状态机
在点到点网络实际仅存在邻接关系;在MA网络(选举DR/BDR)网络中存在邻居和邻接关系;
3)若邻接间的数据库默认一致,将不需要进入loading状态机;
4)在hello时间较大时,比如p2mp和nbma工作方式,默认hello time为30s;
hello包收发的间隔较大,从down状态到init需要很长时间的等待,故在两种状态机,存在一个尝试状态机;
5)华为设备中ospf存在加速建邻机制--- 在两台路由器进行过一次邻接关系建立后,双方存在对端的缓存信息后;二次建邻时将快速完成状态机的切换;--前提是缓存未删除---认证或拥塞
6)在hello包存活时间为30s时,双方建立邻居关系等待时间较长时,会进入一个状态Attempt
OSPF的工作过程:
路由器上启动OSPF协议后,直连的邻居间,开始组播收发hello包,hello包中将存储本地已知邻居的RID,在双方RID均已知的情况下,建立邻居关系,生成邻居表;
邻居关系建立后,邻居间将进行条件匹配,匹配失败将停留为邻居关系,仅hello周期保活即可;匹配成功者间将进行邻接关系的建立;
邻接关系间的路由器,将使用DBD/LSR/LSU/LSack来获取本地未知的所有LSA信息;使得同一区域内所有路由器的数据库完全一致;---- 数据库表;
当本地数据库完成同步后,将数据库-->有向图-->树型结构图-->将本地到达所有未知网段的最短路径加载于本地路由表中;
收敛完成,仅hello包周期保活即可;正常每30min,邻接关系间再进行一次DBD的对比,若一致及正常;若不一致将马上进行同步;
结构突变:触发更新
- 断开网段 直连断开网段的设备,直接使用LSU告知邻接,需确认
- 新增网段 直连新增网段的设备,直接使用LSU告知邻接,需确认
- 无法沟通 hello time 对应的 dead time ;dead time 到时时,断开邻居关系,去除基于该邻接共享的LSA计算所得路由;
关于OSPF协议从邻居建立成为邻接的条件:
根据网络类型决