OSPF协议基础
http://【华为认证HCIA+HCIP+HCIE,100集全套课程!带你从零基础直奔高阶!保姆级教程通俗易懂,网工学习必看!(持续更新中)】https://www.bilibili.com/video/BV1HY4y1W7e7?p=22&vd_source=721e0a04318baae424f51a45c740f1bb
OSPF特点
路由信息传递与路由计算分离
基于SPF算法
以累计链路开销值作为选路参考值
网络类型
1、P2P类型(Point-to-Point)
当链路层协议是PPP、HDLC时,0SPF会认为网络类型是P2P
报文发送地址:以组播(224.0.0.5)发送所有0SPE报文。
不需要进行DR、BDR选举
Hel1o:10秒; Dead:40秒
当0SPF接口的网络类型为P2P的时候只能建立一个0SPF邻居。(广播型修改成P2P后也是一样)
2、P2MP类型(Point-to-Multipoint)
没有任何一种链路层协议被认为是P2MP类型,P2MP是认为手动配置的。
报文发送地址:以组播(224.0.0.5)发送He1lo报文。单播发DD、LSR、LSU、LSACK。
不需要进行DR、BDR选举
Hello:30秒; Dead:120秒
3、NBMA类型(Non-Broadcast Multi-Access)
当链路层协议是帧中继和ATM/FR时,0SPF会认为网络类型为NBMA网络
报文发送地址:单播发送所有HELLO、DD、LSR、LSU、LSACK。
需要进行DR、BDR选举
Hel1o:30秒; Dead:120秒
4、广播类型(Broadcast)
当链路层协议是以太网的时候,0SPF会认为网络类型为Broadcast
Hello:10秒; Dead:40秒
广播类型网络用到两个组播地址,224.0.0.5和224.0.0.6。
所有设备使用单播形式交互DD报文以及LSR报文。
所有设备固定使用组播(224.0.0.5)交互HELL0报文。
OSPF邻居建立的条件
1、版本一致
2、Router-ID不同
3、区域ID一致
4、认证类型和认证密码一致
5、两端接口IP要在相同网段
6、两端接口掩码要求相同
7、要求Hello报文发送时间间隔相同
8、Dead时间一致
9、Option选项中Nbit和Ebit需要一致
10、双方接口的MTU一致
Router-ID
全局Router-ID的选举原则:即设备使用第一个配置的接口IP地址当作全局Router-ID,不会因为接口的状态改变而发生变化。如果配置的第一个接口的Router-ID变更了,那么全局Router-id会改变。
作用:很多路由协议都是通过Router-ID来唯一标识设备的,如果没有认为指定的话,就会选择全局Router-ID当做协议Router-ID。
OSPF中的Router-ID:设备在OSPF中的名字,IP地址的格式,唯一的表示一个路由器
华为的Router-ID:
- 可以手工选则,不能重复
- 自动选择,选择全局Router-ID充当OSPF协议的Router-ID
OSPF的Router-ID不会因为全局Router-ID的变化而改变,OSPF的Router-ID只能在清理OSPF进程之后才会改变。不会因为全局Router-ID改变而发生协议震荡。
思科的Router-ID
- 可以手工选则,不能重复
- 自动选择,选择环回口大的作为Router-ID,然后再选择物理口
OSPF过程工作过程
- 邻居建立:产生邻居关系,直连建立邻居,被记录为邻居表
- 同步链路状态数据库:产生邻接关系,产并交换生LSDB(链路状态数据库)拥有全网的LSA(全网的信息)
- 计算最优路由:每台OSPF路由器计算出最优路由条目,得出最短路径树
OSPF报文类型
报文名称 | 报文功能 |
Hello报文 | 发现和维护邻居关系,协商维持建立OSPF邻居 |
DD数据库描述报文 | 用于交互LSA的摘要信息,交互链路数状态数据库摘要 |
LSR链路状态请求报文 | 用于请求特定的LSA |
LSU链路状态更新报文 | 用于发送LSA的详细信息,向邻居通告拓扑信息 |
LSACK链路状态应答报文 | 用于对接受到的LSU中的LSA信息进行确认 |
OSPF七种状态
down | 代表OSPF没有发现任何OSPF邻居,每10s发送一次Hello报文 |
Init | 代表发现了OSPF邻居(收到了Hello报文) |
2-Way | 收到了OSPF邻居的Hello报文,并且发现了对方的active-neighbor(邻居表)中有自身的RID |
ExStart | 用于发送空的DD报文,互相进行主从的选举。 |
Exchange | 当主从关系确认之后,进入到Exchange状态发送带有LSA摘要信息的DD报文。 |
Loading | 当收到了对方M置位为0的DD报文之后,进入loading状态,请求自身没有的LSA |
Full | 当自身请求列表中,所有待接收的LSA,对方都发送过来之后,将会进入到Full状态。 |
OSPF传输可靠性
OSPF协议,工作在网络层之上,而IP协议本身不负责数据传输的可靠性,所以针对OSPF来说,需要单独设计报文传输的可靠性机制。
可靠性:邻居建立的三次握手,重传机制,LSR,LSU,LSACK 的显示确认机制,DD报文的隐式确认。
OSPF邻居建立的过程
RA开启OSPF协议,10s发送一次Hello报文,当RB收到Hello报文时从Down状态变为Init状态。同样RA收到RB的hello报文从Down状态变为Init状态,然后RA将RB的Router-ID加入邻居列表中,当RB收到RA的Hello报文,RB已经进入Init状态同时RB知道了RA已经认为自己是对方的邻居了,就从Init状态进入2-way状态。
DR与BDR
DR/BRD -- 一个广播域一个DR、BDR
DR、BDR的机制减少了在同一广播域中邻接的数量,减少了广播网络中LSA泛洪,避免重复更新,节省带宽。
BDR:备份作用,保证网络的可靠性。
2-way状态之后选举DR和BDR --- 40s
选择DR和BDR:
- 根据优先级,越大越好,取值范围0-255,默认是1。0表示不参与选举
修改DR优先级:ospf dr-priority n
- 选router-id大的
选择出DR和BDR之后,遵循非抢占原则, 即有更高的优先级设备进来之后也不更改DR和BDR。
一个路由器可以成为多个链路的DR设备;一条链路上只能存在一个DR;只能一个BDR,可以不存在BDR;可以存在多个DROther,也可以没有DROther。
当原来的DR坏了,BDR接替DR的工作,在剩余路由器中选择出BDR。如果DR再次恢复,改链路中已经有了DR和BDR,该路由器只能成为DROther。
2-way状态选举完DR和BDR之后都会进入ExStart状态,互相发送DD报文。
LSA交换条件
- 邻居:双方能够交换,建立邻居表的条件:能通信(直连)、参数保持一致(route-id、认证(的密码···)。双方能够交换。建立邻居表的条件:能通信(直连)、参数保持一致(route-id、认证(的密码···) 成功标志: 2-way状态
- 邻接:跟进一步的状态,已经交换完了。跟进一步的状态,已经交换完了(不是所有设备能建立邻接关系,每个设备只和DR/BDR形成邻接关系) 成功标志: Full状态
DD报文
作用:主要是为了实现按需同步
DD报文传输的可靠性机制如何确保:在Exstart互相发送空的DD报文,用于选举主从关系,从设备会跟随主设备的DD序列号,当主设备收到从设备的DD序列号之后,将会把Seq+1发送自己的DD给送设备,从设备收到Seq+1的DD就能判断,先前自身发送的DD主设备已经收到。
2-way状态之后的过程
设备进入ExStrat状态之后,进行主从设备的选举
① A设备发送一个DD报文:X是随机产生的序列号;I(Init)代表是第一个DD报文,这个报文是用来选举主从的,不携带任何LSA;M(More)置位为1表示后面还有DD报文;MS(Master)置位为1表示本设备要成为主设备
② B收到A的DD报文之后,就会进行主从选举(比较Router-ID),如果B的Router-ID大于A,就会发送一个DD报文,其中随机产生一个序列号,然后MS位同样置位为1。A收到B的DD报文之后,比较Router-ID,知道对方比自己大,将B认定为主设备,自己为从设备,同时从ExStart状态转为Exchange状态,随后发送带有LSA摘要信息的DD报文,同时这个DD报文的序列号是B(主设备)发来的序列号,MS位置位为0。
③ B收到A(从设备)发来的DD报文发现序列号和自己发送的一致,这时主设备B就能判断从设备A已经收到了B发送的DD报文,同时B的状态也会从ExStart状态转为Exchange状态。
④ 主从选举完成之后,主设备B先发送带有摘要信息的DD报文,同时将序列号加一,MS位置位为1。从设备A收到主设备B发来的DD报文,发现序列号为刚才自己发送的DD报文的序列号加一,此时从设备A就确认主设备B收到了刚才自己发送的DD报文。
⑤ 从设备A接受主设备B发送带有摘要信息的DD报文,当DD报文中的M位置位为0时,也就是代表后面没有DD报文了,此时从设备从Exchange状态进入Loading状态,发送一个确认号加一的DD报文,主设备B收到了DD报文就能确认从设备收到了刚才自己发送的M置位为0的DD报文。
⑥ 从设备A发送LSR报文去请求从设备没有的LSA
⑦ 主设备B收到从设备A发送来的LSR回复LSU报文,发送从设备A所需要的LSA的详细信息。从设备A接受完所有自己需要的LSA之后进入Full状态。
⑧ 从设备发送LSAck报文向主设备B进行对于接收到的LSU中的LSA信息进行确认
OSPF LSDN交互原则
<AR2>dis ospf lsdb //查看OSPF的链路状态数据库 |
互相交互自身没有的LSA,以及使用新的LSA替换掉旧的LSA
如何判断一个唯一的LSA?使用LSA的三要素
1、LSA的类型(Tpye)
2、LSA的链路状态ID(Link StateID)
3、LSA的通告者(Adv Router)
如何判断LSA的新旧?
1、比较LSA的序列号(Sequence)
2、当序列号相同时将会比较校验和,越大越优
3、比较LSA的老化时间(Age)
① 首先找age为3600s的LSA,用于删除一条LSA
② 如果两条LSA的age时间相差大于900s,将会选择数值小的LSA
③ 如果两条LSA的age时间相差小于900s,将会认为相同,保持原有不变
OSPF更新机制
触发更新:当链路状态发生改变之后OSPF将会触发更新,比如cost值改变了,网段、掩码变了,取消宣告等等。
周期更新:每个OSPF路由器自身产生的LSA,都会每隔30(1800s)分钟周期更新一次,避免3600s之后LSA删除,更新后将seq+1,校验和重新计算,age时间重新恢复到初始值。
OSPF的老化机制
OSPF路由器没产生一条LSA,都会存在有一个age时间为3600s,初始值为1,当age时间递增到3600s之后将会认为LSA老化,从自身LSDB中删除改LSA。
OSPF中LSA的删除机制
当OSPF需要删除一条LSA的时候,将会把LSA的age时间变成3600s,当其他路由设备接收到这条LSA之后,将会把自身LSDB中对应的LSA删除掉。
OSPF的度量方式
某接口cost = 参考带宽/实际带宽
小数只取整数位,小于1的数都取值为
更改cost两种方式:
1、直接在接口下配置
2、修改参考带宽(所有路由器都要修改,确保选路的一致性)
在广播NBMA网络中,OSPF建立邻居关系要求两端网段一致,掩码一致。
在P2P网络中,不要求网段一致,不要求掩码一致。
在P2MP网络中,默认情况下要求网段一致,也要求掩码一致,但是可以配置不要求掩码一致。