ospf RFC2328 简介
- 开放式最短路径优先(Open Shortest Path
First,OSPF)是广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。但如果使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。 - OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系,并将已知的邻居列表和链路费用LSU(Link State
Update)报文描述,通过可靠的泛洪与自治系统AS(Autonomous System)内的其他路由器周期性交互,学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路由器注入其他AS的路由信息,从而得到整个Internet的路由信息。每隔一个特定时间或当链路状态发生变化时,重新生成LSA,路由器通过泛洪机制将新LSA通告出去,以便实现路由的实时更新实现
动态路由 概念相关
- 自治系统(AS)
一个自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。 - 内部网关协议和外部网关协议
- 内部网关协议(IGP) RIP OSPF ISIS
- 外部网关协议(EGP)BGP
- 洪泛/Flooding:
在 OSPF 协议中,用于 OSPF 路由器之间发送及同步连接状态数据库的部分。 - 路由收敛
指网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程。也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。
OSPF路由器类型
路由器类型
-
DR:指定路由器。 -
BDR:备份的指定路由器。 DR和BDR是由同一网段中所有的路由器根据路由器优先级、RouterID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。 在一个OSPF网络中,选举一个路由器作为指定路由器DR。所有其他路由器只和它一个交换整个网络的一些路由更新信息,再由它对邻居路由器发送更新报文。这样节省网络流量。再指定一个备份指定路由器BDR,当DR出现故障时,BDR起着备份的作用,确保网络的可靠性。 DRohter 要和DR以及BDR形成完全邻接关系full,只有完全邻接关系full才能互相通告同步数据库,DRother之间邻居关系只能到达2-WAY状态(双向邻居状态)在2-WAY状态下不能同步数据库 选举规则: -
比较优先级,优先级数值最大的为DR,其次大的为BDR(优先级默认为1,最大为255,当优先级为0时,则说明该路由器没有选举资格) -
若优先级相同时,则比较路由器的Router id,最大的为DR,其次大的为BDR。
目的:为了减少在同一个ospf中lsa(链路状态通告)的重复发送,在ospf协议内通过hello机制选举产生dr和bdr,在同一个ospf区域中,每个路由器都和dr,bdr相连,这样,当区域内的某一个路由器进行更新时,发送一个lsa到dr,再从dr发送到各个路由器,包括发送lsa给dr的源路由器,这样,有效的利用了网络带宽资源。
-
内部路由器(Internal Router): 该类路由器的所有接口都属于同一个OSPF区域。这些路由器不与其他区域相连接,并且只维护其所在的区域的LSDB。 -
区域边界路由器****ABR(Area Border Routers): 该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域(area 0)。 ABR用来连接骨干区域和非骨干区域,可以是实际连接,也可以是虚连接。 -
骨干路由器(Backbong Routers) 该类路由器属于骨干区域(area 0)。只维护骨干区域的LSDB! OSPF中,所有非骨干区域之间的信息都要通过骨干区域进行中转。 因此,所有的ABR和位于Area0的内部路由器都是骨干路由器。 -
自治系统边界路由器****ASBR(AS Boundary Routers) 与其他AS交换路由信息的路由器称为ASBR。 使用了多种路由协议! 只要一台OSPF路由器引入了外部路由的信息,他就称为了ASBR, 它有可能是ABR,区域路由器,不一定位于AS边界。
OSPF区域类型
标准区域 Normal Area
标准区域可以接收任何链路更新信息和路由汇总信息。
骨干区域 Backbone Area(AREA 0 )
主干区域是连接各个区域的传输网络,其他区域都通过主干区域交换路由信息。主干区域拥有标准区域的所有性质。
非骨干区域 (非AREA 0)
末梢区域(Stub Area)
末梢区域也被称为Stub区域,当一个非0常规区域只有单一的出口(例如该区域只有一个ABR),或者区域内的路由器不需要根据特定的外部路由来选择离开区域的出口时,该区域可以被配置为Stub区域。 当一个区域被配置为Stub区域后,这个区域的ABR将阻挡Type-5 LSA进入该区域(禁止外部路由被发布到该区域),通过这种方式可减少区域内所泛洪的LSA数量,同时该区域的ABR自动下发一条使用Type-3 LSA描述的默认路由,使得区域内的路由器能够通过这条默认路由到达域外,因此既减小了区域内网络设备的路由表规模,又保证了其访问外部网络的数据可达性。 在一个大量引入外部路由的OSPF网络中,将适当的区域配置为Stub区域可以极大地减小该区域内路由器的路由表规模,从而降低设备的资源消耗。另外,对于Stub区域而言,到达OSPF域内其他区域的路,由依然能够被注入,即ABR依然会将描述区域间路由的Type-3 LSA注入到Stub区域中。 Area 1被配置为Stub区域,这样Area 1的ABR(CO-SW1及Co-sw2)便不能再将Type-5 LSA注入这个区域。由于Type-5 LSA无法进入该区域,因此Type-4LSA也就没有必要再在该区域内泛洪,所以Co-sw1及Co-sw2也就不会再向该区域内注入Type-4 LSA,进而, Router-X的路由表将不会再出现到达省公司(OSPF域外)的具体路由,路由表的规模减小了,设备的资源消耗也就降低了。当然, Router- X访问省公司的需求还是存在的,为了让Router-X发往省公司的流量能顺利到达目的地, ABR会自动向Areal中注入默认路由,该条默认路由使用Type-3 LSA描述, co-SW1及CO-Sw2都会下发默认路由,网络管理员可以通过把控默认路由的Cost从而控制Routerx选择的出口。Router- X发往省公司的流量能够通过该默认路由先到达co-sW1或co-sw2,再通过它们转发到省公司。 设置末梢区域后ASBR生成Type-5 LSA无法进入,ABR也没有必要生成描述ASBR位置的Type-4 LSA,取而代之的是ABR生成一条描述外部路由的默认路由Type-3 LSA,让stub里的路由器转发发往外部网络的数据时把数据都发给ABR,由ABR统一转发。减小stub区域里的路由器的路由表大小。 所有连接到stub区域的路由器,对于该区域的stub属性要有一致的认知,否则OSPF邻居关系的建立将会出现问题。 还可以在ABR上配置,进一步阻挡描述区域间路由的Type-3 LSA进入,区域内的路由器访问区域外的网络时,统一把数据发给ABR。这样,这个区域内只有Type-1 LSA、Type-2 LSA及描述默认路由的Type-3 LSA存在,这意味着区域内路由器的路由表都将只有到达区域内部的路由,以及指向ABR的默认路由,路由器的路由表被极大程度地精简了。这种特殊区域也被称为完全末梢区域(Totally Stub Area)
配置Stub区域时需要注意下列几点:
- 骨干区域不能配置成Stub区域。
- 如果要将一个区域配置成Stub区域,则该区域中的所有路由器都要配置Stub区域属性。
- Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
- 虚连接不能穿过Stub区域。
完全stub区域:
不接受自治系统以外的路由信息,也不接受自治系统内其他区域的路由汇总信息,发送到本地区域外的报文使用默认路由0.0.0.0。完全stub区域是Cisco定义的,是非标准的。
非完全末梢区域(Not-So-Stubby Area)
NSSA (Not-So-Stubby Area)即非完全末梢区域,可以理解为Stub区域的变种,它拥有Stub区域的特点—阻挡Type-4及Type-5 LSA进入,从而在一定程度上减少区域内泛洪的LSA数量,同时它还有另一个特点,那就是允许该区域的路由器将少量外部路由引入OSPF,被引入的外部路由,以Type-7 LSA描述,并且这些Type-7 LSA只能够在当前的NSSA内泛洪,不允许直接进入Area0,为了使这些被引入NSSA的外部路由能让OSPF域内的其他区域学习到, NSSA的ABR会将Type-7 LSA转换成Type-5 LSA然后注入Areao,从而泛洪到整个OSPF域。
Area 1被配置成了NSSA。这样Area 1的ABR将阻挡Type-5 LSA进入这个区域。另一方面, Router- X连接到一个RIP网络,它将路由表中的RIP路由引入OSPF,这些被引入的外部路由以Type-7 LSA描述,这些LSA在Area 1内泛洪,并且禁止进入Area 0.co-sW1及CO-SW2作为NSSA的ABR, 自然也是能收到这些Type-7 LSA的,它们能够根据这些LSA计算出到达RIP网络的路由。
另外它们也负责将Type-7 LSA转换成Type-5 LSA并将后者注入Area 0,这样这些外部路由便能够被整个OSPF域中的路由器学习到。另一方面, CO-SW1及CO-SW2会向NSSA内下发一条Type-7 LSA的默认路由,使得Router-X能够通过这条默认路由到达省公司。
配置NSSA区域时需要注意下列几点:
骨干区域不能配置成NSSA区域。 如果要将一个区域配置成NSSA区域,则该区域中的所有路由器都要配置NSSA区域属性。 虚连接不能穿过NSSA区域。 在NSSA区域中,可能同时存在多个ABR,为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。 与Totally Stub区域类似,为了进一步减少NSSA区域中LSA的数量,OSPF还定义了Totally NSSA区域。
OSPF网路类型
点对点类型网络 广播型多路访问类型 非广播型多路访问类型 点对多点类型
? 接口的网络类型为NBMA或使用本命令将接口的网络类型手工改为NBMA时,必须使用命令peer来配置邻接点。
点对点类型网络 广播型多路访问类型 非广播型多路访问类型 点对多点类型
? 接口的网络类型为NBMA或使用本命令将接口的网络类型手工改为NBMA时,必须使用命令peer来配置邻接点。
五大数据包类型:
hello 包
字段 | 长度 | 含义 |
---|
Network Mask | 32比特 | 发送Hello报文的接口所在网络的掩码。 | HelloInterval | 16比特 | 发送Hello报文的时间间隔。 | Options | 8比特 | 可选项 | Checksum | 16 | 用于对报头和报文体的摘要信息用于校验,它能够校验该报文的完整性和正确性,同时也会对lsa的新旧程度产生影响 | auType认证类型 | 16 | 0:不认证,1:简单认证,2:MD5 | authentication | 32 | 表示认证密码或者摘要信息,当autype=0时,该字段为空 | E: | | 允许Flood AS-External-LSAs | MC: | | 转发IP组播报文 | N/P: | | 处理Type-7 LSAs | DC: | | 处理按需链路 | Rtr Pri | 8比特 | DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。 | RouterDeadInterval | 32比特 | 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 | Designated Router | 32比特 | DR的接口地址。 | Backup Designated Router | 32比特 | BDR的接口地址。 | Neighbor | 32比特 | 邻居,以Router ID标识。 |
1、子网掩码(华为特有)发送hello包接口的源ip地址及其掩码 2、Hello time、dead time --和ospf的接口网络类型有关 3、认证字段 --保证更新安全 4、区域ID --要求区域间存在ABR 5、末梢区域标记 --特殊区域
DBD 包
Init = 1 代表是第一个DD报文;Init = 0 代表不是第一个DD报文
More 0 代表后面没有DD报文;1代表后面还有DD报文
M/S 表示Master、Slave
LSR LSU LSACK
LSR 用于请求邻居的LSA LSU 用于发送LSA具体信息给邻居,或者用于洪泛LSA,或者用于隐式回应LSU报文。 LSAck用于回应LSU报文。
LSA: Type 1、Type 2 、Type 3 、Type 4、Type 5、Type 7
https://en.wikipedia.org/wiki/Link-state_advertisement
OPSF状态 机:
Down:邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。除了NBMA网络OSPF路由器会每隔PollInterval时间对外轮询发送Hello报文,包括向处于Down状态的邻居路由器(即失效的邻居路由器)发送之外,其他网络是不会向失效的邻居路由器发送Hello报文的。 Attempt:这种状态适用于NBMA网络,邻居路由器是手工配置的。邻居关系处于本状态时,路由器会每隔HelloInterval时间向自己手工配置的邻居发送Hello报文,尝试建立邻居关系。 Init:本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文,收到的Hello报文的邻居列表并没有包含本端的Router ID,双向通信仍然没有建立。 2-Way:互为邻居。本状态表示双方互相收到了对端发送的Hello报文,报文中的邻居列表也包含本端的Router ID,邻居关系建立。如果不形成邻接关系则邻居状态机就停留在此状态,否则进入ExStart状态。DR和BDR只有在邻居状态处于这个状态或者更高的状态才会被选举出来。 ExStart:协商主从关系。建立主从关系主要是为了保证在后续的DD报文交换中能够有序的发送。邻居间从此时才开始正式建立邻接关系。 Exchange:交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。 Loading:正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。 Full:建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了完全的邻接关系。
建立邻接关系→链路状态数据库→最短路径数→路由表
LSA
泛洪机制
在拓扑稳定的场合下,每份存放在LSDB中的LSA间隔30min都会被周期产生的新LSA刷新。泛洪机制把LSA向区域中的每条链路通告,不论LSA从哪条链路泛洪到当前路由器,备由器的LSDB中仅保存一份最新的LSA。若路由器收到多份相同“ID”的LSA,则仅比较序列号、Checksum及LSAAge,来判定是否继续泛洪该LSA,还是终止泛洪。
如果收到的LSA本地数据库中没有,则接收该LSA 并继续泛洪。
如果收到的LSA本地有,但收到的LSA比自己当前已有的LSA 要新,则更新LSDB并泛洪新的LSA。
如果自己已有的LSA比收到的LSA新 ,则不接收该LSA。
如果收到的LSA和自己路由器的LSA一样新,则忽略,并终止泛洪。如果收到的LSA损坏,比如 Checksum错误,则不接收该LSA。
判断LSA新旧的规则:
-
序列号越大代表越新。 -
若序列号相同,则Checksum数值越大代表越新。 -
上述一致的情况下,继续比较Age.
若LSA的Age 为 MaxAge,即 3600s,则该LSA被认定更“新”。
若LSA间Age差额超过15min.则 Age小的LSA被认定更“新”。
若LSA Age差额在15min 以内,则二者视为相同“新”的LSA,只保留先收到的一份LSA。
LSDB 中LSA的超时机制:
LSDB中 LSA都有Age,最大是3600s,超过该值,则该LSA会从LSDB中被清除。
LSDB中LSA被清除的场景:
-
超过MaxAge 被路由器自动清除; -
LSA起源路由器产生MaxAge的LSA并向区域中泛洪,收到的路由器用其更新自己LSDB中的LSA。泛洪 MaxAge 的LSA,其作用相当于“毒化”路由。
OSPF区域间环路及防环方法
OSPF在区域内部运行的是SPF算法,这个算法能够保证区域内部的路由不会成环。然而划分区域后,区域之间的路由传递实际上是一种类似距离矢量算法的方式,这种方式容易产生环路。
为了避免区域间的环路,OSPF规定直接在两个非骨干区域之间发布路由信息是不允许的,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个ABR都必须连接到骨干区域。
假设OSPF允许非骨干区域之间直接传递路由,则可能会导致区域间环路。如图5所示,骨干区连接到其他网络的路由信息会传递至Area 1。假设非骨干区之间允许直接传递路由信息,那么这条路由信息最终又被传递回去,形成区域间的路由环路。为了防止这种区域间环路,OSPF禁止Area 1和Area 3,以及Area 2和Area 3之间直接进行路由交互,而必须通过骨干区域进行路由交互。这样就能防止区域间环路的产生。
OSPF缺省路由
缺省路由是指目的地址和掩码都是0的路由。当设备无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5或Type7路由。
OSPF缺省路由通常应用于下面两种情况:
由区域边界路由器(ABR)发布Type3缺省Summary LSA,用来指导区域内设备进行区域之间报文的转发。 由自治系统边界路由器(ASBR)发布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用来指导自治系统(AS)内设备进行自治系统外报文的转发。 OSPF缺省路由的发布原则如下:
OSPF路由器只有具有对区域外的出口时,才能够发布缺省路由LSA。 如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型缺省路由。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。 外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
虚拟链路
Virtual Link(虚链路):OSPF规定网络中存在多区域必须部署骨干区域Area0,如未连接LSA泛洪就会出现问题,当遇到网络不易做大的变动但是此网络必须连接到Area0时就可以使用Virtual Link,它是一种虚拟的,逻辑的链路,被部署两台OSPF两台路由器中间,注意Stub区域千万不能部署Virtual link。 虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。
-
根据RFC 2328,在部署OSPF时,要求所有的非骨干区域与骨干区域相连,否则会出现有的区域不可达的问题。但是在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求,此时可以通过配置OSPF虚连接来解决这个问题。 -
Area 2没有连接到骨干区Area 0,所以RouterA不能作为ABR向Area 2生成Area 0中Network1的路由信息,所以RouterB上没有到达Network1的路由。此时可以考虑部署虚连接来解决这个问题。 -
通过虚连接,两台ABR之间直接传递OSPF报文信息,两者之间的OSPF设备只是起到一个转发报文的作用。由于OSPF协议报文的目的地址不是这些设备,所以这些报文对于两者而言是透明的,只是当作普通的IP报文来转发。 -
虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,虚连接的两端和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区域(Transit Area)。配置虚连接时,必须在两端同时配置方可生效。 -
然而,虚连接的存在增加了网络的复杂程度,而且使故障的排除更加困难。因此,在网络规划中应该尽量避免使用虚连接。虚连接仅是作为修复无法避免的网络拓扑问题的一种临时手段。虚链路可以看作是一个标明网络的某个部分是否需要重新规划设计的标志。
OSPF路由聚合
路由聚合是指ABR可以将具有相同前缀的路由信息聚合到一起,只发布一条路由到其它区域。
区域间通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高设备的性能。
OSPF有两种路由聚合方式:
ABR聚合
- ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。
- ASBR聚合
配置路由聚合后,如果本地设备是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。 如果本地设备既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。
OSPF路由过滤
OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
路由引入
- OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。
引入路由发布
- OSPF引入了路由后会向其它邻居发布引入的路由信息。
- 可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效。
路由学习
- 通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自治系统外部的路由进行过滤。
- 该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。
区域间LSA学习
- 通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。
- 区域间LSA学习和路由学习之间的差异在于:区域间LSA学习直接对进入区域的LSA进行过滤;路由学习不是对LSA进行过滤而是对LSA计算出来的路由是否添加本地路由表进行过滤,学习到的LSA是完整的。
区域间LSA发布
- 通过命令可以在ABR上配置对本区域出方向的Summary LSA进行过滤。该配置只在ABR上配置有效。
OSPF多实例
- OSPF支持多进程,在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。
路由优先级
|