H3CIE-RS+面试——OSPF(倒计时第40天)
以下内容均为博主自己根据华三官网ppt整理的笔记,仅供参考,如有错误,轻喷
OSPF(开放最短路径优先)
OSPF协议基本原理
ospf协议特点
- 基于链路状态的内部网关协议
- 没有路由跳数的限制
- 采用组播通告邻居路由发生变化
- 组播地址224.0.0.5,所有运行了OSPF的路由器都会监听该地址
- 组播地址224.0.0.6,只有DR和BDR才会监听该地址
- 路由收敛速度快
- 以开销作为度量值
- 带宽越高,开销越小
- OSPF的开销=参考带宽除以接口实际带宽(不足1取1)
- ISIS的开销=接口实际带宽/参考带宽
- 采用SPF(最短路径优先)算法(避免了环路)
- 是运用最广泛的路由协议
OSPF的三张表
邻居表
邻居表会记录所有的建立了邻居关系的路由器的路由信息
问题:OSPF邻居如何建立的?
回答:运行OSPF的路由器以组播的方式向目的地址224.0.0.5发送hello报文,收到hello报文的路由器检查报文种携带的参数是否和自己的一致,如果一致则形成邻居关系
追问1:hello定时器多少秒发一次?
回答:在不同的网络类型中hello定时器的发送时间间隔不一致,在广播网(broadcast)和点到点(p2p)网络中每10秒发送一次,在点到多点(p2mp)和非广播多点可达(NBMA)网络中每30秒发送一次
追问2:当邻居建立成功后如果在一段时间没有收到邻居的hello报文会怎么处理?
回答:当邻居建立成功后,会定时向自己的邻居发送hello报文,主要作用就是为了保活,确保邻居还在还活着。在broadcast网和p2p网络中如果40秒还没收到邻居的hello报文则认为邻居已经失效,并将它从邻居表中删除,在p2mp和NBMA网络中120秒没有收到邻居发送的hello报文则认为邻居已经失效。
LSDB表
链路状态数据库,又叫拓扑表
运行了OSPF的路由器之间并不是交换路由表而是交换彼此的链路状态的描述信息(LSA),交换完成后,同区域内的路由器LSDB表中具有当前区域的所有链路状态信息,并且都是一致的
问题1:LSA中包含了哪些信息
回答1:包含了接口的状态UP/DOWN,链路的开销,IP地址/掩码等
问题2:LSA会过期吗
回答2:会,每30分钟也就是1800秒会更新自身的LSA,如果一条LSA在一个小时也就是3600秒内没有被更新则会认为失效,从库中删除
OSPF路由表
当路由器获取到完整的链路状态信息后会通过SPF算法计算出最优的路由加入到OSPF路由表中,也就是说OSPF路由表存放的是去往一个目的地最优的路由信息
问题1:SPF算法怎么定义一条路由是否为最优路由
回答1:如果去往一个目的地有多条路径可走,SPF算法将比较开销最小的作为最优路径
追问1:如果去往一个目的地有两条路径开销一致怎么办
回答1:形成等价路由,将两条路由都加入到OSPF路由表中
OSPF区域分层结构
OSPF划分了两种区域,骨干区域和非骨干区域,其中骨干区域只有一个area 0,其他所有区域都为非骨干区域,在单域的环境中,可以没有骨干区域;在多域的环境中,必须配置骨干区域
每个运行OSPF的接口都必须属于一个区域
问题1:为什么OSPF会分区域,这样做有什么好处吗
回答1:当网络中有多台路由器运行OSPF时,路由器数量增多会导致LSDB表不断的更新变化,LSDB表同步会导致所有路由器重新进行路由计算,那么采用划分区域的方式,当一台路由器LSDB发生变化时,只在本区域内的路由器间传播LSDB,减少了影响范围
追问1:划分区域还有哪些优势吗
回答1:第一个就是刚刚提到的减少区域内LSDB中链路状态信息的数量,只需要维护自己所在的区域内的链路状态信息,第二个优势可以将相同功能或者地理位置相同的路由器划分到同一个区域内便于管理,第三个优势隔离拓扑变化,减少路由振荡对整个自治系统的影响
OSPF路由器类型
OSPF一共有四种路由器类型,分别为:
- 区域内路由器(IR):所有接口都属于同一个区域内
- 区域边界路由器(ABR):同时有接口属于骨干区域和非骨干区域
- 骨干路由器(BR):至少有一个接口属于骨干区域
- 自治系统边界路由器(ASBR):一台设备有两个接口属于不同AS的
问题1:ASBR的作用
回答1:用于引入外部路由信息
Router ID
- 运行OSPF的路由器必须存在Router ID
- 在一个AS内唯一标识一台路由器
- RID是32比特无符号整数
- 可以手工配置,也可以自动生成
问题1:自动生成的规则是什么
回答1:当没有手动配置RID时,如果配置了环回接口地址,会选择所有环回接口中地址最大的作为RID,如果没有配置环回接口,则会从配置的接口地址中选择数值最大的为RID(无论接口状态是否UP/DOWN)
追问1:一个接口可以配置主地址和多个从地址,那会选择从地址大的作为RID吗
回答1:会,当主地址比从地址小的时候会选择从地址大的作为RID
OSPF网络类型
OSPF一种划分了四种网络类型
- Broadcast:在以太网和FDDI光纤分布式接口网络中缺省采用
- 组播发送报文
- NBMA:在链路层协议为帧中继,ATM时缺省采用
- 单播发送报文
- 需要手工配置邻居,否则无法正常建立邻居关系
- P2MP:没有一种协议缺省采用,只能通过其他类型修改为P2MP
- 组播发送协议报文
- 不需要手工配置邻居,依靠协议本身机制建立邻居关系
- P2P:当链路层协议为PPP,HDLC时缺省采用
- 组播发送报文
OSPF报文类型
OSPF一共划分了五种报文
- hello报文:用于建立维护邻居关系
- DD报文:两个作用,一个是选举主从,一个是发送LSA摘要
- 在收到邻居发送的hello报文后,开始发送第一个DD报文,此时的DD报文中不会携带LSA摘要,是用于主从的选举,比较双方Router ID大的为主。在主从选举完成后,由主设备开始发送第二个DD报文此时才会携带自己的LSA摘要
- LSR报文:请求自己没有的或者比自己LSA更详细的信息
- 当DD报文交互后,向邻居请求自己没有的LSA,完成同步
- LSU报文:向邻居发送所需的LSA
- LSAck报文:对LSU的确认
- 主要为了告诉邻居我已经收到你发送的LSU
- 如果邻居发送了多条LSU,那么发送一个LSAck也可以对多条LSU进行确认
OSPF报文封装顺序
- 先将五种报文封装在IP报文中,协议号为89
- 然后将IP报文进行链路层封装
DR和BDR的选举
- 只有在Broadcast网和NBMA网络中才需要选举DR和BDR
- 没有成为DR和BDR的路由器统一称为DROther
问题1:为什么要选举DR(指定路由器)和BDR(备份路由器)
回答1:当网络规模过大时,任意两台运行OSPF的路由器之间想要通信都需要建立邻居关系,那么就会导致链路复杂,带宽资源浪费。为了解决这些问题,OSPF就推出了DR和BDR的概念,所有运行OSPF的路由器中选举一台作为DR,一台作为BDR,其他设备只需要和DR以及BDR建立邻居关系即可,将路由信息发送给DR,由DR负责转发。
追问1:由DR负责数据的转发,那BDR的作用是什么
回答1:选举BDR的作用主要是为了防止单点故障,当DR失效时,再从所有设备中选举一台DR出来需要浪费一定的时间,在选举这段时间里网络就长期处于一个不稳定状态,此时就体现了BDR的重要性,当DR失效时,BDR能第一时间顶替DR的工作完成业务的转发
追问2:选举完DR又选举BDR不是也很浪费时间网络也会长期处于不稳定状态吗
回答2:DR和BDR是同时完成选举的,当DR发生故障时BDR会成为新的DR,此时网络中又会选举一台设备作为BDR,但此时选举BDR是不会影响网络正常运行
追问3:DR和BDR的选举规则?
回答3:首先比较hello报文中携带的优先级,优先级最高的成为DR,次高的成为BDR
追问4:优先级的取值范围是多少?缺省为多少,如果优先级为0呢
回答4:优先级的取值范围为0-255,缺省为1,如果一台设备的优先级被设置为0那么不会参与DR和BDR的选举
追问5:如果两台设备的优先级相同都是255怎么办
回答5:但优先级相同时,继续比较router id,越大越优先
追问6:如果此时网络中的DR优先级为100,我有添加了一台设备,新添的设备的优先级为120,那么它会成为新的DR吗
回答6:不会,没有保持网络的稳定性,当DR和BDR选举完成后,即使后面新增了优先级更高的设备也不会重新选举,同理当原DR故障恢复后也不会抢占成为DR,都会成为DROther
邻居和邻接的建立
- 邻居关系的建立:当收到对方发送的hello报文后,检查其参数如果一致则建立邻居关系
- 邻接关系的建立:当双方进行DD报文交互,实现了LSDB同步后,才会建立邻接关系
问题1:详细描述一下邻接关系的建立过程
回答1:比如此时R1和R2建立邻接关系
第一步:R1向R2发送hello报文,此时携带的邻居表为空,并且DR地址为0.0.0.0(down)
第二步:R2收到R1发送的hello报文,将R1的RID添加到自己的邻居表中,然后与R1比较RID,如果R2的大,则在给R1发送的hello报文中将DR地址设置为自己(lnit)
第三步:R1收到R2回复的hello报文,发现自己的R2的邻居表中,则将R2也添加到自己的邻居表中,同时发现R2的RID大于自己,则在后续发送给R2的hello报文中将R2的RID设置为DR地址(2-way)
第四步:R2收到R1发送的hello报文,发现自己在R1的邻居表中(2-way),如果R1和R2都是DRother,那么他们之间的状态就停留在2-way,如果他们之间有一个是DR或者BDR则继续进行邻接关系的建立
第五步:开始发送第一个dd报文协商主从(exstart)
I位置位:表示这是第一个DD报文
M位置位:表示这不是最后一个dd报文
MS位置位:表示当前设备为主设备
DD sequence:随机生成的序列号,当主从选举完成后,从设备将自己的序列号修改为主设备的序列号
第六步:由于R1的RID小于R2,后续在发送给R2的DD报文中修改序列号为R2的(Exchange)
第七步:R2收到R1的DD报文后,在后续发送给R1的DD报文中将序列号依次递增1(Exchange)
第八步:R1和R2接收到对方的DD报文后对比自己的LSDB,如果一致则进入full状态,不一致则进行loading状态开始向对方发送LSR报文
OSPF邻居状态机
OSPF一共有八种状态机,有一种比较特殊,Attempt状态,该状态只会在NBMA网络中才会有,当路由器向对方单播发送hello报文还未得到回应时处于该状态。
- Down:当前接口没有收到任何hello报文(第一个稳定状态)
- lnit:收到其他路由器发送的hello报文,但是对方的邻居表中没有自己
- 2-way:收到其他路由器发送的hello报文,并且邻居表中有自己(第二个稳定状态)
- ExStart:当前状态下协商主从
- Exchange:开始交换携带LSA的DD报文
- loading:如果需要请求缺少的LSA,则会进入该状态发送LSR
- full:路由器结束更新自己的LSDB,开始进行SPF计算,最终状态(第三个稳定状态)
LSDB更新
缺省情况下:1800秒刷新一次LSDB库中的LSA,将所有LSA的序列号递增,同时老化定时器被重置
问题1:当运行OSPF路由器收到一条LSA更新报文会如何处理?
回答1:第一步在本地LSDB库查找该LSA,如果没有找到,则认为是一条新的LSA将其添加到LSDB中,第二步如果找到相同的LSA,则比较序列号,序列号越大越新,如果库中的小则更新,如果库中的大,则认为这是一条由于网络延迟网络拥塞导致重传的陈旧的LSA,直接丢弃
问题2:当始发路由器想要将一条LSA从库中删除并不让邻居学习到该怎么做?
回答2:将老化时间设置为3600秒最大,然后通告给所有邻居
追问3:如何通告给所有邻居的,如果这台始发路由器不是DR或者BDR,那么是如何通告的?
回答3:如果始发路由器不是DR或者BDR,以组播地址(224.0.0.6)发送LSU,DR和BDR收到后,首先发送LSAck进行确认,然后使用组播地址(224.0.0.5)向所有邻居发送该LSU
配置和优化OSPF协议
- OSPF进程号:本地概念,只在本路由器上生效,不影响区域内其他路由器之间的报文交换
- 进程号取值范围(1-65535)
- OSPF接口的路由器优先级:缺省为1,需要进入接口下配置ospf dr-priority xx
- 优先级取值范围(0-255)
- 优先级为0不参与DR和BDR选举
- OSPF接口的开销:需要进入接口下配置ospf cost(1-65535)
- 接口开销=参考带宽/接口实际带宽(不足1取1)
- OSPF接口的参考带宽:缺省为100MB
- 在ospf进程下:bandwidth-reference(1-65535)
- OSPF的hello定时器:broadcast网和p2p网每10秒发一次,NBMA和P2MP网每30秒发一次
- OSPF的邻居失效时间:4倍的hello包发送时间
- Poll定时器:只有在NBMA网络中才有
- 在NBMA网络中,当邻居处于down状态时,每30秒发一次
- 接口重传LSA的时间间隔:向邻居发送LSU后需要等待对方发送LSAck进行确认,在一定时间内没有收到邻居发送的LSAck则需要重新传输
- 缺省为5秒
- 需要在接口下修改:ospf timer retransmit(1-3600)
- 重传LSA时间间隔不要设置过短,避免引起不必要的重传
- 当修改了网络类型后,定时器/邻居失效时间都会被恢复到缺省值
配置OSPF高级特性
虚连接
骨干区域被分割,非骨干区域无法和骨干区域保持连通时,需要使用虚连接
注意:只能在ABR上配置虚连接(ABR的定义:同时有接口处于骨干区域和非骨干区域的设备)
虚连接的作用:解决骨干区域被分割,非骨干区域无法和骨干区域保持连通,同时还是一条备份链路,当骨干区域因链路故障不能保持连通时,可以通过配置虚连接保证骨干区域在逻辑上连通
LSA报文头
问题1:可以唯一标识一条LSA的三个字段?
回答1:分别为LS type(LSA的类型),Link State ID(链路状态ID),Advertising Router(始发路由器的RID)
追问2:详细描述下LSA的类型
回答2:
- Type 1:运行OSPF协议的路由器都会产生,描述区域内直连的链路信息(链路类型,开销等
- Type 2:由DR产生,记录了网络中所有的router ID
- Type 3:由ABR产生,作用:将本区域内路由信息传递给其他区域,直接传递路由信息,路由器在处理三类LSA时并不会使用SPF算法,直接加入到路由表中,由于没有运行SPF算法故可以会产生环路,所以非骨干区域必须通过骨干区域才能转发。
- 还有一个作用是用来生成缺省路由,或者用来过滤明细路由
- Type 4:由ABR产生,作用:通告给除了ASBR所在区域的其他区域,
- 不会主动产生4类LSA,
- 只有当ABR收到一条五类LSA后才会产生4类LSA
- Type 5:由ASBR产生,描述到AS外部的路由信息
- 一旦产生,将在整个OSPF系统内部泛洪,一般在做引入的时候会产生
- 传递的是路由信息,并非链路状态信息
- 一类外部路由,可信度较高的路由
- 二类外部路由,可信度较低的路由,缺省引入进ospf的路由都属于二类
- Type 7:由NSSA区域内的ASBR产生,泛洪范围仅在NSSA区域内部
追问3:如何区分一条五类LSA是一类外部路由还是二类外部路由
回答3:可以通过抓包,在LSA 5中在options字段中如果E置位,那么就是二类外部路由
OSPF选路规则
按照路由类型的优先级选择:
- 区域内路由
- 区域间路由
- 一类外部路由
- 二类外部路由
问题1:当类型都一致时,如何选择
回答1:当类型一致时,通过比较两条路由的开销,开销越小越优先
追问2:当类型开销都一致呢
回答2:当类型开销都一致时,那么这两条路由将形成等价路由,流量将在这两条路径上负载分担
OSPF特殊区域
特殊区域是人为定义的,一般位于OSPF区域的边缘,只与骨干区域相连
Stub区域
目的是为了减少区域中路由器的路由表规模以及路由信息传递的数量
- 不允许注入四类和五类LSA
- ABR产生一条三类的缺省路由传递到Stub区域,以便Stub区域能够访问外部路由
- 当Stub区域内有多台ABR时,可能会出现次优路径
- 骨干区域不能设置为Stub区域
- Stub区域中不能出现ASBR
- 一个非骨干区域内有一台设备被设置为Stub,那么这个区域内其他路由器也需要设置为Stub,否则无法建立邻居关系
完全Stub区域
不允许注入三类,四类,五类LSA
NSSA区域
不允许注入五类LSA,但允许注入七类LSA
七类LSA只在NSSA区域内传播,想要传递到其他区域,需要进行七转五
完全NSSA区域
不允许注入三四五类LSA
更好的控制外部路由,减少区域内LSDB的规模,网络的安全性有所增强
OSPF路由聚合
路由聚合的好处:减少路由信息,缩减路由表规模,提高路由器计算速度
ABR聚合
聚合后的路由为三类LSA
ASBR聚合
聚合后的路由为五类LSA,如果配置了NSSA区域,那么还可以聚合七类LSA
OSPF安全特性
OSPF协议报文验证
只有通过验证的ospf报文才能建立邻居关系
验证模式分为simple和md5
静默接口
禁止端口发送ospf报文
被设置为静默接口的端口不会接收和发送ospf报文
但是该接口的路由会通过其他接口发送出去
补充问题*****
问题1:为什么要选举主从设备?
回答1:OSPF是基于IP工作的,IP是一个无连接的协议,同时OSPF由没有其他确认机制来保证DD报文的传输可靠,选举主从可以让报文的传递有序可靠,同时也起到了确认的作用。
问题2:MTU在那个阶段协商,如果协商不通过会有什么问题?
回答2:MTU(最大传输单元,缺省为1500字节)在exstart阶段协商,华三默认不协商。协商不通过会导致无法建立邻接关系,当dd报文中的MTU值小于等于接口的MTU值就会导致协商失败
问题3:如果不协商MTU会带来什么问题?
回答3:不协商,可能会导致接收到的MTU值大于窗口值导致路由器无法接收并处理就会丢弃,导致数据无法完成同步
问题4:ospf在设计的时候为什么不直接泛洪LSU?
回答4:如果直接泛洪LSU,那么邻居重复接收到已经存在的LSA,导致资源浪费同时也消耗设备性能
问题5:ospf为什么才有组播来建立邻居?
回答5:便于发现邻居,同时只有使能了OSPF的路由器才会监听该组播地址,减少了其他设备的性能
问题6:影响邻居建立的因素有哪些?
回答6:router id冲突,区域不一致,认证没通过,hello定时器和邻居失效时间不一致,接口的掩码不一致,设置了静默接口,在NBMA网络中没有手动指定邻居等等
问题7:影响邻接关系建立的因素有哪些?
回答7:接口MTU不一致,并开启了MTU检查,在NBMA网络中所有接口的DR优先级为0
问题8:两台直连路由器的router id相同会有什么后果?
回答8:导致邻居关系无法建立
问题9:ospf相比rip的优势有哪些?
回答9:组播发送协议报文,可以避免无关设备收到协议报文,没有跳数限制更适合大规模组网,采用SPF算法无环,以开销作为度量值更能反应路径的质量,增量更新节约资源,收敛速度快
问题10:如何减小LSDB库的大小
回答10:划分区域,设置特殊区域,过滤无关路由,进行路由聚合
问题11:ospf的静默接口和rip的静默接口的区别?
回答11:rip的静默接口只禁止发送更新消息但是会接收,ospf的静默接口禁止发送和接收路由信息
问题12:ospfv2和ospfv3的相同点和不同点
回答12:相同点:都采用SPF算法,都有区域和router id的概念,都有邻居和邻接的机制和LSA扩散和老化时间。不同的点:ospfv2是基于网段,两台路由器想要形成邻居关系就必须在同网段,ospfv3是基于链路,一个链路可以划分多个子网,v2基于ipv4有验证,v3基于ipv6无验证,v3的LSA类型和内容与v2不一致
问题13:ospf为什么要设置优先级内部为10,外部为150?
回答13:防止在双向引入的适合出现环路问题
问题14:NSSA区域中的P置位作用是什么
回答14:如果NSSA区域中P置位,代表可以进行七转五的操作,否则不允许