华为数通HCIE面试看这个就够了系列——OSPF(持续更新)
作者:互联网
文章目录
一、OSPF基础。
1. Router ID。
- 作用:唯一标识一台路由器。
- 默认配置:优先使用管理员手动配置的Router ID,管理员没有配置使用全局Router ID,全局Router ID如果管理员没有配置,路由器会使用第一个配置的IP地址作为自己的全局Router ID。
2.Cost。
- 默认计算方法:100MBit/s / 接口的参考带宽
- 以上公式如果计算结果为小数取整数部分;如果计算小于1,结果取1。
- 到目的网络的开销值等于源路由器到目的网络沿途所有路由器出接口的cost累加。
- 全网的接口带宽参考值应该保持一致,一条链路上不同接口的cost应该相同,因为不同可能会导致数据来回路径不一致。
4 .单区域和多区域。
- 单区域弊端:LSDB维护的LSA过多,消耗设备资源;网络不稳定时,全网都会震荡;网络优化的手段减少,不能进行路由汇总。
- 多区域好处:可以进行故障的隔离,增强网络的稳定性
5. 路由器类型。
- IR:所有接口都在同一个区域的路由器。
- ABR:连接2个以上的区域,至少有一个区域在区域0的路由器。
- BR:至少有一个接口属于骨干路由器。
- ASBR:引入其他协议的或者其他OSPF进程的路由器。
其他路由器是怎样知道ABR和ASBR的?
ABR和ASBR会在自身产生的1类LSA的option中描述自己是ABR或者ASBR。
6. 报文类型。
OSPF报文封装在IP报文中,协议号是89,它一共有五种报文类型分别是:
- Hello报文:周期性发送,P2P、Broadcast默认间隔10s发送一次,P2MP、NBMA默认30s发送一次,用来发现和维持OSPF邻居关系。
- DD报文:描述本地LSDB的摘要信息,用于两台设备进行数据库同步
- LSR报文:用于向对方请求所需的LSA。
- LSU报文:用于向对方发送其所需要的LSA。
- LSAck报文:用来对收到的LSA进行确认。
7.网络类型。
OSPF一共定义了四种网络类型,分别是Broadcast、NBMA、P2MP、P2P。不同的网络类型使OSPF对报文的处理有所不同,默认情况下OSPF网路类型取决于链路层协议:
网络类型 | 含义 |
---|---|
广播类型(Broadcast) | 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。 在该类型的网络中: (1)通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR( Backup Designated Router)的预留IP组播地址。 (2)以单播形式发送DD报文和LSR报文。 |
NBMA类型(Non-Broadcast Multi-Access) | 当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文) |
点到多点P2MP类型(Point-to-Multipoint) | 没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。 在该类型的网络中: (1)以组播形式(224.0.0.5)发送Hello报文。 (2)以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到点P2P类型(point-to-point) | 当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。 在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
OSPF网络类型相互之间的影响?
相互之间的影响主要在建立邻居关系时的影响:
- P2P—Broadcast当hello、dead时间一致时,可以建立Full邻居关系, 路由无法计算。原因是:因为P2P把链路通过点到点来进行描述,Broadcast把链路通过伪节点来描述,导所以致2台路由器对链路理解不一致,SPF算法无法处理该现象。
- P2P—NBMA当hello、dead一致时,邻居无法建立。原因:发送报文的形式不同,NBMA只处理单播hello包。
- P2P—P2MP当hello、dead一致时,可以建立full邻居关系,路由可以计算。
- Broadcast—NBMA当hello、dead一致时,邻居无法建立。原因:发送报文的形式不同,NBMA只处理单播hello包。
- Broadcast–P2MP当hello、dead一致时,可以建立full邻居关系,路由无法计算。原因:因为P2MP把链路通过多个点到点来进行描述, BRO把链路通过伪节点来描述,导致2台路由器对链路理解不一致,SPF算法无法处理该现象。
- P2MP—NBMA不能建立邻居。原因:发送报文的形式不同,NBMA只处理单播hello包。
8.DR与BDR。
- 作用:避免了MA网络中路由器得两两建立邻居关系,节约了系统资源。
- 选举:接口优先级越大,优先成为DR,次大成为BDR;优先级相同则比较Router ID,Router ID越大优先成为DR,次大成为BDR;优先级值为0~255,值为0只能成为DRother。
- OSPF定义了一个Wait计时器,缺省等于Dead时间40s,2way状态后会启动WAIT计时器,这个时间用于搜集MA网络中具有DR选举资格的路由器。这就是为什么我们在以太网接口上配置OSPF时,邻居关系的建立总是很慢,而在串行接口上配置OSPF,邻居关系很快就建立起来了,串行接口不选举DR、BDR,无需经过WAIT计时器。
- DR/BDR在子网融合场景下会发生抢占:
假设初始情况下R1、R2处于一个LAN中,R3自己处于另外一个LAN中,大家的接口IP都是同网段的,但是属于不通的LAN。例如三台路由器都连接在同一台交换机上,但是R1、R2属于一个VLAN,R3属于另一个VLAN。那么三台路由器的接口激活OSPF后,R1会成为LAN1的DR,而R3会成为LAN2的DR,也就是他们各自发送出来的Hello消息中,都宣称自己就是DR。现在假设两个LAN连接了起来,这就会有问题了,因为同一个LAN中,有两人宣称自己是老大,这就得重新干一架,重新DR选举。
9.报文格式。
- 报文头部
Version | Message Type | Packet length | Source OSPF Router | Area ID | CheckSum | Authentication Type | Authentication data |
---|
- Hello报文
Network Mask | Hello Interval | Options | Router Priority | Router Dead Interval | DR | BDR | Active Neighbor |
---|
- DD报文
Interface MTU | Options | I | M | M/S | DD sequence number | LSA Headers |
---|
- Option字段详解
(1)DN:用来避免在MPLS VPN中出现环路。当PE向CE发送3类、5类和7类LSA时需要设置DN位,其他PE路由器从CE接收到该LSA时,不能够在它的OSPF路由计算中使用该LSA。
(2)O:该字段指出始发路由器支持Opaque LSA(类型9、类型10和类型11)。
(3)DC位:当始发路由器支持按需链路上的OSPF的能力时,该位将被设置。
(4)EA:当始发路由器具有接收和转发External-Attributes-LSA(type8 LSA)的能力时,该位被置位。
(5)N/P : N在Hello报文中起作用,P在7类LSA中起作用。
- N = 1 代表路由器发送Hello的接口在NSSA区域,支持7类LSA的泛洪以及同步。
- N = 0 代表该路由器发送该Hello的接口不在NSSA区域,不支持7类LSA的泛洪和同步。
- P = 1 该7类LSA可以转化为5类LSA。
- P = 0 该7类LSA不可以转化为5类LSA。
(6)MC位:当始发路由器支持转发组播数据包的能力时,该位将被置位。
(7)E = 1 代表可以发送和接收5类LSA。E = 0代表不可以发送和接收5类LSA。
(8)MT位:表示始发路由器支持多拓扑OSPF。
二、邻居/邻接关系的建立和状态机。
1.邻居关系的建立。
- R1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由器(Neighbors Seen=0)。
- R2收到R1发送的Hello报文后,发送一个Hello报文回应给R1,并且在报文中的Neighbors Seen字段中填入R1的Router ID(Neighbors Seen=1.1.1.1),表示已收到R1的Hello报文,并且宣告DR路由器是R2(DR=2.2.2.2),然后R2的邻居状态机置为Init。
- R1收到R2回应的Hello报文后,将邻居状态机置为2-way状态,并发送一个Hello报文回应给R2,并且在报文中的Neighbors Seen字段中填入R2的Router ID(Neighbors Seen=2.2.2.2),表示已收到R2的Hello报文,并且宣告DR路由器是R2(DR=2.2.2.2),然后R2的邻居状态机置为two-way。
2. 邻接关系的建立。
- R1、R2在迁移到two-way状态之后,紧接着会继续将状态迁移到Exstart。
- 邻居状态机变为ExStart以后,R1向R2发送第一个DD报文,在这个报文中,DD序列号被设置为552A(假设),Initial比特为1表示这是第一个DD报文,More比特为1表示后续还有DD报文要发送,Master比特为1表示R1宣告自己为主路由器。
- 邻居状态机变为ExStart以后,R2向R1发送第一个DD报文,在这个报文中,DD序列号被设置为5528(假设)。由于R2的Router ID比R1的大,所以R2应当为主路由器,Router ID的比较结束后,R1会产生一个NegotiationDone的事件,所以R1将状态机从ExStart改变为Exchange。
- 邻居状态机变为Exchange以后,R1发送一个新的DD报文,在这个新的报文中包含LSDB的摘要信息,序列号设置为R2在第二步里使用的序列号,More比特为0表示不需要另外的DD报文描述LSDB,Master比特为0表示R1宣告自己为从路由器。收到这样一个报文以后,R2会产生一个NegotiationDone的事件,因此R2将邻居状态改变为Exchange。
- 邻居状态变为Exchange以后,R2发送一个新的DD报文,该报文中包含LSDB的描述信息,DD序列号设为5529(上次使用的序列号加1)。
- 即使R1不需要新的DD报文描述自己的LSDB,但是做为从路由器,R1需要对主路由器R2发送的每一个DD报文进行确认。所以,R1向R2发送一个新的DD报文,序列号为5529,该报文内容为空。
- 邻居状态变为Loading之后,R1开始向R2发送LS request报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。
- R2收到LS Request报文之后,向R1发送LS Update报文,在LS Update报文中,包含了那些被请求的链路状态的详细信息。R1收到LS Update报文之后,将邻居状态从Loading改变成Full。
- R1向R2发送LS Ack报文,确认R2发送的LSA已被R1正确接收。LS Ack用来确保信息传输的可靠性。
3.状态机。
OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。
• Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
• Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔默认为30s,向对端发送Hello报文。如果40s间隔内未收到邻居的Hello报文,则转为down状态。
• Init:收到Hello报文后状态为Init。
• 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
• Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
• Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
• Loading:DD报文交换完成即Exchange done,此时状态为Loading。
• Full:LSR重传列表为空,此时状态为Full。
4. 状态机迁移。
标签:R1,R2,数通,HCIE,报文,就够,OSPF,Hello,路由器 来源: https://blog.csdn.net/qq_40909772/article/details/114362152