目录
1.5.2 Router ID
1.1 动态路由协议简介
- 1、区别于静态路由,通过交互协议报文学习路由。
- 2、动态路由协议的分类i
- (1)距离矢量路由协议:基于距离矢量算法(DV)
- 特点:周期性交换路由表;交换整张路由表;水平分割,即从一个接口发出的路由回到此接口时不再学习这个路由。
- 缺点:metric可信度,单一度量(rip的跳数),存在次优路径的风险;交换整张路由表资源占用高,不能纠错。
- (2)链路状态路由协议:采用链路状态SPF算法
- 特点:交换的是链路状态信息,每个路由器根据此分别计算路由表和拓补。
- 3、动态路由协议的分类ii
- (1)内部网关协议IGP:RIP、EIGRP、OSPF、IS-IS
- (2)外部网关协议EGP:BGP
1.2 RIP特点
RIP特性 | 带来的问题 |
逐跳收敛 | 收敛慢,故障恢复时间长 |
传闻路由更新机制 | 缺少对全局网络拓扑的了解 |
最多有效跳数为15 | 环形组网中,使远端路由不可达 |
以“跳数”为度量 | 存在选择次优路径的风险 |
1.3 OSPF基本概念
1. 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior GatewayProtocol)。
2. OSPF作为基于链路状态的协议,具有收敛快、路由无环、可扩展等优点,成为优秀的内部网关协议被快速接受并广泛使用。
3. OSPFv2基于IPv4,扩展性是基于LSA的扩展,如果要在其他网络中使用必须重新开发,比如IPv6中的OSPFv3。
4. OSPF基于IP协议,协议号89,可靠性得不到保证,所以需要自身实现确认机制,认证机制。
5. 基于IP协议,随着IP普及度扩大,OSPF也成为主流的IGP协议,一般用于企业网络,企业网的工程师熟悉度较高。
1.4 OSPF特点
1. 适应范围广:支持各种规模的网络,最多可支持几百台路由器。
2. 快速收敛:在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
3. 无自环:由于OSPF根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
4. 区域划分:允许自治系统的网络被划分成区域来管理,针对区域做路由策略方便路由控制。路由器链路状态数据库的减小降低了内存的消耗和CPU的负担;区域间传送路由信息的减少降低了网络带宽的占用。
5. 等价路由:支持到同一目的地址的多条等价路由。
6. 路由分级:使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
7. 支持验证:支持基于接口和区域的报文验证,以保证报文交互和路由计算的安全性。
8. 组播发送:在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。
1.5 OSPF术语
1.5.1 OSPF区域
1、骨干区域:区域ID为0的是骨干区域,在OSPF域内有且只有一个,骨干区域不能分割。
2、非骨干区域:除了区域ID为0以外的区域,都是非骨干区域,非骨干区域可以有多个并必须与骨干区域相连。
划分区域的好处:
(1)、减少SPF树的规模,节省设备资源,加快收敛时间。
(2)、当某条链路出现频繁震荡的时候,进行合理的区域划分,影响的范围仅限在一个区域内,不会影响到其他区域。
(3)、可以针对某一区域做路由控制,比如:路由汇总和路由过滤。
1.5.2 Router ID
1、Router ID:用来唯一标识一台运行了OSPF 协议的路由器
2、表示方式:和IPv4地址一样(点分十进制)
3、选举规则
- 官方来讲:
(1)建议手动配置OSPF的router-id
(2)如果没有手动配置router-id,那么会使用路由器中环回接口IP地址最大的作为router-id
(3)如果没有配置环回接口,那么会使用路由器物理接口IP地址最大的作为router-id
- 实际来看:
(1)建议手动配置OSPF的router-id
(2)全局router-id为设备第一个配置了IP的接口IP地址。
(3)如果没有手动配置,那么会使用路由器全局router-id作为OSPF的router-id。
(4)当且仅当被选为全局Router ID的接口IP地址被删除/修改,才触发全局Router ID重新选择过程。只有被选举为Router ID的接口地址改变,全局Router ID,才会改变。即使该接口处于DOWN状态,其他接口或Loopback配置一个更大的地址,全局Router ID也不重新选。
(5)全局Router ID改变之后,不会影响到OSPF Router-ID,各协议需要通过手工执行reset命令才会使新的全局Router ID生效。
图一:全局Router ID改变不会影响协议进程ID
图二:手工指定OSPF进程Router ID
图三:重置OSPF进程,OSPF RouterID重新生成
1.5.3 路由器角色
1、内部路由器:所有接口都处于一个区域内
2、区域边界路由器(ABR):连接着两个以上的区域,其中有一个区域必须是骨干区域。
3、骨干路由器:至少有一个接口属于骨干区域
4、自治系统边界路由器(ASBR):执行了路由引入动作的路由器,NSSA区域执行七类转五类的ABR也是ASBR。
1.5.4 网络类型(接口链路类型)
1、Broadcast (广播型多路访问)
(1)当链路层协议为以太网或者FDDI时. OSPF网络类型默认为广播多路访问。
(2)以组播的形式发送Hello报文,以单播的形式发送DD报文和LSR报文,以组播或者单播的形式发送 LSU、LSAcK。
单播发送LSU:给邻居发送的LSR做回应。
组播发送LSU:1)DR向其他设备同步LSDB发送组播LSU;
2)拓扑发生改变,设备触发更新发送组播LSU。
(3)Hello报文的发送间隔10秒,邻居失效时间为40秒
(4)需要选举DR与BDR
(5)组播更新地址: DROther只监听224.0.0.5,DR和BDR同时监听224.0.0.6和224.0.0.5
2、P2P(点到点)
(1)当链路层协议为PPP或者HDLC时, OSPF网络类型默认为点到点。
(2)以组播224.0.0.5的形式发送Hello报文、DD报文、LSR报文,LSU报文和LSAcK报文。
(3)Hello报文的发送间隔10秒,邻居失效时间为40秒。
(4)不需要选举DR与BDR,直接建立邻接关系。
3、NBMA(非广播型多路访问)
(1)当链路层协议为帧中继或者ATM时, OSPF网络类型默认为非广播型多路访问。
(2)如果使用NBMA网络类型组网,那么需要在OSPF进程中,使用peer x.x.x.x命令来指定对端邻居。
(3)以单播的形式发送Hello报文、DD报文、LSR报文,LSU 报文、LSAcK报文。
(4)Hello报文的发送间隔30秒,邻居失效时间为120秒。
(5)需要选举DR与BDR。
4、P2MP(点到多点)
(1)没有任何—种被认为是点到多点,这种网络通常是认为手动修改.
(2)以组播224.0.0.5的形式发送Hello报文,以单播的形式发送DD报文、LSR报文,LSU报文、LSAcK报文。
(3)Hello报文的发送间隔30秒,邻居失效时间为120秒。
(4)不需要选举DR与BDR,直接建立邻接关系。
1.5.5 DR与BDR
产生背景:在MA网络中,全连接会导致邻居数量多,任一台路由器的路由发生变化时就会发生大量的更新信息,LSA泛洪增加,浪费带宽。
1.5.5.1 DR与BDR作用
(1)DR(designated router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
(2)DR与其他所有的路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息,这样就大大减少了MA网络中的邻接关系数据 及交换链路状态信息消耗的资源。
(3)DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步,此时就需要重新选举DR、再与非DR路由器建立邻接关系,完成LSA的同步,为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。
1.5.5.2 特点
(1)OSPF是基于接口的,DR也是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。
(2)只有在广播和NBMA类型接口时会选举DR和BDR
(3)接口优先级高的路由器成为DR,优先级次高的成为BDR;(默认情况下,接口处的OSPF优先级都为1)
(4)若接口优先级都相同,那么会选举Router ID最大的路由器为DR,次大的为BDR;(若接口优先级为0,那么这台路由器不会进行DR与BDR的选举,只能成为DRother)
(5)DR与BDR是不可抢占的,若DR、BDR已经选择完毕,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。只有DR或BDR发生了故障时,才会更换DR或BDR,也就是说,当DR发生了故障,那么BDR就成为DR,BDR发生故障的话,将重新选举BDR
(6)DR、BDR和所有OSPF路由器建立full关系,DR Other之间保留在2-Way状态。
1.5.5.3 选举过程
广播链路或者NBMA链路上DR和BDR的选举过程如下:
(1)ospf接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。
(2)在WaitingTimer阶段,发送的Hello报文是没有DR和BDR字段的。在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举。直接离开Waiting状态,开始邻居同步。
(3)假设网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR。
(4)当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR。
(5)只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR。该规则是:优先选择DR优先级最高的作为DR,次高的作为BDR。DR优先级为0的路由器只能成为DR Other;如果优先级相同,则优先选择Router ID较大的路由器成为DR,次大的成为BDR,其余路由器成为DR Other。
1、环境一:多台路由器同时加入MA网络
阶段一:三台路由器互相发送Hello去发现邻居
阶段二:在和邻居的邻接关系处于2-way状态后,并没有立即开始选举DR/BDR,而是等待“wait timer”计时器超时
阶段三:waiting超时,已经选举出DR
问题:为什么在阶段二图片中DR与BDR还没选举结束,10.1.1.1就开始发送DD。
原因:在MA网络中,是在路由器之间选举完DR与BDR发送DD报文,而不是2-WAY之后。
因为我查看的是10.1.1.2发出的Hello报文,由于10.1.1.1路由器开启较早,waiting时间已经超时,所以在10.1.1.1路由器上已经选举完了DR与BDR,在10.1.1.1视角中已经与其它路由器建立好邻居关系,此时会将邻居状态机置为ExStart,10.1.1.1开始单播发送DD报文。
2、环境二:一台DR设备加入即将开启OSPF的MA网络
阶段一、不开启R2和R3,在MA网络中只有一台开启OSPF
阶段二、MA网络加入新路由器R2和R3,R2与R3收到R1发来的报文,承认R1为DR,无需等待40秒, R2和R3收到R1发过来的带有邻居和DR字段的Hello报文,与R1建立邻居,开始R1与R2,R1与R3之间发送DD报文。
阶段三:选举BDR,在waiting阶段收到携带DR字段的Hello报文,waiting直接结束,开始发送填充以自己为BDR的Hello报文。
(1)R2发送自己为BDR的Hello报文。
(2)R3发送自己为BDR的Hello报文。
(3)最后R3竞选为BDR
3、环境三:两个独立OSPF系统的DR并到一起
环境三:
阶段一:两个OSPF设备独立时各自都为DR
阶段二:将中间链路打通,观察过程
(2)此时链路还是down,R2的DR为自己,邻居ID为空
(3)打通链路后,R2开始收到R1的发送第一个HELLO报文,DR为R1自己,邻居ID为空
接下来,R2收到R1的Hello报文后,发现自己的DR优先级更高,回复R1一个DR为R2自己,邻居ID为R1的HELLO报文
(4)R1收到R2的hello报文后,并承认R2为DR,R1自己为BDR,R1将R2置为2-way,开始主动发送DD报文
环境3与环境2一样:都是DR位已经选择出来,将两个系统并到一起时,重新选举DR不用等待40秒
1.5.5.4 总结
(1)当一个接口宣告之后,将发送Hello报文,并将DR/BDR字段设置为“0.0.0.0”,同时将等待一个计时器(wait timer),这个计时器的值= Router Dead Interval( Hello Interval*4),默认10s*4=40s。也就是说,当一个接口被OSPF认定为UP后,需要等待40s,才会进行DR/BDR的选举,而不是Two-way状态后,立即触发DR/BDR选举。如果OSPF路由器在超过Wait时间后也没有其它路由器与自己竞争DR与BDR的选举,那么就选自己为DR。
信息描述:State:接口状态机 Pri:接口DR优先级
(2)在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,直接离开Waiting状态,开始邻居同步。
(3)关于40s:准确来讲这40s并非DR选举所经历时间,而是在这40s内仍然等候有没有其他OSPF路由器加入,如果新加入的OSPF路由器携带了DR, BDR参数,则其它路由器直接使用该参数,不再等候40s之后进行竞选。之所以要先等待wait time计时器到期,是因为路由器刚刚接入此网络,不知道此网络的状况,因此他需要收集hello包进行分析,这就是wait time计时器的作用。而如果其收集到的hello包有证据表明此网络已经稳定,即DR/BDR选举已完成,那么他将不会等待waittime计时器到期而立刻触发选举。
(4)在实际的网络中,即使是40秒内同时起进程的情况也少见;实际情况下是率先启用ospf进程的路由器就很有可能成为DR,第二个启动的就很有可能成为BDR。
1.5.6 泛洪
1、泛洪机制
(1)OSPF不同于矢量路由协议,在于其路由是根据LSDB中得LSA计算出来得。
(2)同一个区域中所有OSPF路由器要有一个相同的LSDB,LSDB是LSA的集合,这些LSA在area内泛洪给每台路由器,泛洪过程是把路由器产生和学来的LSA向所有其他邻居及路由器通告的过程。
(3)LSDB数据库包含所有的LSA,数据库中任何LSA的变化都会触发当前路由器通告该变化给邻居路由器并泛洪至所属区域,为了确保数据库被及时更新且保证内容的一致性,OSPF泛洪使用LSU/LSACK 来保证泛洪的可靠性。
(4)ospf的update/lsack可以携带多份lsa,通过在邻居之间泛洪lsu/lsack,最后通告给全网。
2、泛洪行为
(1)泛洪也有水平分割行为,即从某接口收到LSA不会从该接口泛洪出去。(DR例外,DR在收到LSA后,会再从该接口发送出去同步给其他DR Other。
(2)一个接口接收到了不存在的LSA,首先会先存LSDB,再从其它接口重新泛洪出去。
(3)接收到一条新的LSA,那么新的LSA会代替老的LSA,然后把新的LSA泛洪给其他接口
(4)收到了相同的LSA,会直接忽略掉
收到了与自身设备产生的一样的LSA,会直接产生一条SEQ+1的LSA发布出去(ROUTER ID冲突场景)
(5)收到了比自己的老的LSA,会忽略对方发来的老的LSA,会把自己新的LSA发给它
(6)收到一份坏的LSA(比如checksum错误),那么本地会忽略它,并且把好的LSA(自己的LSA)发送给对方
1.5.7 OSPF三张表
1.5.7.1 邻居表
(1)在ospf交互链路状态通告之前,两台直连路由器需建立OSPF邻居关系,当一个接口激活ospf后,该接口周期性的发送hello报文,同时开始侦探hello报文从而发现直连链路上的邻居,当在接口发现邻居,邻居信息会被写入ospf邻居表,接着建立邻接关系。
(2)查看邻居命令:display ospf peer
信息描述:
1)State:邻居状态
2)Mode: DD交换过程中的角色为Master
3)Dead timer due in 36 sec:Dead定时器在36秒后到时,但如果正常收到Hello报文,到30秒后会重新刷新为40秒,再继续倒计时。
5)Retrans timer interval:重传时间,默认5秒(发送的LSU,5秒内没有收到LSAck,会重传LSU)
1.5.7.2 链路状态数据库LSDB
OSPF用LSA(link state Advertisement链路状态通告)来描述网络拓扑信息。
当建立邻居关系后, 运行ospf的路由器在网络中泛洪LSA,并将收到的LSA加载进LSDB,同一区域内的OSPF路由器拥有完全一致的LSDB,路由器通过 LSDB 获取网络的完整信息。OSPF 定义了多种类型的 LSA ,这些 LSA 各有用途,最终目的是让路由器知道网络的拓扑结构以及网段信息。
1.5.7.3 OSPF路由表
OSPF 根据 LSDB 中的数据,运行 SPF 算法,得到一棵以自己为根、无环的最短路径树,基于这棵树,OSPF 能够发现到达网络中各个网段的最佳路径,从而得到路由信息,并添加到 OSPF 路由表中。当然,这些 OSPF 路由表中的路由最终是否被添加到全局路由器,还需要经过比较路由优先级等过程。
注意:Type 2类的外部路由Cost会忽略内部开销值,Cost取值为AS外部开销值