OSPF
OSPF---开放最短路径优先协议
动态路由判定依据:选路,收敛速度,占用资源
OSPFV2和RIPV2的相同点:
1.都是无类别的路由协议;
2.都是通过组播来传播信息的;(RIP:224.0.0.9;OSPF:224.0.0.5/224.0.0.6)224.0.0.X---本地链路组播
3.都支持等开销负载均衡;
224.0.0.5 用途:所有运行 OSPF 的路由器默认监听的组播地址。
功能:
-
OSPF 路由器通过此地址发送 Hello 报文,用于发现邻居路由器并维护邻接关系。
-
泛洪(Flooding)链路状态更新(LSU)时,非指定路由器(DR/BDR)通过此地址向其他路由器发送信息。
-
所有 OSPF 路由器都会监听此地址的组播流量。
224.0.0.6 用途:仅由 OSPF 的 指定路由器(DR, Designated Router) 和 备份指定路由器(BDR, Backup Designated Router) 监听。
功能:
-
其他路由器通过此地址向 DR/BDR 发送链路状态更新(LSU)。
-
DR/BDR 负责将更新信息转发到整个网络(通过 224.0.0.5),确保高效的路由信息同步。
-
避免多路访问网络(如以太网)中因广播风暴导致的冗余流量。
不同点:RIP只能在小型网络中使用,而OSPF可以应用在大型网络中,OSPF可以支持结构化部署(区域划分)
区域划分目的---区域内部传递拓扑信息,区域间传递路由信息---链路状态型协议的距离矢量特征
区域边界路由器(ABR)---同时属于多个区域,一个接口对应一个区域,该设备可以将一个区域内的拓扑信息收集进行计算,生成路由信息之后传递到其他区域
区域划分要求:
1.区域之间必须存在ABR设备;
2.区域划分必须按照星型拓扑结构划分;
OSPF的数据包
1.Hello报文---周期型的发现,建立以及保活邻居关系
hello时间(10S) Dead time(4倍hello时间)
route-id ---32位二进制构成---手工配置/自动生成(首先在环回地址的IP地址选择,如果有多个环回则选择数值最大的)
(1)全网唯一;(2)格式统一
2.DBD报文---数据库描述报文,在邻接关系建立时交换LSDB(链路状态数据库)摘要
3.LSR报文---链路状态请求报文,基于DBD包请求未知的LSA信息
4.LSU报文---链路状态更新报文,真正携带LSA信息数据包
5.LSAck报文---链路状态确认报文
OSPF协议存在30min一次的周期更新
OSPF报文头部

类型---OSPF的数据包类型
hello包(1);DBD包(2);LSR包(3);LSU包(4);LSACK包(5)
验证类型---1.null;2.明文;3.MD5
Hello包---进行周期性的保活和建邻;DR/BDR的选举

网络掩码---发出接口的IP地址对应的掩码信息,如果邻居双方的掩码信息不同,则无法建邻
hello时间/死亡时间---如果邻居的这两个时间不同,也无法正常建邻
8位可选项---包含OSPF特殊区域的标记;如果邻居双方特殊区域标记不同,则无法建立邻居关系
限制邻居关系的因素
1.hello时间/死亡时间
2.特殊区域标记
3.网络掩码
4.认证
DBD包---进行主从关系选举;共享摘要信息;确认(从设备最后会发送一个不包含数据的DBD包进行对主信息的确认)

I---init---如果I位置1,则代表是进行主从关系选举的数据包,不携带摘要信息
M---More---如果M位置1,则代表后面还有更多的DBD包,如果置0,则代表这个是最后一个DBD包
MS---master---如果MS位置1,则代表该设备是主
DBD序号---在DBD报文交互的过程中,会逐次加1,用于确保DBD包报文传输的有序性和可靠性
LSR---链路状态请求报文

链路状态类型,链路状态ID,通告路由器---LSA三元组,通过这三个参数可以确定唯一标定的一条LSA
LSU---链路更新报文

LSACK---链路状态确认报文

OSPF状态机
状态 | 描述 |
---|---|
Down | 初始状态,未检测到邻居活动 |
Init | 收到邻居的Hello包,但对方尚未确认本端存在 |
2-Way | 双向通信确认,邻居关系建立(广播网络中可能停留在此状态,非DR/BDR时) |
ExStart | 主从路由器选举,准备交换DBD包 |
Exchange | 交换DBD包摘要,同步链路状态数据库(LSDB)的目录 |
Loading | 请求并接收缺失的LSA(通过LSR/LSU) |
Full | 邻接关系完成,LSDB完全同步,可执行SPF计算 |
2-way标志着邻居关系的建立
指定路由器(DR)---和MA网络中剩余所有设备建立邻接关系
备份指定路由器(BDR)---和MA网络中剩余所有设备建立邻接关系
MA网络中其余所有的设备称为DRother
条件匹配
若本端或邻居是DR/BDR,继续推进到ExStart
。
若双方均为DROther,则停留在2-Way
状态(无需建立邻接)
DR/BDR选举
1.先比较优先级,优先级大的为DR设备,优先级次大的为BDR设备,默认优先级为1。如果将一个接口的优先级改为0,则这个接口不参与DR/BDR的选举
2.优先级相同,比较route-id
DR/BDR的选举是非抢占模式的,选举时间等同于死亡时间
ExStart---通过未携带数据的DBD包来比较RID来进行主从关系的选举,为主的可以优先选择LSA信息
Attempt---只有在NBMA网络环境中出现,尝试状态,等待对方指定单播邻居,收到对方的hello包之后,将进入到下一个状态
常见故障与状态卡顿
卡顿状态 | 可能原因 | 排查方法 |
---|---|---|
Init | 单向Hello包(ACL过滤、单向链路) | 检查双向Hello包是否包含对方Router ID |
ExStart | MTU不匹配、主从选举失败 | 验证接口MTU一致,抓包查看DBD标志位 |
Loading | LSA请求超时或丢失 | 检查LSU/LSAck是否被丢弃(认证、QoS) |
2-Way | 非DR/BDR的DROther间关系 | 确认是否需要邻接(如无需则正常) |
OSPF工作过程
启动OSPF配置后,OSPF会向本地所有激活OSPF的接口发送hello包,以组播224.0.0.5的形式发送。hello包中将携带本地的RID及本地已知邻居的RID,将收集到的邻居关系记录在邻居表中
邻居关系建立完成后,将进行条件匹配,失败则停留在邻居关系,仅使用hello包活,匹配成功则开始建立邻接关系。首先使用未携带数据包的DBD包进行主从关系选举,然后使用携带数据的DBD包共享数据库摘要信息,之后使用LSR/LSU/LSACK获取未知LSA信息,完成本地的LSDB链路状态数据库建立
最后,将基于本地收集到的LSA信息,生成有向图和最短路径树,计算到达未知网段的路由信息,将计算的路由信息收集到本地的路由表中。
收敛完成后,OSPF依然需要每隔10s进行周期保活
条件匹配
指定路由器(DR)---和MA网络中剩余所有设备建立邻接关系
备份指定路由器(BDR)---和MA网络中剩余所有设备建立邻接关系
MA网络中其余所有的设备称为DRother
OSPF的接口网络类型
网络类型 | 接口网络类型 |
---|---|
BMA | Broadcast(广播),需要进行DR/BDR选举 |
P2P(PPP,HDLC, MGRE,GRE) | P2P,只建立一个邻居,不需要进行DR/BDR选举 |
环回接口 | 只是写作P2P,环回接口的开销值被定义为0,实际没有数据发送 ,学习到环回网段的路由位32位主机路由,可以通过将网络接口类型修改为Broadcast来还原 |
P2MP,可以建立多个邻居,不进行DR/BDR选举,hello时间30,dead时间120,会学习邻居接口的主机路由 | |
NBMA(帧中继网络) | NBMA,可以建立多个邻居,需要进行DR/BDR选举,hello时间30,需要手工建邻 |