1 OSPF基本概念
1.1 拓扑和路由器类型
OSPF整体拓扑
- OSPF把自治系统划分成逻辑意义上的一个或多个区域,所有其他区域必须与区域0(骨干区域)相连。
路由器类型
- 区域内路由器IR(Internal Router):该类设备的所有接口都属于同一个OSPF区域。
- 区域边界路由器ABR(Area Border Router):该类路由器可以同时属于两个以上的区域,但其中一个接口必须在骨干区域。
ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接(虚链路Virtual Link)。 - 骨干路由器BR(Backbone Router):该类路由器至少有一个接口属于骨干区域。所有ABR和位于Area0的内部路由器都是骨干路由器 。
- 自治系统边界路由器ASBR(AS Boundary Router)与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
拓扑所体现的IS-IS与OSPF不同点
- 在OSPF中,每个链路只属于一个区域,而在IS-IS中,每个链路可以属于不同区域。
- 在IS-IS中,单个区域没有骨干与非骨干区域的概念,而在OSPF中,Area0被定义为骨干区域。
- 在IS-IS中Level-1和Level-2级别的路由都采用SPF算法,分别生成最短路径树SPT。而在OSPF中,只有在同一个区域内才使用SPF算法,区域之间的路由器发布还是距离矢量算法,区域之间的路由需要通过骨干区域来转发。
1.2 OSPF网络类型,DR,BDR介绍
OSPF支持的网络类型
- 点到点P2P类型: 当链路层协议是PPP/HDLC时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文/DD报文/LSR报文/LSU报文/LSAck报文)。
- 点到多点P2MP类型(Point-to-Multipoint):没有一种链路层协议会被缺省的认为是Point-to-Multipoint 类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
- NBMA类型(Non-broadcast multiple access):当链路层协议是ATM时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
- 广播类型(Broadcast):当链路层协议是Ethernet/FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中,通常以组播的形式发送Hello报文/LSU报文和LSAck报文。其中224.0.0.5为OSPF路由器的预留IP地址,224.0.0.6为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文。
在至少含有两个路由器的广播型网络和NBMA网络都有一个指定路由器(DR)和一个备份指定路由器(BDR)
DR/BDR的作用
- 减少邻居关系的数量,从而减少链路状态信息和路由信息的次数。DRother只与DR/BDR建立完全邻接关系。DR与BDR之间建立完全邻接关系。
- DR产生网络LSA来描述NBMA网络或者广播网段信息。
DR/BDR选举规则
- DR/BDR由OSPF的Hello协议选举,选举是根据端口的路由器优先级(Router Priority)进行的。
- 如果Router Priority被设置为0,那么该路由器将不允许被选举成DR或者BDR。
- Router Priority越大越优先。如果相同,Router ID大者优先。
- DR/BDR不能抢占。
- 如果当前DR故障,当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR故障,则DR不变,重新选举BDR。
IS-IS DIS 与OSPF DR/BDR的不同点
- 在IS-IS广播网络中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
- 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选举成为新的DIS,原有的节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
- 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器。
1.3 OSPF报文类型
Hello报文:用于建立和维持邻居关系
DD报文:描述本地LSDB的摘要信息,用于两台路由器进行数据库同步。
LSR报文:用于向对方请求所需的LSA,路由器只有在OSPF邻居双方成功交换DD报文后才会向对方发送LSR报文。
LSU报文:用于向对方发送其所需的LSA。
LSAck报文:用来对收到的LSA进行确认。
OSPF报文概述
- OSPF报文直接运行于IP之上,IP协议字段号为89。OSPF有五种报文类型,但是OSPF报文头部格式都是相同的。
- 除Hello报文外,其它的OSPF报文都携带LSA信息。
1.3.1 OSPF报文头部信息
所有的OSPF报文使用相同的OSPF报文头部
- OSPF Version:OSPF协议号,应当被设置成2.
- Message Type:OSPF报文类型,OSPF共有五种报文
- Packet Length:OSPF报文总长度,包括报文头部。单位是字节。
- Router ID:生成此报文的路由器的Router ID。
- Area ID:此报文需要被通告到的区域。
- Checksum:是指一个对整个数据包(包括包头)的标准IP校验和。
- AuType:验证此报文所应当使用的验证方法。
- Authentication:验证此报文时所需要的密码等信息。
1.3.2 Hello报文格式
- Network Mask:发送Hello报文的接口的网络掩码。
- HellloInterval:发送Hello报文的时间间隔。单位为秒(s)。
- Options:标识发送此报文的OSPF路由器所支持的可选功能。
- Router Priority:发送hello报文的接口的Router Priority,用于选举DR和BDR。
- Router Dead Interval:宣告邻居路由器不继续在该网段上运行OSPF的时间间隔,单位为秒(s),通常***4倍HelloInterval***。
- Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
- Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器。
- Active Neighbor:邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文。
1.3.3 DD报文格式
- Interface MTU:是指在数据包不分段的情况下,始发路由器接口可以发送的最大IP数据包大小。当在虚连接时,该段为0x0000。
- Option:同Hello报文。标识发送此报文的OSPF路由器所支持的可选功能。
- I 位:当发送的是一系列DD报文中的第一个数据包时,该位置位为1。后续的DD报文将该位置位0。
- M 位:当发送的数据包还不是一个系列DD报文中的最后一个数据包时,该位置为1。如果是最后一个DD报文,则将该位置为0。
- MS 位:在数据库同步中,主要用来确认协商过程中的序列号。
- DD Sequence Number:DD的序列号报文,4byte。
- LSA头部信息。
1.3.4 LSR报文格式
- Link State Type:用来指明LSA标识是一个路由器LSA、一个网络LSA还是其它类型的LSA。
- Link State ID:不同类型LSA该字段意义不同。
- Advertising Router:始发LSA通告的路由器的ID。
1.3.5 LSU报文格式
- Number of LSA:指出这个数据包中包含的LSA的数量。
- LSA:明细LSA信息。
1.3.6 LSAck报文格式
- Header of LSA:LSA头部信息。
1.3.7 LSA头部信息
除Hello报文外,其它的OSPF报文都携带LSA信息。
- LS Age:此字段表示LSA已经生存的时间,单位是秒(s)。
- Option:该字段指出了部分OSPF域中LSA能够支持的可选性能。
- LS Type:此字段标识了LSA的格式和功能。常用的LSA类型有五种。
- Link State ID:根据LSA的不同而不同。
- Advertising Router:始发LSA的路由器ID。
- Sequence Number:当LSA每次新的实例产生时,这个序列号就会增加。这个更新可以帮助其它路由器识别最新的LSA实例。
- Checksum:关于LSA的全部信息的校验和。因为Age字段,所以校验和会随着老化时间的增大而每次都需要重新进行计算。
- Length:是一个包含LSA头部在内的LSA的长度。
1.4 LSA类型和区域内路由计算与描述
- Router-LSA(Type 1)
路由器产生,描述了链路状态和开销,本区域内传播。 - Network-LSA(Type 2)
DR产生,描述本网段的链路状态,本区域内传播。 - Network-Summary-LSA(Type 3)
ABR产生,描述区域内某个网段的路由,区域间传播(除特殊区域)。 - ASBR-Summary-LSA(Type 4)
ABR产生,描述到ASBR的路由,OSPF域内传播(除特殊区域)。 - AS-External-LSA(Type 5)
ASBR产生,描述到AS外部的路由,OSPF域内传播(除特殊区域)。 - NSSA LSA(Type 7)
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
区域内路由的计算只涉及到Router-LSA和Network-LSA,也只有Router-LSA和Network-LSA参与OSPF路由计算。
1.4.1 描述拓扑结构
1.4.2 Router-LSA
Router-LSA必须描述始发路由或链路
区域内路由计算用到Router-LSA
[R5]display ospf lsdb router-self-originate
OSPF Process 1 with Router ID 5.5.5.5
Area:0.0.0.1
Link State Database
Type : Router
Ls id : 5.5.5.5
Adv rtr : 5.5.5.5
Ls age : 194
Len : 48
Options : ASBR E
Seq# : 80000007
Chksum : 0xacb8
Link count : 2
* Link ID : 4.4.4.4
Data : 45.0.0.5
Link Type : P-2-P
Metric : 1562
* Link ID : 45.0.0.5
Data : 255.255.255.0
Link Type : StubNet
Metric : 1562
Priority : Low
- Link State ID:是指始发路由器的ID
- V:设置为1时,说明始发路由器是一条或者多条具有完全邻接关系的虚链路的一个端点。
- E:当始发路由器是一个ASBR路由器时,该位置为1。
- B:当始发路由器是一个ABR路由器时,该位置为1。
- Link Type:置位1表示点到点连接一台设备;置位2表示连接一个Transit网络,可以理解为广播网络;置位3表示连接Subnet网络,一般改地址为环回口地址;置位4表示虚链路。
- Link ID:Link Type置位1表示邻居路由器的ID;Link Type置位2表示DR路由器的接口IP地址;Link Type置位3表示IP网络或子网地址;Link Type置位4表示邻居路由器的路由器ID。
- Link Data:Link Type置位1表示和网络相连的始发路由器的接口的IP地址;Link Type置位2表示和网络相连的始发路由器的接口的IP地址;Link Type置位3表示网络的IP地址或子网掩码。
- P-2-P链路:描述到邻居连接
- Transit链路:描述到DR的连接
- Stub链路:描述子网,没有邻居(Loopback或者只有一个以太网链路)
- V-Link链路:描述虚链路点到点链路。
- ToS,暂不支持。
- Metric:是指一条链路或接口的代价。
1.4.3 Network-LSA
DR产生,BDR不会产生Network-LSA
[R2]display ospf lsdb network self-originate
OSPF Process 1 with Router ID 2.2.2.2
Area : 0.0.0.0
Link State Database
Type : Network
Ls id : 10.0.0.2
Adv rtr : 2.2.2.2
Ls age : 393
Len : 36
Options : E
Seq# : 80000006
Chksum : 0x9088
Net mask : 255.255.255.0
Priority : Low
Attached Router 2.2.2.2
Attached Router 3.3.3.3
Attached Router 4.4.4.4
- Link State ID : 是指DR路由器接口上的IP地址。
- Network Mask :指定这个网络上使用的地址或者子网掩码
- Attached Router :列出该多路访问网络上与DR形成完全邻接关系且包括DR本身的所有路由器的ID
1.4.4 Network-Summary-LSA (ABR产生)
[R4]display ospf lsdb summary
Type : Sum-Net
Ls id : 45.0.0.0
Adv rtr : 4.4.4.4
Ls age : 425
Len. : 28
Options : E
Seq#. : 80000003
Chksum : 0xde1f
Net mask : 255.255.255.0
ToS : 0
Metric : 1562
Priority : Low
- Link State ID : 对于3类LSA来说,表示所通告的网络或子网的IP地址。对于4类LSA来说表示所通告的ASBR路由器的ID。
- Network Mask : 对于3类LSA来说,表示所通告的网络的子网掩码或者地址。对于4类LSA来说,该字段没有实际意义,一般置位0.0.0.0。
- Metric :指到目的地址的路由的代价。
Network-summary-LSA 在区域间传递,区域间路由是矢量的,那么矢量路由器需要防止环路。
防止环路的方法如下:
(1)ABR不能才能从非骨干区域接收Type 3 LSA
(2)Downbit防环
1.4.5 ASBR-Summary-LSA (ABR产生)
1.4.6 AS-External-LSA (ASBR产生)
[R4]display ospf lsdb ase
OSPF Process 1 with Router ID 4.4.4.4
Link State Database
Type : External
Ls id : 55.55.55.0
Adv rtr : 5.5.5.5
Ls age : 2341
Len : 36
Options : E
Seq# : 80000002
chksun :0xa273
Net mask : 255.255.255.0
ToS : 0
Metric : 1
E type : 2
Forwarding Address : 0.0.0.0
Tag : 1
Priority : Low
- Link State ID :目的地的IP地址。
- Network Mask :指所通告的目的地的子网掩码或地址
- E Type :用来指定这条路由使用的外部度量的类型。如果该E bit设置为1,那么度量类型就是E2;如果该E bit设置为0,那么度量类型就是E1。
- Metric :指路由的代价。由ASBR设定。
- Forwarding Address :是指到达所通告的目的地的数据包应该被转发到的地址。如果转发地址是0.0.0.0,那么数据包将被转发到始发ASBR上。
- External Route Tag :标记外部路由。
1.4.7 NSSA LSA (ASBR产生)
[R5]display ospf lsdb nssa self-originate
Type : NSSA
Ls id : 55.55.55.0 //目的网段的网络地址
Adv rtr : 55.55.55.55
Ls age : 66
Len : 36
Options : NP
Seq# : 80000001
Chksum : 0x8390
Net Mask : 255.255.255.0
ToS : 0
Metric : 1
E Type : 2
Forwarding AddRess : 45.0.0.5
Tag : 1
Priority : Low
- Forwarding Address : 如果网络一台NSSA ASBR 路由器和临街的自治系统之间作为一条内部路由通告的,那么这个FA就是这个网络的下一跳地址。如果网络不是作为一个内部路由通告的,那么这个FA地址将是NSSA ASBR路遇起的ID。
1.4.8 区域内路由计算SPF过程
1.5 Option 字段
- Option可选字段出现在每一个Hello数据包、DD和每个LSA中的。
- Option字段允许路由器和其他路由器进行一些可选性能的通信。
Option字段解释:
- DN :用来避免在MPLS VPN中出现环路。当3类、5类和7类LSA中设置了DN位之后,接受路由器就不能在他的OSPF路由计算中使用该SLA。
- O : 该字段指出始发路由器支持Opaque LSA类型(Type 9、Type 10和Type 11)。
- DC位 : 当始发路由器支持按需链路上的OSPF的能力时,该位将被设置。
- EA :当始发路由器具有接收和转发外部属性LSA的能力时,该位将被设置。
- N位 :只有在Hello数据包中。N=1表明路由器支持7类LSA。N=0表明该路由器将不接收和发送NSSA LSA。
- P位 :只用在NSSA LSA。该位将告诉一个非纯末节区域中的ABR路由器将7类LSA转换为5类LSA。
- MC位 :支持MOSPF。
- E位 :当始发路由器具有接收OSPF域外部LSA的能力时,该位置位。在所有%类LSA和始发于骨干区域一级非末节区域的LSA中,该位置为1.而始发于末节区域的LSA中,该位置为0.如果Hello报文中该位表明一个接口具有接收和发送5类LSA的能力。
- MT位 :表明始发路由器支持多拓扑OSPF。
2 OSPF 邻居和邻接关系
2.1 邻居关系建立
邻居状态建立:
- Down :这是邻居的初始状态,表示没有从邻居收到任何信息。
- Init :在此状态下,路由器已经从邻居收到Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
- 2-Way :在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。如果网络为广播网络或者NBMA网络则选举DR/BDR。
在形成邻居关系的过程中,需要对Hello报文携带的参数进行协商:
- 如果接收端口的网络类型是Broadcast,P2MP或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为P2P类型或者V-Link,则不检查Network Mask字段。
- 所接收的Hello报文中的Hello和Dead字段必须和接收端口的配置保持一致。
- 所接收的Hello报文中的认证字段需要一致。
- 所接收的Hello报文中的Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置保持一致。
- 所接收的Hello报文中的区域字段必须保持一致。
2.2 邻接关系建立
邻接状态建立:
- 邻居状态机变为ExStart以后,R1向R2发送第一个DD报文,在这个报文中,DD序列号被设置为5528(假设),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报文,确保信息传输的可靠性。LS Ack报文用于泛洪对已接收LSA的确认。
2.3 邻居关系状态机
- Down : 这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为Poll Interval,通常和Router Dead Interval间隔相同。
- Attempt : 此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为Hello Interval。如果Router Dead Interval间隔内未收到邻居的Hello报文,则转为Down状态。
- Init : 在此状态下,路由器已经从邻居收到Hello报文,但是自己不在所收到的Hello报文的序列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
- 2-Way Received : 此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中),Init状态下产生此事件后,如果需要和邻居建立邻接关系则进入Exstart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way状态。
- 2-Way : 在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
- 1-Way Received : 此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常时由于对端邻居重启造成的。
2.4 邻接关系状态机
每个DD报文都有一个DD序列号,用于DD报文的确认机制。DD序列号是一个两字节的值。
主从关系(Master/Slave)
当两个路由器之间通过DD报文交换数据库信息的时候,首先形成一个主从关系,Router ID大的优先为主,确认主从关系之后,主路由器发送一个DD报文,从路由器不能主动发送DD报文,只能回应主路由器发送的DD报文,回应时使用的DD报文序列号必须和所回应的主路由器发送的DD报文的序列号一致。
相关状态解释如下:
- Exstart : 这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的,初始DD序列号实在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
- Exchange : 此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
- Loading : 相互发送LS Request报文请求LSA,发送LS Update通告LSA。
- Full : 两路由器的LSDB已经同步。
发送完最后一个DD报文之后,RTA产生一个ExchangeDone事件,将邻居状态改变为Loading,RTB收到最后一个DD报文之后,改变状态为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。
-
邻居状态变为Loading之后,RTA开始向RTB发送LS Request报文,请求那些在Exchange状态下通过DD报文发现的而且在本地LSDB中没有的链路状态信息。
-
RTB收到LS Request报文之后,向RTA发送LS Update报文,在LS Update报文中,包含了那些被请求的链路状态的详细信息。RTA收到LS Update报文之后,将邻居状态从Loading改变为Full。
-
RTA向RTB发送LS Ack报文,确保信息传输的可靠性。LS Ack报文用于泛洪对已接收LSA的确认。
邻居状态变成Full,表示达到完全邻接状态。
当有新的LSA生成或收到时,这条新的LSA应当被泛洪。
泛洪新的LSA时,只需要使用LS Update报文和LS Ack报文。
- 当RTA有新的LSA以后,RTA向RTB发送一个LS Update报文,在这个报文里包含这条LSA。
- 收到新的LSA以后,RTB向RTA泛洪一个LS Ack报文进行确认。
当在两个处于完全邻接状态(邻居状态为Full)的路由器之间泛洪新的LSA时,邻居状态不受影响。
2.5 总结OSPF邻接建立状态变换和用途
2.5.1 Init 状态
当路由器收到邻居发送来的Hello报文就将状态变换成Init状态,Init状态也说明路由器是可以收到邻居的Hello消息的,也说明路由器和邻居之间至少2层是互通的。
2.5.2 2-Way 状态
- 检查如下参数是否一致,在P2P与MA之间有什么不同
- 如果接收端口的网络类型是Broadcast/P2MP/NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型是P2P/V-Link,则不检查Network Mask字段。
- 所接收的Hello报文中的Hello和Dead字段必须和接收端口的配置保持一致。
- 所接收的Hello报文中的认证字段需要一致。
- 所接收的Hello报文中的Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置保持一致。
- 所接收的Hello报文中的区域字段必须一致。
- P2P不需要建立邻接,MA网络需要建立邻接。
- 用途?
- 当路由器和邻居之间建立双向通信就变成2-Way状态,或者说当路由器收到邻居发送过来的Hello报文发现自己在对方的邻居列表中就变成2-Way状态。
- DR选举和抢占
- DR选举和抢占,wait计时器就是Dead Time计时器,在这个时间里,如果路由器接收到的Hello报文中有DR和BDR就不进行DR选举。
2.5.3 Exstart 状态
- 通过检查Router-ID,DBD主从选举,Router-ID大的成为主,小的成为从。
2.5.4 Exchange 状态
- 检查LS Age 和 Sequence,同步DBD。
2.5.5 Loading 状态
- 发送LSR请求。
2.5.6 Full 状态
- 发出的LSR全部收到应答。
- 检查DBD完全一致。
- 已经同步了LSDB。
3 OSPF 中 DR/BDR选举
每一个含有至少两个路由器的广播型网络和NBMA网络都有一个指定路由器(Designated Router)和备份指定路由器(Backup Designated Router)。
DR和BDR的作用:
- 减少邻接关系的数量,从而减少链路状态信息一级路由信息的交换次数,这样可以接收带宽,减少路由器硬件的负担。一个既不是DR也不是BDR的路由器只与DR/BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播网络和NBMA网络中的邻接关系数量。
本例中,虽然RTA有3个邻居,但是之形成两个邻接关系。 - 在描述拓扑的LSDB中,一个NBMA网段或者广播型网段是由单独一条LSA来描述的,这条LSA是由该网段上的DR产生的。
- DR/BDR由OSPF的Hello协议选举,选举是根据端口的路由器优先级(Router Priority)进行的。
- 如果Router Priority被设置为0,那么该路由器将不允许被选举成DR/BDR。
- Router Priority越大越优先。如果相同,Router ID大者优先。
- 为了维护网络上邻接关系的稳定性,如果网络中已经存在DR/BDR,则新添加晋该网段的路由器不会成为DR/BDR,不管该路由器的Router Priority是否最大。
- 如果当前DR故障,当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR故障,则DR不变,重新选举BDR。
- Waiting:
在此状态下,路由器通过舰艇接收到的Hello报文检测网络中是否已经有DR和BDR。在此状态下的路由器不可以参与选举DR和BDR。 - Backup:
在此状态下,该路怄气成为所连接网络上的BDR,并域网段中所有的其他路由器建立邻接关系。 - DR:
在此状态下,该路由器成为所连接网络上的DR,并与网段中所有的其他路由器建立邻接关系。 - DR Other
该路由器连接到一个广播型网段或者NBMA网段,而且该路由器不是一个DR/BDR。在此状态下的路由器只与DR/BDR形成邻接关系并交换路由信息。 - Backup Seen:
路由器已经检测到网络上是否存在BDR。
一个OSPF路由器在广播型网段和NBMA网段上选举DR和BDR之前,首先会等待一段时间(RouterDeadInterval),在这段时间里检测网络上是否已经存在DR和BDR,如果已经有DR和BDR,则不启动选举过程,直接进入DR Other状态。因此网络上Router Priority最大的路由器不一定是DR,Router Priority第二大的路由器也不一定是BDR。
4 OSPF 特殊区域和外部路由
OSPF特殊区域为STUB区域和NSSA区域。
引入外部路由不建议引入直连的路由而采用Network+Silent方式引入直连路由。
4.1 Stub 区域
OSPF可以将特定区域配置为Stub和Totally Stub区域。Stub区域是一些特定的区域,Stub区域的ABR不传播他们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大量减少。Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,Stub区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。为保证到自治系统的路由依旧可达,该区域的ABR将生成一条缺省路由,并发给Stub区域中的其他非ABR路由器。
STUB区域:
- 骨干区域不能配置成Stub区域。
- 如果要将一个区域配置成Stub区域,则该区域中的所有路由器都要配置Stub区域属性。
- Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
- V-Link不能穿过Stub区域。
- Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。
- 区域内的路由器必须通过ABR学习到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域。这样,到达自治系统的外部路由就可以通过ABR到达。
Totally Stub区域
- Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。
- 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。
- ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域。
- Stub区域的E-bit被置位。
实例
Q1和Q2所在的Area 2 为Stub区域或者Totally Stub区域。
4.2 NSSA 区域
- NSSA区域能够将外部路由引入并传播到整个OSPF自治区域中,同时又不会学习来自OSPF网络其他区域的5类LSA
- 包括NSSA和Totally NSSA
OSPF规定Stub区域是不能引入外部路由的,这样可以避免大量外部路由对Stub区域路由器带宽和存储资源的消耗。对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,Stub区域不能满足需求,因此Stub区域的变形–NSSA区域就产生了。
Type7 LSA:
- 7类LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述引入的外部路由信息。
- 7类LSA又NSSA区域的自治域边界路由器(ASBR)产生,其扩散范围仅限于边界路由器所在的NSSA区域
- NSSA区域的区域边界路由器(ABR)收到7类LSA时,会有选择的将其转化为5类LSA,以便将外部路由信息通告到OSPF网络的其他区域。
- 缺省路由也可以通过7类LSA来表示,用于指导流量刘翔其他自治与。
为了将NSSA区域引入的外部路由发布到其他区域,需要把Type-7 LSA转化为Type-5 LSA以便在整个OSPF网络中通告。
- Option字段P用来告知转化路由器该条7类LSA是否需要转化。
- 进行转化的是NSSA区域中Router ID最大的区域边界路由器(ABR)。
- 只有P位 置位并且Forwarding Address不为0的Type-7 LSA才能转化为Type-5 LSA。Forwarding Address用来表示发送的某个目的地址的报文将被转发到Forwarding Address所指定的地址。
- 满足以上条件的缺省7类LSA也可以被转化。
- 区域边界路由器ABR产生的Type-7 LSA不会置位 P-bit 。
注意事项:
- 在NSSA区域中,可能同时存在多个边界路由器。为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。
NSSA和Totally NSSA:
- Nssa区域允许引入少量通过本区域的ASBR到达的外部路由,但不允许其他区域的外部路由ASE LSA(Type-5 LSA)在区域内传播,也不允许域间路由(Type-3 LSA)在区域内传播。
实例:
Area1 为NSSA区域,
引入外部路由55.55.55.0/24
[Q4]
osof 1 router-id 4.4.4.4
area 0.0.0.0
network 10.0.0.0 0.0.0.255
area 0.0.0.1
network 45.0.0.0 0.0.0.255
nssa default-route-advertise no-summary
[Q4]display ospf lsdb
Area:0.0.0.1
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 4.4.4.4 4.4.4.4 25 48 80000004 1562
Router 55.55.55.55 55.55.55.55 2207 48 80000003 1562
Router 5.5.5.5 5.5.5.5 28 48 80000005 1562
Sum-Net 0.0.0.0 4.4.4.4 30 28 80000001 1
NSSA 0.0.0.0 4.4.4.4 27 36 80000003 1
NSSA 55.55.55.0 55.55.55.55 2228 36 80000001 1
NSSA 55.55.55.0 5.5.5.5 1209 36 80000001 1
NSSA 45.0.0.4 55.55.55.55 2228 36 80000001 1
NSSA 45.0.0.0 55.55.55.55 2228 36 80000002 1
//Q4为NSSA的ABR,向NSSA区域通告一条3类LSA的默认路由和一条NSSA的默认路由,这时因为有参数default-route-advertise 和 no-summary
[Q5]
ospf 1 router-id 5.5.5.5
import-route direct route-policy 1111
area 0.0.0.1
network 45.0.0.0 0.0.0.255
nssa
[Q5]display ospf lsdb
Area:0.0.0.1
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 4.4.4.4 4.4.4.4 229 48 80000004 1562
Router 55.55.55.55 55.55.55.55 2409 48 80000003 1562
Router 5.5.5.5 5.5.5.5 230 48 80000005 1562
Sum-Net 0.0.0.0 4.4.4.4 234 28 80000001 1
NSSA 55.55.55.0 5.5.5.5 1411 36 80000001 1
NSSA 0.0.0.0 4.4.4.4 231 36 80000003 1
NSSA 55.55.55.0 55.55.55.55 2430 36 80000001 1
NSSA 45.0.0.4 55.55.55.55 2430 36 80000001 1
NSSA 45.0.0.0 55.55.55.55 2430 36 80000002 1
[Q4]display ospf lsdb ase self-originate
Type : External
Ls id : 55.55.55.0 //Q4将NSSA lsa装换成external lsa发布
Adv rtr : 4.4.4.4
Ls age : 752
Len : 36
Options : E
seq# : 80000001
chksum : 0xf9ee
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 45.0.0.5
Tag : 1
Priority : Low
nssa [default-route-advertise][no-import-route][no-summary][flush-waiting-timer][set-n-bit]
default-route-advertise:该参数只用于NSSA区域的ABR或ASBR才有意义,配置后,对于ABR,不论本地是否存在缺省路由,都将生成一条Type-7 LSA向区域内发布缺省路由;对于ASBR,只有当本地存在缺省路由时,才产生Type-7 LSA向区域内发布缺省路由。
no-import-route:该参数用于禁止将AS外部路由以Type-7 LSA的形式引入到NSSA区域中,这个参数通常只用在既是NSSA区域的ABR,也是OSPF自治系统的ASBR的路由器上,以保证所有外部路由信息能正确地进入OSPF路由域。
no-summary:此参数表示不向区域内通告第三类和第四类LSA,因此NSSA中将没有区域间路由信息(类似于完全Stub区域),使用此参数之后,ABR会使用一条第三类LSA向NSSA中通告默认路由。
如果同时使用default-route-advertise和no-summary参数,则ABR会同时使用一条第三类LSA和一条第七类LSA分别向NSSA区域内通告默认路由,并且该默认路由只在NSSA区域内泛洪。
flush-waiting-timer:指定ASBR发送Type-5 LSA的时间。
set-n-bit:在DD报文中设置N-bit位的标志。
4.3 外部路由和Forwarding
Forwarding Address用来表示发送的某个目的地址的报文将被转发到Forwarding Address所指定的地址。
R1和R9连接在一起属于区域Area 1 ,R8属于ospf外部路由器,R1上引入一条静态的路由,这条静态的路由指向R8连接的网段8.8.8.0/24,由于在R1上引入的外部路由会通告给AREA 1中的R9,那么也就是告诉R9去往网段8.8.8.0/24的路径要经过R1(图中蓝线的路径箭头),然而R9和R8之间是通过交换机直连的,R9直接通过交换机去8.8.8.0/24网段(图中红线的路径箭头)要比ospf通告的要优先一些,那么这时就造成了次优路径。
解决这种次优路径的方法就是引入forwarding address,直接告诉R9去往8.8.8.0/24网段的下一条是R8的接口g0/0/0。
开启Forwarding Address 功能时要满足如下条件:
- 引入的外部路由,其对应的出接口开启了OSPF(Network命令)
- 引入的外部路由,其对应的出接口没有开启Silent-interface
- 引入的外部路由,其对应的出接口是网络类型Broadcast或者NBMA
如下位R1/R8/R9的配置和测试:
[R1] //R1配置
int g0/0/1
ip add 19.0.0.1 24
int g1/0/0
ip add 100.0.0.1 24
#
ospf 1 router-id 10.0.0.1
import-route static
area 0
authentication-mode simple plain huawei
network 10.0.0.1 0.0.0.0
network 10.0.123.1 0.0.0.0
area 1
network 19.0.0.0 0.0.0.255
network 100.0.0.0 0.0.0.255 //要将出接口宣告进ospf
#
ip route-static 8.8.8.0 255.255.255.0 g1/0/0 100.0.0.8
[R8] //R8配置
int g0/0/0
ip add 100.0.0.8 24
int loo0
ip add 8.8.8.8 24
#
ip route-static 0.0.0.0 0 g0/0/0 100.0.0.1
[R1] //R1上的外部路由通告
dis ospf lsdb ase self-originate
OSPF Process 1 with Router ID 10.0.1.1
Link State Database
Type : External
Ls id : 8.8.8.0
Adv rtr : 10.0.1.1
Ls age : 1588
Len : 36
Options : E
seq# : 80000001
chksum : 0x3709
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 100.0.0.8 //告诉其它的路由器的去往8.8.8.0/24的下一跳是100.0.0.8
Tag : 1
Priority : Low
[R9] //R9上正好下一跳是100.0.08
dis ip routing-table
Destination/Mask Proto Pre Cost Flags NextHop Interface
8.8.8.0/24 O_ASE 150 1 D 100.0.0.8 Ethernet0/0/1
4.4 NSSA 和Forwarding
NSSA中Forwarding Address 的处理:
对于NSSA区域中ASBR产生的Type-7 LSA,如果需要转换为Type-5 LSA发布到其它OSPF区域,那么Forwarding Address 必须要填写非0的IP地址。
对于Type-7 LSA中Forwarding Address的填写分为两种情况:
- 如果发布该Type-7 LSA的ASBR满足上文提到的非0 FA填写规则,那么就按照该规则填写。
- 如果发布该Type-7 LSA的ASBR不满足上述条件,那么需要从该路由器上启用OSPF协议的接口中选择一个进行填写。
对于情况2虽然RFC3101对FA的填写进行了要求,但是并未明确如何填写该FA。在某些组网环境中由于该FA地址填写不当,有可能产生次优路由。
考虑如下组网:
Router A 、Router B、Router C 形成NSSA区域,Router A 引入外部路由 Route a
通过Type-7 LSA通告给Router B和Router C,因为RFC并未明确要求这种情况下该Type-7 LSA中的FA如何填写,Router A可能会选择int 1 的IP地址填写FA,那么对于Router C来讲,到达Int 1有两条路径,一条是通过RouterA到达路径 Cost为100,另一条是通过Router B到达路径Cost为80,因此Router C将选择通过Router B的路径,很明显它实际上选择了一条次优路径。
如果在填写FA时,使用Loopback接口地址进行填写,可以解决上述问题。
实例:
Q5上引入外部路由52.0.0.0/24 和 51.0.0.0/24 ,那么Q5在向NSSA区域通告Type-7 LSA 外部路由时,必须加上Forwarding Address,这是NSSA区域规定的,至于能不能改,不清楚。
如果FA是Q5接口s0/0/0(35.0.05),那么area 0中的Q’2就是沿着Q2–LSW1–Q3–Q5的路径到达外部路由,很显然这不是最优路径, 因为最优路径是Q2–LSW1–Q4–Q5,Q3–Q5是1.544M,Q4–Q5是1000M。
为了解决这种次优路径问题,在Q5上创建loopback接口,并宣告进OSPF中,那么NSSA就会设置FA为这个Loopback接口的IP地址。如此,area 0中路由器去往loopback网段可以找到最优路径,那么去往外部路由也可以找到最优路径。
[Q5]dis current-configuration
ospf 1 router-id 5.5.5.5
import-route direct route-policy ISP //引入外部路由51.0.0.0/24和 52.0.0.0/24
area 1
network 35.0.0.0 0.0.0.255
network 45.0.0.0 0.0.0.255
network 5.5.5.5 0.0.0.0 //将环回接口宣告进ospf
nssa
#
route-policy ISP permit node 1
if-match ip-prefix 1
#
ip ip-prefix 1 index 51 permit 51.0.0.0 24 greater-equal 24 less-equal 24
ip ip-prefix 1 index 52 permit 52.0.0.0 24 greater-equal 24 less-equal 24
Q5引入外部路由之后由Router-id最大的ABR将Type-7 LSA转换成外部路由Type-5 LSA,本例中Q4的Router-id比Q3大,所以由Q4将Type-7 LSA转换成外部路由Type-5 LSA
[Q4]dis ospf lsdb ase self-originate
Type : External
Ls id : 51.0.0.0
Adv rtr : 4.4.4.4
Ls age : 36
Len : 36
Options : E
seq# : 80000001
chksum : 0xe791
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 5.5.5.5
Tag : 1
Priority : Low
Type : External
Ls id : 52.0.0.0
Adv rtr : 4.4.4.4
Ls age : 36
Len : 36
Options : E
seq# : 80000001
chksum : 0xda9d
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 5.5.5.5
Tag : 1
Priority : Low
[Q5] //Q5产生Type-7 LSA外部路由Forwarding Address 为5.5.5.5
dis ospf lsdb nssa self-originate
Type : NSSA
Ls id : 51.0.0.0
Adv rtr : 45.0.0.5
Ls age : 119
Len : 36
Options : NP
seq# : 80000004
chksum : 0x2f1d
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 5.5.5.5
Tag : 1
Priority : Low
Type : NSSA
Ls id : 52.0.0.0
Adv rtr : 45.0.0.5
Ls age : 119
Len : 36
Options : NP
seq# : 80000004
chksum : 0x2229
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 5.5.5.5
Tag : 1
Priority : Low
4.5 外部路由选路规则
通过同一个OSPF进程内的LSA计算的相同路由条目:
-
Intra-area 的路由优于 Inter-area 的
-
Inter-area 的路由优于 external-area 的
-
对于 external-area 路由,类型1方式记录路由开销的优于类型2的
-
对于 external-area 路由,且开销类型相同
-
1 同为外部类型2,重分布时携带M小的最优
-
2 ------------------------------------------------------------------------------------------------
** 定义两种开销值:
x=内部设备到Forwarding-Address的开销;FA为0时,X为到ASBR的开销
y=外部路由重分发进来时LSA携带的开销值
·--------------------------------------------------------------------------------------------------
此时需要分选择标准:
1- RFC1583标准:- TYPE-1路由对比:
取X+Y值最小路由 - TYPE-2路由对比:
取X值最小路由
之后就没有成型的规范了,基本实现应该是负载分担。
2- RFC2328标准:
直接比对X路由类型
(1)非backbone area的intra-area路由最优先
(2)intra-area backbone路由与inter-area路由优先级相同如果无法对比出结果,则等同RFC1583继续对比 如果多条都是最小开销,选择学习到的这些LSA的区域里,选择最大area-id里面的LSA使用 之后没有任何成型规范,如果ID(associated area-id)相同,基本实现应该是负载分担。
PS:目前Cisco的算法,依然是使用RFC1583,其进程命令compatible rfc1583,也只是在对OSPF汇总的Metric取值上做标准调整。应该是多RFC标准昏庸。华为、Juniper设备也有算法调整命令,而且作用在于修改此处算法标准。
- TYPE-1路由对比:
-
-
如果多external-area LSA参数相同(same destination,cost and non-zero forwarding address)
此时分情况讨论:
==A:==同类外部LSA(都是同普通区域同类外部或都是同NSSA区域同类外部)(参考RFC1583-12.4.5或RFC2328-12.4.4.1)
当ASBR之间相互可达,RID最大的ASBR重分发路由最优,其它ASBR都将自己的外部LSA置为超时失效状态,从LSDB清除掉。
如失去比自己RID大的ASBR的联系,则重新产生外部LSA
另一种情况,NSSA Type-7 LSA生成Type-5 LSA,如果多设备都是NSSA ABR,且NSSA区域内相互可达。则只有RID最高的NSSA ABR会执行Type-7 转 Type-5
==B:==不同类外部LSA
此时也要分选择标准:
*RFC01标准:
1.有P-bit功能的Type-7 LSA
2.Type-5 LSA
3.RID最高的LSA
*RFC1587标准:
1.Type-5 LSA
2.有P-bit功能的Type-7 LSA
3.其它Type-7 LSA
总结:目前,不同厂商使用标准都不一样,思科设备在IOS15.1(2)S前使用的时RFC1587标准,之后默认使用RFC3101标准。华为设备VRP5使用了RFC3101标准但是也可以兼容1587。
5 OSPF 如何维护LSDB
5.1 LSA的新旧比较
(1)当网络拓扑发生变化时,LSA的序列号会+1,比较序列号,序列号越大越优先。
(2)序列号相同,比较老化时间,越小越优先
采取的措施时泛洪、回馈、丢弃。
5.2 CheckSum 校验和
5.3 计时器
60分钟刷新删除陈旧的LSA
30分钟泛洪自己的LSA
5.4 更改SLA规则
自己更改自己,别人不能更改,否则LSA破坏风暴
6 OSPF 选路规则
-
路由优选顺序(从高到低)
1 区域内(Intra-Area)路由:优选cost小的
2 区域间路由(Inter-Area):优选cost小的
3 E1外部路由
-优选整体cost小的(整体cost=LSA中Metric+到ASBR/FA的内部路径开销)
-存在多种优选规则,见下Type-5/Type-7的LSA
4 E2外部路由:
-优选整体cost小的(整体cost=LSA中Metric)
-cost相同时,优选到ASBR/FA内部路径cost小的
-存在多种优选规则,见下Type-5/Type-7的LSA -
等价路由形成的基本条件
1 路由类型一致、cost相同
2 所属区域一样(外部路由无此限制)(目前各产品实现情况见注释)
3 直接吓一跳不同
4 E2外部路由还需要到ASBR/FA的路径等值 -
FA(Forwarding Address)对外部路由优选的影响
1 对于携带非零(0.0.0.0)FA地址的Type-5/Type-7 LSA,在计算路由时以FA地址(而非ASBR)作为该外部路由的逻辑下一跳
2 只有在本地OSPF路由表中存在匹配FA的OSPF内部路由时,该LSA携带的外部路由才可能添加到OSPF路由表中 -
Type-5 LSA携带FA(Forwarding Address)的条件(在生成该LSA的ASBR上)
1 该ASE路由的下一跳对应的路由为OSPF内部路由或本地启用OSPF的接口对应的直连网段
2 下一跳对应的出接口类型为BMA或者NBMA,且此接口不是Silent接口
3 下一跳对应的路由的直接下一跳地址落在OSPF协议中Network发布的网络范围之内(VRP5有些版本无此限制)
4 满足上面3个条件,则生成Type-5 LSA时FA为该路由的直接下一跳地址 -
Type-7 LSA携带FA(Forwarding Address)的原则(在生成该LSA的ASBR上)
1 需要转换的Type-7 LSA(P-bit)必须携带非零FA,转换为Type-5 LSA时FA不变
2 满足前面Type-5 LSA对应条件时,Type-7 LSA携带FA为该路由的直接下一跳地址
3 否则,RFC1587规定选一个启用OSPF的接口作为FA
4 RFC3101做了进一步的限定,建议选择顺序如下:*优选启用OSPF的Lookback接口地址 *选择启用OSPF的stub接口(无邻居的接口)地址 *选择启用OSPF的其他接口地址
7 OSPF 路由聚合
-
OSPF路由和外部路由的聚合是独立进行的
-
OSPF路由聚合(只能在ABR上进行)
。abr-summary 10.0.0.0 255.255.255.0
。仅能聚合ABR发给其他区域的本区域内部路由,聚合路由LSA的Metric=最差明细路由cost
。加上no-advertise参数可以实现Type-3 LSA过滤
。多ABR区域注意聚合的一致性(否则没有负载均衡) -
外部路由聚合(只能在ASBR上进行)
。asbr-summary 10.0.0.0 255.255.255.0
。仅能聚合本地引入的外部路由
。加上no-advertise参数可以实现Type-5/Type-7 LSA过滤
。NSSA区域Translator ABR可以聚合整个区域NSSA路由
—。注意聚合后FA丢失,可能造成没有负载均衡
。聚合路由属性:
—。聚合路由的类型(E1/E2)与最差明细路由相同cost(cisco选最优的)
—。聚合路由类型为E1时,LSA Metric=最差明细路由LSA Metric
—。聚合路由类型为E2时,LSA Metric=(最差明细路由LSA Metric)+1
聚合的问题:掩码问题
解决方法:使用网段和广播地址作为LS-ID
8 OSPF 扩展特性
8.1 Virtual-Link 详解
Virtual-Link
1 工作原理
2 检测链路变化
3 缺点
8.2 认证
认证分类
接口认证
区域认证
认证方式
Null
Simple
MD5
HMAC-MD5
当两种验证方式都存在时,优先使用接口验证方式。
8.3 Database Overflow数据库超限
限制非缺省外部路由数量,避免数据库超限。
通过设置路由器上非缺省外部路由数量的上限,来避免数据库超限。OSPF网络中所有路由器都必须配置相同的上限值。这样,只要路由器上外部路由的数量达到该上限,路由器就进入Overflow状态,并同时启动超限状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出超限状态。
OSPF Database Overflow过程:
- 进入Overflow状态时,路由器删除所有自己产生的非缺省外部路由。
- 处于Overflow状态中,路由器不产生非缺省外部路由,丢弃新收到的非缺省外部路由且不回复确认报文,当超限状态定时器超时,检查外部路由数量是否仍然超过上限,如果超限则重启定时器,如果没有则退出超限状态。
- 退出Overflow状态时,删除超限状态定时器,产生非缺省外部路由,接收新收到的非缺省外部路由,回复确认报文,准备下一次进入超限状态。
8.4 Demand Circuit(DC按需链路)
9 缺省路由
- 普通区域
ASBR上手动配置产生缺省Type-5 LSA,通告到整个OSPF自治域(特殊区域) - Stub区域
ABR自动产生一条缺省Type-3 LSA,通告到整个Stub区域内 - Totally Stub区域
ABR自动产生一条缺省Type-3 LSA,通告到整个Stub区域内 - NSSA区域
在ABR手动配置产生一条缺省Type-7 LSA,通告到整个NSSA区域内
在ASBR手动配置产生一条缺省Type-7 LSA,通告到整个NSSA区域内 - Totally NSSA区域
ABR自动产生一条缺省Type-3 LSA,通告到整个NSSA区域内
OSPF缺省路由通常应用于下面两种情况:
- 由ABR发布缺省Type-3 LSA,用来指导区域内路由器进行区域间报文的转发。
- 由ASBR发布缺省Type-5 LSA,或者缺省Type-7 LSA,用来指导自治系统(AS)内路由器进行自治系统外报文的转发。
⚠️注意事项:
- 当路由器无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type-3 缺省路由的优先级高于Type-5/Type-7 缺省路由。
- 如果OSPF路由器已经发布了缺省路由LSA,那么不在学习其他路由器发布的相同类型缺省路由。即路由计算时不再计算其他路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
- 外部缺省路由的发布如果要依赖于其他路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。以为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
不同区域的缺省路由发布原则:
-
普通区域
- 缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。
-
NSSA 区域
- 如果希望到达自治系统外部的路由通过该区域的 ASBR 到达,而其他外部路由通过其它区域出去。则必须子啊ABR上手动通过命令进行配置,使ABR产生一条缺省的Type-7 LSA,通告到整个NSSA区域。这样,除了某少部分路由通过NSSA的ASBR到达,其他路由都可以通过NSSA的ABR到达其他区域的ASBR出去。
- 如果希望所有的外部路由只通过本区域NSSA的ASBR到达。则必须在ASBR上手动通过命令进行配置,使ASBR产生一条缺省Type-7 LSA ,并通告到整个NSSA区域内。这样,所有的外部路由就只能通过本区域NSSA的ASBR到达。
- 上面两种情况使用相同的命令在不同的试图下进行配置,区别是在ABR上无论路由表中是否存在路由0.0.0.0,都会产生Type-7 缺省路由,而在ASBR上只有当路由表中存在路由0.0.0.0时,才会产生Type-7 LSA缺省路由。
- Type-7 LSA 缺省路由不会在ABR上转换成Type-5 LSA缺省路由泛洪到整个OSPF域。
-
Totally NSSA 区域
- 区域内的路由器必须通过ABR学习到其他区域的路由。
一 OSPF缺省路由通常应用于下面两种情况:
-
由区域边界路由器(ABR)发布(Type-3缺省 Summary LSA),用来指导区域内路由器进行区域之间报文的转发。
-
由自治系统边界路由器(ASBR)发布(五类外部缺省 ASE LSA,或者七类外部缺省NSSA LSA),用来指导OSPF路由域内路由器进行域外报文的转发。
当路由器无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type-3 缺省路由的优先级要高于Type-5/Type-7 路由。
(注:不同的OSPF进程认为属于不同的OSPF路由域)
(注:VRP v3 具体区分Type-5/Type-7路由、OSPF-ASE 、OSPF-NSSA,VRP v5 对Type-5/Type-7 LSA都声称OSPF-ASE路由)
二 OSPF缺省路由的几个基本原则
-
如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其他路由器发布的相同类型缺省路由(即路由计算时不再计算其它路由器发布的相同类型缺省路由LSA)。
原因主要有以下两点:
a 本路由器自身已经具有对外的出口,所以不需要学习其它路由器发布的缺省路由。
b 如果学习其它路由器发布的缺省路由,就会形成缺省路由的下一跳相互指向,造成路由环路。 -
OSPF路由器只有具有对外的出口时,才能够发布缺省路由LSA
a 因此对于区域边界路由器(ABR),一旦失去跟骨干区域的连接(骨干区域没有Full邻居),那么就要停止发布缺省路由。这主要用于解决当OSPF路由域存在多个出口的ABR时,可以通过别的ABR出口继续转发报文。
b 因此对于自治系统边界路由器(ASBR),一旦失去对外的连接(例如依赖的外部路由消失),那么就要停止发布缺省路由。这主要用于解决当OSPF路由域存在多个出口的ASBR时,可以通过别的ASBR出口继续转发报文。 -
外部缺省路由的发布如果依赖于其它的路由,那么被依赖的路由是能是本OSPF路由域内的路由(即不是本进程OSPF学习到的路由)。
因为,外部缺省路由要用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内。
三 OSPF各种缺省路由情况具体分析
- 外部缺省路由不能通过引入或者转换产生,是由命令指定产生的。
- 路由器一旦发布外部缺省路由,就是ASBR路由器。
- 只有区域边界路由器(ABR)才能发布Type-3缺省路由。
- STUB AREA的Type-3缺省路由
ABR路由器发布,传播范围为本STUB区域
根据基本原则1、2:
a 当存在骨干区域的FULL邻居时,需要发布缺省路由。同时不学习其它路由器发布的Type-3 缺省路由LSA(此时,根据RFC2328 路由计算使用骨干区域Summary LSA,所以不会学习到其它路由器发布到STUB区域的Type-3 缺省路由LSA)。
b 当不存在骨干区域的邻居或者骨干区域邻居Down时,需要取消发布学生路由。同时学习其它路由器发布的三类缺省路由LSA(此时,路由计算使用各个非骨干区域Summary LSA)。
对于PE路由器,不需要判断骨干区域是否有FULL邻居。始终发布缺省路由,同时不学习其它PE路由器发布的Type-3 缺省路由LSA(通过DN-bit实现)。
(注:PE路由器,VRP v3会生成骨干区域,VRP v5不生成骨干区域) - NSSA AREA的Type-3缺省路由
ABR路由器配置no-summary后发布,传播范围为本NSSA区域。
其它规格同Stub Area的Type-3缺省路由。 - DEFAULT-ROUTE-ADVERTISE SUMMARY的Type-3缺省路由
只有是PE路由器时才发布缺省路由。同时不学习其它路由器发布的缺省路由LSA(需要通过DN-bit实现)。
(注:此命令只存在于 VRP v5 OSPF) - DEFAULT-ROUTE-ADVERTISE ALWAYS的Type-5缺省路由
始终发布缺省路由,同时不学习其它路由器发布的缺省路由LSA。
不能根据外部连接的变化动态调节缺省路由的发布和删除,实际应用不太灵活。 - DEFAULT-ROUTE-ADVERTISE的Type-5缺省路由
只有路由表中存在活跃的缺省路由时(不是本OSPF进程学习到的路由),才会发布缺省路由LSA。
如果OSPF路由器已经发布了Type-5外部缺省路由LSA,那么不再学习其它路由器发布的Type-5外部缺省路由。 - DEFAULT-ROUTE-ADVERTISE ROUTE-POLICY的Type-5缺省路由
只有Route-Policy匹配时,才会发布缺省路由LSA。
如果OSPF路由器已经发布了Type-5外部缺省路由LSA,那么不再学习其它路由器发布的Type-5外部缺省路由。 - NSSA AREA DEFAULT-ROUTE-ADVERTISE的Type-7缺省路由
当是区域边界路由器(ABR)(且存在广安区域的Full邻居)时,发布Type-7外部缺省路由(P标志设0)。同时不学习T其它路由器发布的Type-7外部缺省路由LSA。这条缺省路由的作用是指导NSSA区域的报文通过骨干区域向外转发(由于NSSA区域不学习ASE LSA)。
当不是区域边界路由器 时,只有路由表中存在活跃的缺省路由时(不是本OSPF进程学习到的路由),才会发布缺省路由LSA(P标志设1)。同时不学习其它路由器发布的七类外部 缺省路由LSA。这条缺省路由的作用是指导NSSA区域的报文通过本ASBR路由器直接向外转发(这种情况在实际应用中并不多见)。