目录
1、OSPF是IETF定义的基于SPF算法(最短路径优先算法)的链路状态路由协议(选路、防环),通常部署在大型网络中(解决了传统Rip网络在大型网络中存在的缺陷)。
2、Ospf被封装在IP协议中,协议号为89(即Ospf是工作在网络层之上的路由协议)
- Rip路由变化之后,先在本地完成路由计算,完成计算后在发送路由变化通知
- Rip算法缺陷,使得运行Rip的设备缺乏对全局网络拓扑的了解
- Rip以“跳数”为度量且最大15跳,存在次优路径的风险(可能会走低带宽链路)
- Ospf路由信息传递与路由计算分离,路由变化后,本地直接传递路由信息,然后再自己根据路由信息进行路由计算(将 “收到更新→计算路由→发送更新” 更改为 “收到更新→发送更新→计算路由”)
- Ospf基于Spf算法,基于拓扑信息独立计算路由
- Ospf将链路带宽作为选路参考值(cost=参考带宽/实际带宽 默认参考带宽为100M)
准备工作-身份标识符Router-ID
Router-ID用来识别运行Ospf协议的路由器,尽量配置为全网唯一
华为如何确定Router-ID
- 默认使用路由器的全局router-id作为ospf的router id
- 默认设备上配置的第一个IP地址为全局router-id
- 也允许手动更改全局Router-id(全局下router id [5.5.5.5]更改)
- 可以手动配置OSPF router-id,并且优先级高于全局Router-id
思科如何确定Router-ID
- 手动配置OSPF的Router-id
- 如果没有手工配置,则选举Loopback接口中最大的IP地址作为Router ID
- 如果没有配置LoopBack接口,则选用物理接口最大的IP地址作为Router-ID
Router-id注意事项
- Router-id与IP地址没有关系(只是格式与P地址一样)
- Ospf的Router-id一旦确定不会改变,需要重启OSPF的进程来更改
- 一般工程上使用loopback接口的地址作为Router-id,方便网络管理
邻居建立报文-Hello报文
OSPF——5种报文(图解)_多谢思考的博客-CSDN博客_ospf报文
https://blog.csdn.net/m0_49864110/article/details/123530774
Hello报文作用 自动建立并维护邻居关系(建立邻居时要进行参数协商)
Hello报文如何发送 凡是加入到Ospf协议的物理、隧道接口,就会主发送Hello报文
Hello报文注意事项
- Hello报文源地址为接口的IP地址,目的地址为224.0.0.5(组播)
- 在P2P链路、Broadcast链路上每隔10s发送。在NBMA、P2MP链路每隔30s发送一次
- 邻居失效时间为发送间隔的4倍。失效时间内没有收到邻居发送的Hello报文,则认为邻居失效,断开邻居关系,并重新计算路由
影响邻居建立的因素
- OSPF的版本号要一致
- 邻居之间IP地址的子网掩码要一致(点到点网络除外)
- 协议Router-id不能冲突(全局Router-id可以相同)
- Area-id要相同(即同一链路上的所有接口要加入到同一区域)
- 认证类型和密码要一致
- Hello报文的发送间隔要一致
- Hello的Deal间隔要一致
- Nbit和Ebit取值要一致(区域类型要一致)
- MTU要一致(缺省情况下不检查MTU)
邻居建立过程-OSPF状态
OSPF——7种状态讲解_多谢思考的博客-CSDN博客_ospf状态
https://blog.csdn.net/m0_49864110/article/details/123530735
进入到2-Way状态后,开始进行第二步LSDB同步
LSDB同步报文1-DD报文
OSPF——5种报文(图解)_多谢思考的博客-CSDN博客_ospf报文
https://blog.csdn.net/m0_49864110/article/details/123530774
DD报文的作用
描述自身LSDB,携带自身LSDB中LSA的头部数据,让邻居了解自己缺少哪些LSA(然后发起请求获得详细的LSA信息)
DD报文有两种情况
- 不携带LSA摘要信息(EsStart状态发此报文,选举主从)
- 携带LSA摘要/LSA头部信息(Exchange状态发此报文)
LSA头部信息
摘要信息的作用
- 唯一标识一条LSA。(当没有此LSA会请求,将此LSA直接加入)
- 用于判断LSA的新旧(当有此LSA,但是自己的LSA旧的,则会请求此新的LSA替换自己旧的LSA)
LSDB同步报文2-LSR报文
LSR携带LSA标识信息(type、),请求特定的LSA信息
LSDB同步报文3-LSU报文
发送LSA的详细信息(包含LSA的头部信息以及链路状态)
LSDB同步报文4-LSAck报文
发送LSA头部信息进行确认
LSDB同步过程-OSPF状态
OSPF——7种状态讲解_多谢思考的博客-CSDN博客_ospf状态
https://blog.csdn.net/m0_49864110/article/details/123530735
先进入2-way状态的设备先进入ExStart状态,开始LSDB同步
注意事项
2-way状态:成功建立邻居关系、开始进行LSDB同步(交互Hello)
Full状态: 成功建立邻接关系,LSDB同步完成(交互Hello、交互LSA)
OSPF邻居可靠性体现
由于Ospf是被IP协议直接封装的路由协议,但是IP协议不具备可靠性机制,所以OSPF需要自己建立一套可靠性机制来保障邻居能够成功同步,具体体现在以下方面
- 3次握手建立2-way状态
- DD报文序列号+1机制(隐式确认)
- LSAck是对LSA的确认,不是对LSU的确认。因为LSAck携带的是LSA的头部信息来进行确认的(显式确认)
执行SPF计算包含三步
- 路由器根据LSDB中的LSA画出网络图,此图包含OSPF网络拓扑中所有“点” (包括伪节点)(画图需要使用1类LSA的P2P、TransNet、Vlink类型以及2类LSA)
- 路由器以自己为树根,对网络图执行SPF计算,画出一个由树根到每个节点的最短路径树
- 在树的节点上添加网络信息,并计算由树根到这些网络的开销以及下一跳,并将计算结果加入到路由表中(叶子节点可以是1类的StubNet、LSA2、LSA3、LSA5/7的网络)
OSPF——LSA讲解_多谢思考的博客-CSDN博客_lsa序列号
https://blog.csdn.net/m0_49864110/article/details/123549474
接口的开销(Cost)= 参考带宽/实际带宽(默认参考带宽为100M)
接口开销都为整数且最小值为1。
接口Cost值如何更改
- 直接再接口下配置接口Cost(优先级最高)
- 更改默认的参考带宽
路由开销的计算方法
运行Ospf协议的接口都存在自己的网络类型,而链路的网络类型默认由接口的链路层协议所决定
为了减少邻接关系(无DR情况下会建立n×(n-1)/2个邻接关系,管理复杂,重复LSA泛洪浪费资源)
因此选举出DR、BDR、DRother来减少邻接关系,降低OSPF协议流量。、
DR——指定路由器、BDR——DR的备用路由器、DRother——其余的路由器
其中DR与BDR、DR与DRother、BDR与DRother会建立邻接关系,进行LSDB同步。
DRother与DRother只会建立邻居关系,不进行LSDB同步。
当需要进行路由更新时
- DRother产生的LSU通过组播224.0.0.6发报文给DR和BDR,DR再通过224.0.0.5发送给其他的DRother和BDR。DRother通过224.0.0.6发送ACK确认,BDR通过224.0.0.5发送确认给DR(不发确认给BDR)
- BDR产生的LSU通过组播224.0.0.5发送给DR、DRother。DRother通过224.0.0.6发送ACK确认,DR通过224.0.0.5发送Ack。
- DR产生的LSU通过组播224.0.0.5发送给 BDR、DRother。BDR通过224.0.0.5发送ACK,DRother通过224.0.0.6发送Ack
因此DR与BDR同时监听224.0.0.5和224.0.0.6这两个组播地址,DRother仅监听224.0.0.5
通告LSU时,DR和BDR会发送224.0.0.5和224.0.0.6的报文,DRother只会发送224.0.0.6的报文
224.0.0.5 代表所有运行Ospf协议的路由器(运行Ospf的设备都会接收此组播)
224.0.0.6 代表广播/NBMA链路上的DR/BDR(只有DR、BR会接收此组播)
DR、BDR的选举过程
- 当Ospf接口开启后,在Hello报文中设置DR、BDR的值为全0。同时Wait timer时间启动(时长为4倍的Hello间隔)
- 所有的路由器都会认为自己是DR、BDR(字段填充的是自己自身的接口),互发Hello报文,开始DR、BDR的选举。
- 如果在Wait计时器超时后,仍未学习到DR、BDR,则就认为自己是DR,后续加入的会选举为BDR
- 当已经选出出DR、BDR,当DRother在40s内收不到DR、BDR的Hello包,DRother之间会重新选举DR、BDR。
DR、BDR通过哪些信息进行选举
主要通过优先级和Router-ID进行选举
- 比较协议优先级(默认是1,范围为0~255),优先级最大的为DR,次大的为BDR。
- 优先级为0 代表不参与选举,只能是DRother
- 比较Router-ID,最大的为DR,次大的为BDR
DR/BDR选举注意事项
- DR、BDR的选举是基于接口的,具有非抢占性(同Router-ID)
- 一条链路(广播域)上选举一个DR/BDR
- 每条广播/NBMA链路都会选举一个DR(必选,默认选举), BDR(可选,默认选举)
- P2P、P2MP链路不需要选举DR、BDR,所以在Hello报文中的的DR、BDR字段取值为0.0.0.0
- 选举出DR、BDR后才会开始进行LSDB同步(转为Exstart状态)
DR/BDR单点故障
- 当DR出现故障后,则判断是否存在BDR,如果存在BDR,则BDR成为新的DR,重新选举BDR
- 当DR出现故障后,则判断是否存在BDR,如果不存在
- 当DR正常,BDR失效后,直接重新选举BDR
在区域内进行宣告
Network 直连网络号 反掩码(255.255.255.255 - 子网掩码 = 反掩码)
Network 接口IP地址 0.0.0.0 精确宣告