1.RIP在大型网络中部署面临的挑战
- 网络规模扩大:
- 企业新业务层出不穷,且业务呈现大集中趋势,使得网络规模不断扩大。
- 网络可靠性要求提高:
- 各种应用程序对网络可靠性要求越来越高,网络发生故障后,需要在更短的时间内恢复正常。
- 网络异构化,多厂商设备互联需求:
- 在日常的运营维护中,硬件设备不断升级或更新,不同设备之间性能差异较大,设备间互连链路带宽也存在一定的差异。
- 需要一种各厂商均支持的开放路由协议。
- 逐跳收敛:
- 如图所示,N1网络发生变化,RTA和RTB发出更新,RTB收到更新之后进行本地计算,完成计算后再向RTC发送路由变化通知,如此循环。逐跳收敛的方式,造成了网络收敛缓慢的问题。
- 传闻路由更新机制:
- RIP在计算路由完全依赖于从邻居路由器收到的路由信息,RTE仅依靠从RTD获取的信息计算路由,对RTA、RTB和RTC之间的网络情况并不了解。RIP在计算路由时,缺少对全局网络拓扑的了解。
- 以“跳数”为度量:
- 因为RIP基于跳数的度量方式,所以N1与N2网络互访时会选择RTA->RTB->RTD->RTE作为最优路径。显然RTB->RTC->RTD之间的以太链路要比RTB->RTD的串行链路带宽要高很多。
- 在“收到更新”、“计算路由”、“发送更新”的路由收敛过程中,RIP的局限性在于路由器需要在完成路由计算之后才可以向邻居发送路由变化通知。如果将这个过程调整为:“收到更新”、“发送更新”、“计算路由”,即路由器从邻居收到路由更新后立刻向其他邻居路由器转发,然后再本地计算新的路由这样的收敛方式可以大大降低全网路由收敛的时间。
- 因为RIP路由器仅从邻居路由器获取路由信息,所以对于非最优或者错误路由信息,RIP路由器并不能识别或屏蔽。解决此问题的关键最佳方式是路由器收集全网的信息,并基于这些信息独立计算路由。
- 基于跳数的度量方式并没有考虑数据包的链路转发延迟,如果采用以累积带宽为选路参考依据,可以更好的规避选择次优路径的风险。
2.OSPF基本工作原理
2.1 OSPF协议概述
OSPF(Open Shortest Path First)开放式最短路径优先是一个内部网关协议(IGP),是IETF定义的一个基于链路状态的内部网关路由协议。用于在单一自治系统(AS)内决策路由。是对链路状态路由协议的一种实现,隶属于内部网关协议(IGP),故运作于自治系统内部。OSPF使用著名的迪杰斯特拉(Dijkstra)算法来计算最短路径树。OSPF分为OSPFv2与OSPFv3两个版本,其中OSPFv2用于IPv4网络,OSPFv3用于IPv6网络。
所谓Link State(链路状态)指的就是路由器的接口状态。在OSPF路由器的某一接口的链路状态包含如下信息
- 该接口的IP地址及掩码
- 该接口的带宽
- 该接口所连接的邻居
OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。
- 所有路由器各自维护一个链路状态数据库。邻居路由器间先同步链路状态数据库,再各自基于SPF算法计算最优路由,从而提高收敛速度。
在度量方式上,OSPF将链路带宽作为选路时的参考依据。”累计带宽”是一种要比”累计跳数”更科学的计算方式
在OSPF出现前,网络上广泛使用RIP作为内部网关协议,由于RIP是基于距离矢量算法的路由协议,存在着收敛慢,路由环路,可拓展性差等问题,所以逐渐被OSPF取代。
因为OSPF具有以上形式,使得OSPF作为优秀的内部网关协议被快速接受并广泛使用。
2.2 OSPF工作过程
- 运行了OSPF的路由器会收到其它路由器的LSA报文,收到的LSA会放到Link-state Database(链路状态数据库)当中,再基于SPF算法,计算出一颗关于自己本身到所有目的网络最短路径的树,再计算去往目的网络最优的路由信息。
- 运行链路状态路由协议的路由器获得的网络信息比运行距离矢量协议的路由器更多。
运行OSPF的路由器都可以获得本区域内拓扑的全貌
OSPF的路由计算过程可以简化描述为:
- 路由器之间发现并建立邻居关系
- 每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB的同步
- 每台路由器基于LSDB通过SPF算法,计算得出一颗以自己为根的SPT,再以SPT为基础计算出去往各目的网络的最优路由,并形成路由表。
2.3 邻居建立过程
2.3.1 Router ID
- 企业网中的设备少则几台多则几十台甚至上百台,每台路由器都需要有一个唯一的ID用于标识自己。
- Router ID是一个32位的无符号整数,其格式和IP地址的格式是一样的,Router ID选举规则如下:
- 手动配置OSPF路由器的Router ID(通常建议手动配置)
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID
- OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新Router ID
(官方文档)Router-ID选举规则:
- ① 如果配置路由协议的Router-ID,则将其作为协议Router-ID
- ② 如果在全局下配置了Router-ID,则将其作为协议Router-ID
- ③ 如果配置了loopback接口IP,则将loopback中地址最大的作为协议Router-ID
- ④ 如果配置接口IP地址,则从接口IP中地址最大的作为协议Router-ID(不考虑接口的Up/down状态)
(实际测试)Route-ID选举规则: :::warning
- 如果配置创建OSPF路由协议时添加了Router-ID,则将其作为协议Router-ID
- 如果在全局下配置了Router-ID,则将其作为协议Router-ID
- 手工配置的第一个IP地址,则将其作为协议Route-ID :::
2.3.2 Hello报文-发现并建立邻居
Hello报文的作用:
- 邻居发现:自动发现邻居路由器
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系
- 邻居保持:通过Keeplive机制,检测邻居运行情况
OSPF路由器之间在交换链路状态信息之前,首先需要彼此建立邻居关系,通过Hello报文实现:
- OSPF通过Hello报文可以让互联的路由器间自动发现并建立邻居关系,为后续可达性信息的同步做准备
- 在形成邻居关系过程中,路由器通过Hello报文完成一些参数的协商
- 邻居关系建立后,周期性的Hello报文发送还可以实现邻居保持的功能,在一定时间内没有收到邻居的Hello报文,则会中断路由器间的OSPF邻居关系。
2.3.3 OSPF邻居建立过程
状态含义:
- Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
- Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
- 2-way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。
邻居建立过程如下:
- RTA和RTB的Router ID分别是1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。
- RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。
- RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
- RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。对于不支持组播的网络,OSPF路由器如何发现邻居呢?看下一章
2.3.4 发现并建立邻居 - 手动建立
- 对于不支持组播的网络可以通过手动配置实现邻居的发现与维护。
- 当网络规模越来越大或者设备频繁更新,相关联的OSPF路由器都需要更改静态配置,手动更改配置的工作量变大且容易出错。除了特殊场景,一般情况下不适用手动配置的方式。
2.4 链路状态信息
2.4.1 链路状态信息概述
- 区别于RIP路由器之间交互的路由信息,OSPF路由器同步的是最原始的链路状态信息,而且对于邻居路由器发来的链路状态信息,仅作转发。最终所有路由器都将拥有一份相同且完整的原始链路状态信息。
- 每台运行OSPF协议的路由器所描述的信息中都应该包含链路的类型、接口IP地址及掩码、链路上的邻居、链路的开销等信息。
路由器只需要知道目的网络号/掩码、下一跳、开销(接口IP地址及掩码、链路上的邻居、链路的开销)即可,为什么要有链路的类型呢?请看下一章。
2.4.2 丰富的数据链路层支持能力
- 网络技术的发展包含了设备、链路以及通信协议的发展。设备性能日趋提高,互联链路也从串行链路、ATM、帧中继发展到当前的以太网、xPON、SDH、MSTP、OTN等。技术升级不是一蹴而就,而是一个循序渐进的过程。各种不同的物理链路各具特点,也正因为如此,一个成熟的路由协议必须能够根据不同物理链路特性进行适配。
2.4.3 网络类型
所谓的网络类型指的是运行OSPF网段的二层链路类型
[R1-GigabitEthernet0/0/0]ospf network-type ? (修改接口网络类型)
broadcast Specify OSPF broadcast network
nbma Specify OSPF NBMA network
p2mp Specify OSPF point-to-multipoint network
p2p Specify OSPF point-to-point network
在链路的一侧修改了网络类型后,记得修改另一侧的接口,两边的网络类型须保持一致
网络类型 | Hello时间/死亡时间 | DR选举 |
---|---|---|
Broadcast(广播网络) | 10/40 | √ |
NBMA(非广播多路访问网络) | 30/120 | √ |
P2P(点到点网络) | 10/40 | × |
P2MP(点到多点网络) | 30/120 | × |
网络类型 | 含义 |
---|---|
广播类型(Broadcast) | 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。 在该类型的网络中: - 通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR( Backup Designated Router)的预留IP组播地址。 - 以单播形式发送DD报文和LSR报文。 |
NBMA类型 (Non-Broadcast Multi-Access) |
当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到多点P2MP类型 (Point-to-Multipoint) |
没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。 在该类型的网络中: - 以组播形式(224.0.0.5)发送Hello报文。 - 以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到点P2P类型 (Point-to-Point) |
当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到点类型
- 当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。
- 在该类型的网络中,以组播(224.0.0.5)发送协议报文(Hello报文,DD报文,LSR报文,LSU报文,LSAck报文)
- P2P网络连接了一对路由器,广播、组播数据包都可以转发。
- P2P网络的例子:两台通过PPP链路相连的路由器网络。
PPP连接在相同网段的有向图
PPP连接在不同网段的有向图
Stub网络中的有向图
广播类型
- 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型时Broadcast。
在该类型的网络中,通常以组播形式发送Hello报文、LSU报文和LSAck报文。
- 224.0.0.5的组播地址为OSPF路由器的预留IP组播地址。
- 224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
- 以单播形式发送DD报文和LSR报文。
广播型网路支持两台及两台以上的设备接入同一共享链路且可以支持广播、组播报文的转发。
- 同时因为一个广播型网络中存在多台设备,邻居关系建立以及链路信息同步方面,OSPF都有对应的特性来减少同一网络多台设备带来的不利影响。
NBMA类型
- NBMA类型(Non-broadcast multiple access)
- 当链路层协议是ATM或FR时,缺省情况下,OSPF认为网络类型是NBMA。(NBMA方式要求网络中的路由器组成全连接)
- 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
- 与广播型网络不同的是NBMA网络默认不支持广播和组播报文的转发。在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居都需要手动配置。
P2MP类型
- 将一个非广播网络看成是一组P2P网络,这样的非广播网络便成为了一个点到多点(P2MP)网络。在P2MP网络上,每个路由器的OSPF邻居可以使用反向地址解析协议来发现。P2MP可以看作是多个P2P的集合,P2MP可以支持广播、组播的转发。
没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其它的网络类型强制更改为P2MP。常见的做法是将非完全连接的帧中继或ATM改为P2MP的网络。
点到多点P2MP 类型(Point-to-Multipoint)
- 没有一种链路层协议会被缺省的认为是Point-to-Multipoint 类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络,例如只使用PVC的不完全连接的帧中继网络。
- 在该类型的网络中以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
2.4.4 OSPF的度量方式
- OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。当计算结果有小数位时,只取整数位,结果小于1时,cost取1。
- 若需要调整接口cost值有两种方式:
- 直接在接口下配置,需要注意的是,配置的cost是此接口最终的cost值,作用范围仅限于本接口。
- 修改OSPF的默认参考带宽值,作用范围是本路由器使能OSPF的接口。建议参考整个网路的带宽情况建立参考基线,所有路由器修改相同的参考带宽值,从而确保选路的一致性。
- OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其cost=G1 Scost + G3 Scost。
- 相比于RIP,OSPF的度量方式不仅考虑“跳数”,而且还考虑了“带宽”,比RIP更可靠的选择最优的转发路径。
2.5 报文类型及作用
报文类型 | 报文作用 |
---|---|
Hello报文 | 周期性发送,用来发现和维持OSPF邻居关系。 |
DD报文(Database Description packet) | 描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。 |
LSR报文(Link State Request packet) | 用于向对方请求所需的LSA。 设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU报文(Link State Update packet) | 用于向对方发送其所需要的LSA。 |
LSAck报文(Link State Acknowledgment packet) | 用来对收到的LSA进行确认。 |
2.5.1 OSPF报文概述
- OSPF报文直接运行与IP之上,IP协议字段号为89。
- OSPF有五种报文类型,但是OSPF报文头部格式都是相同的。
- 除Hello报文外,其它的OSPF报文都携带LSA信息。
OSPF报文的目的地址
网络类型 | Hello | Database Description | Link State Request | Link State Update | Link State Ack |
---|---|---|---|---|---|
点到点 | 224.0.0.5 | 224.0.0.5 | 224.0.0.5 | 224.0.0.5 | 224.0.0.5 |
NBMA | 单播 | 单播 | 单播 | 单播 | 单播 |
虚连接 | 单播 | 单播 | 单播 | 单播 | 单播 |
广播 | 224.0.0.5 | 单播 | 单播 | 224.0.0.5或224.0.0.6 | 224.0.0.5或224.0.0.6 |
点到多点 | 224.0.0.5 | 单播 | 单播 | 224.0.0.5或单播 | 224.0.0.5 |
2.5.2 OSPF报文头部
- Version:OSPF协议号,应当被设置成2。
- Type:OSPF报文类型,OSPF共有五种报文。
- Packet length:OSPF报文总长度,包括报文头部。单位是字节。
- Router ID:生成此报文的路由器的Router ID。
- Area ID:此报文需要被通告到的区域。
- Checksum:是指一个对整个数据包(包括包头)的标准IP校验和。
- AuType:为0时表示不认证;为1时表示简单的明文密码认证,2为加密认证(MD5)认证。
- Authentication:验证此报文时所需要的密码等信息。
验证合法OSPF报文头部:
验证一个OSPF报文头部是否合法包括:
- Version必须为2;
- Area ID应当满足以下两种情况之一:
- 和接收端口所属区域的Area ID一致;
- 和接收端口所属区域的Area ID不一致,但值为0表示该报文属于骨干区域,而且是在一个虚连接上发送的
- AuType字段必须与该区域配置的Autype一致;
- Authentication为验证信息,内容与AuType字段相关。
- 只有通过验证的OSPF报文才能被接受,否则将不能正常建立邻居关系。
- VRP支持两种验证方式:区域验证方式和接口验证方式。当两种验证方式都存在时,优先使用接口验证方式。
2.5.3 Hello报文(Type1)
- Network Mask:发送Hello报文的接口的网络掩码。
- HelloInterval:发送Hello报文的时间间隔。单位为秒。
- Options:标识发送此报文的OSPF路由器所支持的可选功能。
- E:允许Flood AS-External-LSAs;
- MC:转发IP组播报文;
- N/P:处理Type-7 LSAs;
- DC:处理按需链路。
- Rtr Pri:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
- RouterDeadInterval:宣告邻居路由器不继续在该网段上运行OSPF的时间间隔,单位为秒,通常为四倍HelloInterval。
- Designated Router:发送Hello报文的路由器选举出的DR的IP地址。如果设置为0.0.0.0表示未选举DR路由器
- Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器。
- Neighbor:邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文。
报文示例:
验证合法Hello报文:
- 验证一个Hello报文是否合法之前首先需要验证一个OSPF报文是否合法。
验证一个接收到的Hello报文是否合法包括:
- 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段
- 所接收的Hello报文中的HelloInterval字段必须和接收端口的配置保持一致;
- 所接收的Hello报文中的RouterDeadInterval字段必须和接收端口的配置保持一致;
- 所接收的Hello报文中的Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置保持一致。关于此比特的具体意义将在《OSPF特殊区域》中详细解释。
- 如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。
2.5.4 DD报文(Type2)
- 接口MTU:是指在数据包不分段的情况下,始发路由器接口可以发送的最大IP数据包大小,当在虚连接时,该字段为0x0000。华为设备默认不检测。
- Option:标识发送此报文的OSPF路由器所支持的可选功能。
- E:允许Flood AS-External-LSAs;
- MC:转发IP组播报文;
- N/P:处理Type-7 LSAs;
- DC:处理按需电路;
- I位:Init bit,当发送的是一系列DD报文中的第一个数据包时,该位置位。后续的DD报文将该位置为0。
- M位:More bit,当发送的数据包还不是一个系列DD报文中的最后一个数据包时,该位置为1。如果是最后一个报文,则将该位置为0。
- M/S:Master/Slave bit,在数据库同步中,主要用来确定协商过程中的序列号。
- DD Sequence Number:4Bytes,DD的报文序列号。
- LSA Headers:可变长度,该DD报文中所包含的LSA的头部信息。
报文示例:
2.5.5 LSR报文(Type3)
- Link State Advertisement Type:用来指明LSA标识的是一个路由器LSA、一个网络LSA还是其他类型的LSA。
- Link State ID:不同类型LSA该字段意义不同。
- Advertising Router:始发LSA通告的路由器的路由器ID。
报文示例:
2.5.6 LSU报文(Type4)
- Number of LSA:指出这个数据包中包含的LSA的数量。
- LSA:明细LSA信息,在LSA类型中有详细介绍
2.5.7 LSAck报文(Type5)
- Header of LSA:LSA头部信息,通过LSA的头部信息确认收到该LSA
报文示例:
2.6 LSDB同步过程
- 状态含义:
- ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态信息。
- Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
- Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
- Full:LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。
- LSDB同步过程如下:
- RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且两者已建立了邻居关系。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。
- 当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
- 当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
- 当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1,MS-bit=1,表示RTB宣告自己为Master。
- 虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。
- RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
- RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。
- RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。
2.7 OSPF邻居状态机
2.7.1 邻居状态变换——邻居关系
- Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。
- Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
- Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,标识尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
- 2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要(通过接口状态机判断是否需要建立邻接关系)和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
- 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系前的最高级状态
- 1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由对端邻居重启造成的。
2.7.2 邻居关系建立过程
邻居状态建立:
- Down(失效):这是邻居的初始状态,表示没有从邻居收到任何信息。
- Init(初始):在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
2-way(双向通信):在此状态下,两台路由器已确认可以双向通信,邻居关系已经建立。
- 这是建立邻接关系之前的最高级状态。
- 如果网络为广播网络或者NBMA网络则选举DR/BDR。
在形成邻居关系过程中,需要对Hello报文携带的参数进行协商:
- 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段。
- 所接收的Hello报文中的Hello Interval 和 Router Dead Interval字段必须和接收端口的配置保持一致。
- 所接收的Hello报文中认证字段需要和本机配置一致
- 所接收的Hello报文中的Option字段中的E-bit(表示是否接收外部路由信息)必须和接收端口的相关区域配置保持一致。
- 所接收的Hello报文中的区域字段必须和接收端口的配置一致。
2.7.3 邻居状态变换——邻接关系
DD序列号(DD Sequence Number):
- 每一个DD报文都有一个DD序列号,用于DD报文的确认机制。DD序列号是一个两字节的值
主从关系(Master/Slave):
- 当两个路由器之间通过DD报文交换数据库信息的时候,首先形成一个主从关系,Router ID大的优先为主,确认主从关系之后,主路由器发送DD报文,Slave路由器不能主动发送DD报文,只能回应Master路由器发送的DD报文,回应时使用的DD序列号必须和发送的Master路由器的DD序列号一致。
相关状态解释如下:
- ExStart(交换初始):这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。
- 主从关系是在此状态下形成的
- 初始DD序列号是在此状态下决定的
- 在此状态下发送的DD报文不包含链路状态描述
- Exchange(交换):此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
- Loading(加载):相互发送LSA Request报文请求LSA,发送LSA Update通告LSA,发送LSAck确认收到的LSA
- Full(全毗邻):两路由器的LSDB已经同步。
2.7.4 邻接关系建立过程
邻接状态建立:
邻居状态机变成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会产生一个Negotiation Done的事件,所以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)。
- 邻居状态变为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用来确保信息传输的可靠性。
2.8 DR与BDR的选举与作用
2.8.1 MA网络中的问题
- 在运行OSPF的MA网络包括广播型和NBMA网络,会存在两个问题:
- 在一个有n个路由器的网络,会形成(n*(n-1)/2)个邻接关系。
- 邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份,如RTA向其邻居RTB、RTC、RTD分别发送一份自己的LSA,RTB与RTC、RTC与RTD、RTB与RTD之间也会形成邻居关系,也会发送RTA的LSA。
2.8.2 DR与BDR作用
- DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
- DR与其它所有路由器形成邻接关系并交换链路状态信息,其它路由器(DRother)之间形成邻居关系不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。
- DR一旦出现故障,其与其它路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。
- 伪节点是一个虚拟设备节点,其功能需要某台路由器来承载。
2.8.3 DR与BDR选举
- 在广播网络或NBMA网络中会选举DR和BDR。
DR介绍:
- DR是针对同一网段中接口的一种标志,OSPF协议定义了指定路由器DR,即所有其它路由器都只将各自的链路状态信息发送给DR,再由DR以组播的方式发送至所有路由器,减少了OSPF数据包的发送。
DR侦听地址为224.0.0.6,也侦听224.0.0.5,所有发送到DR,BDR的LSA的目标地址都为224.0.0.6.
BDR介绍:在OSPF中,如果DR由于某种故障失效,此时网络中必须重新选举DR,并同步链路状态信息,这需要较长的时间。为了能够缩短这个过程,OSPF协议又定义了BDR(Backup Designated Router)的概念,作为DR路由器的备份,当DR路由器失效时,BDR成为DR,并在重新选举新的BDR路由器。
- 注1:与DR相同,BDR默认侦听地址为224.0.0.6,也侦听224.0.0.5,所有发送到DR、BDR的LSA的目标地址都为224.0.0.6。
注2:默认DR工作正常时,BDR只会接收DD报文,请求缺少的LSA,但是不会去泛洪DD报文和LSA
DR-other介绍:没有选举为DR或BDR的路由器称为DR-other。DR-other默认侦听的地址为224.0.0.5,当DR或BDR发送信息给DR-other时,采用224.0.0.5作为目标地址。
- DR/BDR由OSPF的Hello报文选举,选举是根据端口的路由器优先级进行的。
- 如果Router Priority被设置为0,那么该路由器将不允许被选举成DR或者BDR。
- Router Priority越大越优先,缺省优先级为1。如果相同,Router ID大者优先。
- DR/BDR不能抢占
- 如果当前DR发生故障,当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。
- 上图描述的是当OSPF网络已经选举完了DR和BDR的身份后,就算接入一个优先级更高的路由器也无法抢占身份。
修改路由器的接口OSPF优先级:
[Huawei]int GigabitEthernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ospf dr-priority 255
DR在选举完成后,默认为非抢占模式,即当网络中出现了比DR更优的设备时,默认DR也不会被抢占,防止端口抖动出现的频繁迁移,所以优先级高的不一定为DR,在有限时间内只有一台设备启动,超出选举时间后(40S)便认为自己是DR。
DR/BDR选举算法:
在OSPF中,一个网段内的路由器在没有选举出DR之前,都会启用一个Wait timer,时间大小和Dead timer时间一致,在Wait timer时间内,不会自动选举DR和BDR,而是检测邻居发送过来的Hello报文中的Designated Router表项和Backup Designated Router表项中的标识参考当前网络的DR和BDR。
如果在Wait timer时间超时后,依旧没能得到当前网络中的DR和BDR,此时会使用DR算法进行选举。
DR算法过程
- 路由器会启用DR算法生成三个组合:DR-other(),BDR(),DR(),选举顺序也是按照此顺序进行选举
- 由于当前没有设备认为自己为DR或BDR,所以将当前接收到的Router-ID标识全部放入DR-other()中
- 从DR-other中选举出最好的Router-ID放入BDR()中
- 从BDR()中选举出最好的Router-ID放入DR()中
- 缺少BDR,再从DR-other()选举出最好的Router-ID放入BDR()中
ISIS DIS与OSPF DR/BDR的不同点
- 在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举
- 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP 泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
- 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器。
特性:
- DR和BDR无法被抢占
- DR挂了,BDR会立即成为新的DR,而新的BDR通过在所有的DRother之间重新选举得出。
- DR和BDR是基于接口的概念,每个MA网段的DR和BDR都是通过相同的机制单独选出来的。
- 如果一个接口的OSPF优先级为0,说明该接口没有资格在此网段参与选举DR和BDR,只能成为DRother。在Ethernet环境中建议拥有DR和BDR实现备份,而在FR环境中,只能是Hub节点成为DR,任何spoke节点不能成为DR和BDR。原因是,只有Hub连接了所有邻居,spoke只连接到Hub,即使成为BDR,当Hub万一down的时候,成为DR也无法与其他spoke建立邻接关系。因此FR环境:Hub为DR,没有BDR。
- 如果一个MA网段没有DR和BDR,没有任何邻接关系存在,也不会有任何LSA的传递。
- 一台运行OSPF的路由器,只要在一个接口开启OSPF进程,则该接口会立即监听发往224.0.0.5的组播组流量,而仅当一个节点成为DR或BDR时,该接口才会同时监听发往224.0.0.5和224.0.0.6的组播组流量。
- 在一个MA网段内,所以路由器发往给DR和BDR的报文的目的地址都是224.0.0.6,而DR将LSA整合以后用224.0.0.5的地址发送给网段内所以其他路由器。
- 假设拓扑中有一处链路down掉,所有路由器会发送报文224.0.0.6地址通告所有的DR,请求链路状态更新LSU,DR整合大家发来的LSA后,用224.0.0.5地址发送给大家LSU(链路状态更新)
查看接口在OSPF网络中的信息
2.8.4 邻居与邻接关系
- 邻居(Neighbor)关系与邻接(Adjacency)关系是两个不同的概念。OSPF路由器之间建立邻居关系后,进行LSDB同步,最终形成邻接关系。
- 在P2P网络及P2MP网络上,具有邻居关系的路由器之间会进一步建立邻接关系。
- 在广播型网络及NBMA网络上,非DR/BDR路由器之间只能建立邻居关系,不能建立邻接关系,非DR/BDR路由器与DR/BDR路由器之间会建立邻接关系,DR与BDR之间也会建立邻接关系。
3.LSA类型
LSA的标识:
- OSPF使用LSA头部中的LS Type,Link Start ID,Advertising Route标识一条LSA
LSA的选择:当收到了两条相同的LSA,OSPF会根据以下信息判断一条LSA的新旧程度,选取最新的LSA。
- 序列号大的优先
- 校验和大的优先
比较老化时间
- 如果一条LSA具有最大的老化时间(3600S),那么就选择该LSA实例
- 如果LSA老化时间差大于15分钟,则老化时间小的优先
- 如果LSA老化时间之差在15分钟以内,则认为这两个LSA一样
区域内,如果出现链路故障时,路由器使用新的LSA重新通告邻居路由器,邻居路由器重新SPF计算最短路径树,此时新的LSA没有包含故障的链路,所以达到了重新收敛。
- 区域间路由,如果链路出现故障时,发送一份和原来序列号一样的三类LSA通告对端邻居,并将Age Times设为3600S,收到此LSA的路由器将删除对应的路由。
- 外部路由,ASBR检测到外部路由消失,发送一份和原来序列号一样的LSA通告全网,并将Age Times设为3600S,收到此LSA的路由器将删除对应的外部路由。
Router-LSA(Type1)
- 由路由器产生,描述了路由器的链路状态和开销,本区域内传播
Network-LSA(Type2)
- 由DR产生,描述本网段的链路状态,本区域内传播
Network-summary-LSA(Type-3)
- 由ABR产生,描述区域内某个网段的路由,区域间传播(除特殊区域)
ASBR-Summary-LSA(Type-4)
- 由ASBR产生,描述到ASBR的路由,非ASBR所在的区域内传播(除特殊区域)
AS-External-LSA(Type-5)
- 由ASBR产生,描述到AS外部的路由,OSPF域内传播(除特殊区域)
NSSA-LSA(Type-7)
- 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播
LS Type | LSA名称 | LSA描述 |
---|---|---|
1 | Router - LSA | 每一台路由器都会生成。这种LSA描述某区域内路由器端口链路状态和开销的集合。只在本区域内泛洪。 |
2 | Network - LSA | 由DR生成,用于描述广播型网络和NBMA网络。这种LSA包含了该网络上所连接路由器的列表。只在该网络所属的区域内泛洪。 |
3 | Network-summary-LSA | 由区域边界路由器(ABR)产生,描述到AS内部本区域外部某一网段的路由信息,在区域间传递。 |
4 | ASBR-summary-LSA | 由区域边界路由器(ABR)产生,描述到某一自治系统边界路由器(ASBR)的路由信息,在ABR所连接的区域内泛洪(ASBR所在的区域除外) |
5 | AS-external-LSA | 由自治系统边界路由器(ASBR)产生,描述到AS外部某一网段的路由信息,在整个AS内部泛洪。 |
7 | NSSA LSA | 由ASBR产生,描述到AS外部某一网段的路由信息,仅在NSSA区域内传递。 |
LSA在各区域中传播的支持情况
区域类型 | Router-LSA (Type1) |
Network LSA (Type2) |
Network summary LSA (Type3) |
ASBR summary LSA (Type4) |
AS-external LSA (Type5) |
NSSA LSA (Type7) |
---|---|---|---|---|---|---|
普通区域 “标准区域 骨干区域” |
是 | 是 | 是 | 是 | 是 | 否 |
Stub区域 | 是 | 是 | 是 | 否 | 否 | 否 |
Totally Stub区域 | 是 | 是 | 否 | 否 | 否 | 否 |
NSSA区域 | 是 | 是 | 是 | 否 | 否 | 是 |
Totally NSSA区域 | 是 | 是 | 否 | 否 | 否 | 是 |
路由类型:
- AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。
| 路由类型 | 含义 |
| —- | —- |
| Intra Area | 区域内路由。 |
| Inter Area | 区域间路由。 |
| 第一类外部路由(Type1 External) | 这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。
到第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销。 | | 第二类外部路由(Type2 External) | 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。
所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。 |
3.1 LSA头部
- LS age:此字段表示LSA已经生存的时间,单位是秒,递增数值,每经过一台路由器加2S,在数据库中按正常时间增加,最大老化时间为3600S。
- Option:标识发送此报文的OSPF路由器所支持的可选功能。
- DN:down位,用来在MPLS中预防环路
- O:表示支持opaque LSA
- DC:处理按需链路
- EA:支持外部路由属性
- N/P:处理Type-7 LSA
- N:表示为NSSA区域
- P:在NSSA区域中表示LSA是否能7转5类LSA,置位表示可以转换
- MC:转发IP组播报文
- E:允许Flood AS-External-LSAs
- MT:表示支持多拓扑OSPF
- LS type:此字段标识了LSA的格式和功能。常见的LSA类型有五种
Link State ID:根据LSA的不同而不同 | LSA | OSPPFv2 LS ID | | —- | —- | | Router LSA | Router ID | | Network LSA | DR所在IPv4网段IP | | Type 4 LSA | ASBR的Router ID | | Type3、Type5、Type7 LSA | IPv4网段 |
Advertising Router:始发LSA的路由器的ID
- Sequence Number:当LSA每次新的实例产生时,这个序列号就会增加。这个更新可以帮助其他路由器识别最新的LSA实例。
- Checksum:关于LSA的全部信息的校验和。因为Age字段,所以校验和会随着老化时间的增大而每次都需要重新进行计算。
- Length:是一个包含LSA头部在内的LSA的长度
3.2 OSPF域内路由
3.2.1 Router-LSA
- Link State ID:是指始发路由器的路由器ID。(这里的Link State ID是指LSA头部的该字段)
- Flags:
- V:设置为1时,说明始发路由器是一条或者多条具有完全邻接关系的虚链路的一个端点。
- E:当始发路由器是一个ASBR路由器时,该位置为1。
- B:当始发路由器是一个ABR路由器时,该位置为1。
- Number of Link:表明一个LSA所描述的路由器链路数量
- Link Type:
- 值为1表示为点到点网络,常见的PPP链路需要使用点到点网络描述。
- 值为2表示连接一个Transit网络,有至少两台路由器的广播型网段或NBMA网段就是一种Transit网段。
- 值为3表示连接Stubnet网络,一般该网络上不存在邻居关系,如只有一个出口的以太网或环回接口。
- 值为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时该值表示网络的子网掩码。
- Link Type为4时该值表示始发路由器的虚链路接口的IP地址。
- Tos:暂不支持
- Metric:是指一条链路或接口的代价
报文示例:
- 每台OSPF路由器使用一条Router-LSA描述本区域内的链路状态信息。LSA头部的三个字段含义如下:
- Type:LSA类型,Router-LSA是一类LSA
- LS id:链路状态ID
- Adv rtr:产生此Router-LSA的路由器Router ID
- 一条Router-LSA可以描述多条链接,每条链接描述信息由Link ID,Data ,Link Type和Metric组成,关键字含义如下:
- Type:链路类型(并非OSPF定义的四种网络类型),Router LSA描述的链路类型主要有:
- Point-to-Point:描述一个从本路由器到邻居路由器之间的点到点链路,属于拓扑信息。
- TransNet:描述一个从本路由器到一个Tranmsit网段(例如MA网段或者NBMA网段)的链接,属于拓扑信息
- StubNet:描述一个从本路由器到一个Stub网段(例如Loopback接口)的链接,属于路由信息。
- Type:链路类型(并非OSPF定义的四种网络类型),Router LSA描述的链路类型主要有:
- Link ID:此链接的对端标识,不同链接类型的Link ID表示的意义也不同。
- Data:用于描述此链路的附加信息,不同的链路类型所描述的信息也不同
- Metric:描述此链接的开销
- 在描述MA或NBMA网络类型的Router-LSA中,Link ID为DR的接口IP地址,Data为本地接口的IP地址。
- 如图所示,RTB、RTC、RTE之间通过以太网链路相连,以RTC产生的LSA为例,Link ID为DR的接口IP地址(10.1.235.2),Data为本地路由器连接此MA网络的接口IP地址(10.1.235.3),Link Type为TransNet,Metric表示到达DR的开销值。
TransNet描述的链接中仅包含与DR的连接关系及开销,没有网络号/掩码及共享链路上其他路由器的任何信息
Router-LSA的重要字段含义总结: | Links Type | 实际网络类型 | Link ID | Link Data | | —- | —- | —- | —- | | P2P | 串行链路 | 邻居路由器的Router ID | 和网络相连的始发路由器接口的IP地址 | | Transit网络 | 以太链路/FR(有邻居) | DR路由器的接口的IP地址 | 和网络相连的始发路由器接口的IP地址 | | Stubnet网络 | 环回口/串行/以太网络(无邻居)/sub IP | IP网络或子网地址 | 网络的子网掩码 | | Virtual | V-Link | 虚链接邻居路由器的Router ID | 始发路由器的虚链路接口的IP地址 |
- 不同LSA类型的Link State ID含义总结: | LSA名称 | Link State ID | | —- | —- | | Router-LSA | 生成这条LSA的路由器的Router ID | | Network-LSA | 所描述网段上DR的接口IP地址 | | Network-Summary-LSA | 所描述的目的网段的地址 | | ASBR-Summary-Lsa | 所描述的ASBR的Router ID | | AS-External-LSA | 所描述的目的网段的地址 |
OSPF链路类型分为以下几种:
- Stub Network Link
- 在一个网段中只有一台OSPF路由器的情况下,该网段被OSPF链路类型定义为Stub Network Link,因为一个网段中只有一台OSPF路由器,所以在这个网段就不可能有OSPF邻居,一个接口被宣告进OSPF,无论其二层是什么介质,只要在该接口上没有OSPF邻居,那么就是Stub Network Link,Loopback接口永远被定义为Stub Network Link,默认使用32位掩码表示,无论将Loopback接口改成哪种OSPF网络类型,始终改变不了它的OSPF链路类型属性,但可以改变它在LSA中的掩码长度。
- Point-to-Point Link
- OSPF网络类型为点到点的接口,OSPF链路类型为点到点,但Loopback接口除外,而网络类型为点到多点的接口,同样链路类型也为点到点链路。点到点链路可以是手工配置的地址,也可以是借用的地址,也可以是物理接口或逻辑子接口。
- Transit Link
- 拥有两台或两台以上OSPF路由器的链路,简单理解为有邻居的OSFP接口就是Transit Link,但网络类型为点到点和点到多点的接口除外,因为它们被定义为点到点链路。
- Virtual Link
- 就是OSPF虚链路,但稀奇的是,虚链路被定义为手工配置地址的点到点链路
3.2.2 Network-LSA
- Link State ID:是指DR路由器的接口地址。(这里的Link State ID是指LSA头部的该字段)
- Network Mask:指定这个网络上使用的地址或子网的掩码。
Attached router:列出该多路访问网络上与DR形成完全邻接关系且包括DR本身的所有路由器的路由器ID。
MA共享网段或NBMA共享网段中的网络号/掩码及路由器间的链接关系,通过Network-LSA来呈现。
- 基于上述字段表达的信息,LS id和Net mask做与运算,即可得出该网段的IP网络号,另外,从DR路由器到其所连接的路由器的开销为0。
3.2.3 OSPF区域内LSDB
如图所示,五台路由器互连并运行OSPF协议。以RTA的LSDB为例,其中包括了五个路由器产生的Router-LSA,以及两个广播型网络中产生的Network-LSA。
3.2.4 SPF算法
在一类LSA和二类LSA中,包括了拓扑信息和路由信息。
- OSPF将依据SPF算法和各类LSA进行最短路径树的计算:
- Phase 1:依据一类LSA中的Point-to-Point,TransNet以及二类LSA,构建SPF树。
- Phase 2:依据一类LSA中的Stub以及二类LSA,计算最优路由。
- OSPF路由器将分别以自身为根节点计算最短路径树。
- 以RTA为例,计算过程如下:
- RTA将自己添加到最短路径树的树根位置,然后检查自己生成的Router-LSA,对于该LSA中所描述的每一个连接,如果不是一个Stub连接,就把该连接添加到候选表中,分节点的候选列表为Link ID,对应的候选总开销为本LSA中描述的Metric值和父节点到达根节点开销之和。
- 根节点RTA的Router-LSA中存在TransNet中Link ID为10.1.12.2 Metric=1和P-2-P中Link ID为3.3.3.3 Metric=48的两个连接,被添加进候选列表中。
- RTA将候选列表中候选总开销最小的节点10.1.12.2移到最短路径树上,并从候选列表中删除。
- DR被加入到SPF中,接下来检查LS id为10.1.12.2的Network-LSA。如果LSA中所描述的分节点在最短路径树上已经存在,则忽略该分节点。
- 如图所示,在Attached Router部分:
- 节点1.1.1.1被忽略,因为1.1.1.1已经在最短路径树上。
- 将节点2.2.2.2,Metric=0,父节点到根节点的开销为1,所以候选总开销为1,加入候选列表。
- 候选节点列表中有两个候选节点,选择候选总开销最小的节点2.2.2.2加入最短路径树并从候选列表中删除
- 节点2.2.2.2新添加进最短路径树上,此时继续检查LS id为2.2.2.2的Router-LSA:
- 第一个TransNet连接中,Link ID为10.1.12.2,此节点已经在最短路径树上,忽略。
- 第二个TransNet连接中,Link ID为10.1.235.2,Metric=1,父节点到根节点的开销为1,候选总开销为2,加入候选列表。
- 第三个P-2-P连接中,Link ID为4.4.4.4,Metric=48,父节点到根节点的开销为1,候选总开销为49,加入候选列表。
- 候选节点列表中有三个候选节点,选择候选总开销最小的节点10.1.235.2加入最短路径树并从候选列表中删除
- DR被加入到SPF中,接下来检查LS id为10.1.235.2的Network-LSA。
- 如图所示,在Attached Router部分:
- 节点2.2.2.2被忽略,因为2.2.2.2已经在最短路径树上。
- 将节点3.3.3.3,Metric=0,父节点到根节点的开销为2,候选总开销为2,加入候选列表。(如果在候选列表中出现两个节点ID一样但是到根节点的开销不一样的节点,则删除到根节点的开销大的节点。所以删除节点3.3.3.3累计开销为48的候选项)。
- 将节点5.5.5.5,Metric=0,父节点到根节点的开销为2,候选总开销为2,加入候选列表。
- 候选节点列表中有三个候选节点,选择候选总开销最小的节点3.3.3.3和5.5.5.5加入最短路径树并从候选列表中删除。
- 节点3.3.3.3和5.5.5.5新添加进最短路径树上,此时继续检查LS id分别为3.3.3.3和5.5.5.5的Router-LSA。
- LS id为3.3.3.3的LSA:
- Link ID为10.1.235.2的节点已经在最短路径树上,忽略。
- Link ID为1.1.1.1的节点已经在最短路径树上,忽略。
- Ls id为5.5.5.5的LSA:
- Link ID为10.1.235.2的节点已经在最短路径树上,忽略。
- Link ID为4.4.4.4的P-2-P连接,Metric=48,父节点到根节点的开销为2,候选总开销为50。因为节点4.4.4.4已经在候选列表中出现,且候选总开销为49。49<50,所以子节点4.4.4.4的父节点选择2.2.2.2。
- 至此再通过命令display ospf lsdb router 4.4.4.4发现,LSA中的连接所描述的相邻节点都已经添加到了SPF树中
- 此时候选列表为空,完成SPF计算,其中10.1.12.2和10.1.235.2是虚节点(DR)。
- 第二阶段根据Router LSA中的Stub、Network LSA中的路由信息,完成最优路由的计算。
- 从根节点开始,依次添加LSA中的路由信息(添加顺序按照每个节点加入SPF树的顺序):
- 1.1.1.1(RTA)的Router LSA中,共1个Stub连接,网络号/掩码10.1.13.0/24,Metric=48;
- 10.1.12.2(DR)的Network LSA中,网络号/掩码10.1.12.0/24,Metric=1+0=1;
- 2.2.2.2(RTB)的Router LSA中,共1个Stub连接,网络号/掩码10.1.24.0/24,Metric=1+0+48=49;
- 10.1.235.2(DR)的Network LSA中,网络号/掩码10.1.235.0/24,Metric=1+0+1=2;
- 3.3.3.3(RTC)的Router LSA中,共1个Stub连接,网络号/掩码10.1.13.0/24,已在RTA上,忽略;
- 5.5.5.5(RTE)的Router LSA中,共1个Stub连接,网络号/掩码10.1.45.0/24,Metric=1+0+0+1+48=50;
- 4.4.4.4(RTD)的Router LSA中,共2个Stub连接,网络号/掩码10.1.24.0/24,已在RTB上,忽略;网络号/掩码10.1.45.0/24,已在RTE上,忽略。
3.3 OSPF域间路由
3.3.1 区域划分
- OSPF采用划分区域的方式,将一个大网络划分为多个相互连接的小网络。每个区域内的设备只需同步所在区域内的链路状态数据库,一定程度上降低内存及CPU的消耗。
- 划分区域后,根据路由器所连接区域的情况,可划分两种路由器角色:
- 区域内部路由器(Internal Router):该类设备的所有接口都属于同一个OSPF区域。
- 区域边界路由器(Area Border Router):该类设备接口分别连接两个及两个以上的不同区域。
- 区域内部路由器维护本区域内的链路状态信息并计算区域内的最优路径。
链路状态数据结构 区域层次结构:
- 这两个层次结构包含以下两个内容
- 传输区域(区域0是骨干区域)
- 常规区域(非区域0的是非骨干区域)
OSPF划分区域的目的和好处:
- 可以在区域边界做汇总,减少路由路由器路由条目
- 将拓扑更改带来的影响限制在本区域
- 需要分层的网络设计
- 有些LSA只会在本地泛洪,有些LSA会传递到其它区域
建议:
- 一个ABR最多关联3个区域
- 一个区域内最多50台路由器
- 对于一台运行OSPF的路由器,其邻接状态的邻居最多60台
3.3.2 区域间路由传递
- 区域边界路由器作为区域间通信的桥梁,同时维护所连接多个区域的链路状态数据库。
- ABR将一个区域内的链路状态信息转换成路由信息,然后发布到邻居区域。
- 链路状态信息转换成路由信息其实就是将一类和二类LSA转换成三类LSA的过程。注意,区域间的路由信息在ABR上是双向传递的。
3.3.3 Network-Summary-LSA
- Type-3和Type-4的LSA有相同的格式,它们都是由ABR产生。
Network-Summary-LSA(三类LSA)中主要包含以下内容:
- Ls id:目的网段地址
- Adv rtr:ABR的Router ID
- Net mask:目的网段的网络掩码
- Metric:ABR到达目的网段的开销值
通告缺省路由时,Link State ID和Network Mask都设置为0.0.0.0
报文示例:
3.3.4 区域间路由计算
- ABR产生的三类LSA将用于计算区域间路由:
- 根据三类LSA中的Adv rtr字段,判断出ABR。
- 根据Ls id、Net mask、Metric字段获得ABR到达目的网络号/掩码、开销。
- 如果多个ABR产生了指向相同目的网段的三类LSA,则根节点将根据本路由器到达目的网段的累计开销进行比较,最终生成最小开销路由。如果根节点到达目的网段的累计开销值相同,则产生等价负载的路由。
- 如图所示,Area 0中RTA计算区域间路由过程中:
- 192.168.1.0/24和192.168.2.0/24的三类LSA中,Adv rtr分别是RTB(2.2.2.2)和RTC(3.3.3.3)。
- RTB产生的三类LSA中,网络号/掩码是192.168.1.0/24,开销为1,RTC产生的三类LSA中,网络号/掩码是192.168.2.0/24,开销为1。
- RTA到达192.168.1.0/24下一跳是RTB,开销是2,RTA到达192.168.2.0/24下一跳是RTC,开销是2。
3.3.5 域间路由防环机制
- RTB将Area1中1的一类、二类LSA转换成三类LSA,发布到区域0中。
- RTC重新生成有关192.168.1.0/24网络的三类LSA并发布到Area 2中。
- 同理,RTE也将有关192.168.1.0/24网络的三类LSA发布到Area 3中。
- RTD又将192.168.1.0/24网络的三类LSA发布到Area 1中,从而形成了路由环路。
- 为防止区域间的环路,OSPF定义了骨干区域和非骨干区域和三类LSA的传递规则。
- OSPF划分了骨干区域和非骨干区域,所有非骨干区域均直接和骨干区域相连且骨干区域只有一个,非骨干区域之间的通信都要通过骨干区域中转,骨干区域ID固定为0。
- OSPF规定从骨干区域传来的三类LSA不再传回骨干区域。
- 对于前文提到的ABR,OSPF要求ABR设备至少有一个接口属于骨干区域。
- 新建网络按照区域间的防环规则进行部署,可以避免区域间环路问题。但是部分网络可能因前期规划问题,区域间的连接关系违背了骨干区域和非骨干区域的规则。
3.3.6 虚连接
- 骨干区域必须是连续的,但是并不要求物理上连续,可以使用虚连接使骨干区域逻辑上连续。
- 虚连接可以在任意两个区域边界路由器上建立,但是要求这两个区域边界路由器都有端口连接到一个相同的非骨干区域。
- 如图所示,在RTB和RTC之间建立了一条虚连接,以使Area 2穿越Area 1连接到骨干区域。
3.4 OSPF外部路由
3.4.1 外部路由引入
- 本例中,RTA上配置了一条静态路由,目的网络是10.1.60.0/24,下一跳是RTF。
- 在RTA的OSPF进程下,将配置的静态路由重发布到A公司的OSPF网络中,其中引入外部路由的OSPF路由器叫做ASBR(设备间互访需要路由双向可达,这里仅介绍OSPF网络内获取外部路由的过程)。
- RTA会生成一条AS-External-LSA(无类LSA),用于描述如何从ASBR到达外部目的地,RTB和RTC会生成一条ASBR-Summary-LSA(四类LSA),用于描述如何从ABR到达ASBR。
- 四类LSA和五类LSA,将被OSPF路由器用来计算外部路由。
3.4.2 AS-External-LSA
- 这是由RTA生成的五类LSA,将被泛洪到所有OSPF区域。
- 五类LSA中包含的主要信息如下:
- Ls id:目的网段地址。
- Adv rtr:ASBR的Router ID。
- Net mask:目的网段的网络掩码。
- Metric:ASBR到达目的网络的开销值,默认值为1。
- Tag:外部路由信息可以携带一个Tag标签,用于传递该路由时附加信息,通常用于路由策略,默认值为1
3.4.3 ASBR-Summary-LSA
- 这是由RTB在Area 1内生成的ASBR-Summary-LSA(四类LSA)。
- RTB向Area 1泛洪一条五类LSA时,同时生成一条四类LSA向Area 1泛洪。
- 该四类LSA主要包含下列信息:
- LS id:该ASBR的Router ID。
- Adv rtr:该产生此四类LSA的ABR的Router ID。
- Metric:从该ABR到达此ASBR的OSPF开销值。
- 四类LSA只能在一个区域内泛洪,五类LSA每泛洪到一个区域,相应区域的ABR都会生成一条新的四类LSA来描述如何到达ASBR。
- 因此描述到达同一个ASBR的四类LSA可以有多条,其Adv rtr是不同的,表示是由不同的ABR生成的。
3.4.4 外部路由计算
- 以Area 0中RTB的外部路由计算为例:RTB收到五类LSA后,根据Adv rtr字段1.1.1.1发现,ASBR与自己同属于一个区域(Area 0),再根据LS id、Net mask、Metric字段最终生成目的网络10.1.60.0/24 cost=1,下一跳为RTA的路由。
- 以Area 1中RTD的外部路由计算为例:RTD收到五类LSA后,根据Adv rtr字段1.1.1.1发现,ASBR与自己不同属于一个区域,再查找LS id为1.1.1.1的四类LSA,发现此四类LSA的Adv rtr为2.2.2.2。再根据五类LSA中的LS id、Net mask、Metric字段最终生成目的网络10.1.60.0/24 cost=1,下一跳为RTB的路由。
- RTB、RTD最终计算出的路由条目cost都为1,根据物理拓扑可知,RTD开销值明显大于RTB,问题出在哪里?
3.4.5 外部路由的类型
- OSPF引入外部路由,共有两种类型可选:
- 第一类外部路由的AS外部开销值被认为和AS内部开销值是同一数量级的,因此第一类外部路由的开销值为AS内部开销值(路由器到ASBR的开销)与AS外部开销值之和,这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。
- 第二类外部路由的AS外部开销值被认为远大于AS内部开销值,因此第二类外部路由的开销值只包含AS外部开销,忽略AS内部开销(默认为第二类),这类路由的可信度比较低。
- 默认情况下,OSPF外部路由采用的是第二类外部路由。
3.4.6 次优外部路由的产生
- 如图所示,RTA、RTB、RTC同处于一个MA网络,RTA和RTB之间运行OSPF,RTB和RTC之间运行RIP。
- RTB将通过RIP学来的路由重发布到OSPF,RTA通过OSPF学习到RIP中192.168.3.0/24的外部路由,但是下一跳是RTB。所以RTA访问192.168.3.0/24的流量先发送给RTB,RTB收到后又转发给RTC。在RTA上这条路由是次优的,最优的下一跳应当为RTC。
- OSPF通过设置Forwarding Address来解决这个问题。
- 通常情况下,ASBR引入外部路由产生的五类LSA中Forwarding Address字段设置为0.0.0.0
- 对于图中的场景,RTB路由器中到达192.168.3.0/24的下一跳地址为10.1.123.3。10.1.123.3所属网段10.1.123.0/24运行OSPF,所以RTB生成的五类LSA中,Forwarding Address被设置为10.1.123.3。
- 当RTA收到五类LSA时,发现Forwarding Address字段非0,其值为10.1.123.3,所以RTA按照Forwarding Address计算下一跳。
4.OSPF特殊区域
4.1 Stub和Totally Stub区域
4.1.1 传输区域和末端区域
- 如图所示:全网可分为四部分Area 0、Area 1、Area 2、外部网络
- 四部分之间相互访问的主要流量如图中红线所示。
- 对于OSPF各区域,可分为两种类型:
- 传输区域:除了承载本区域发起的流量和访问本区域的流量外,还承载了源IP和目的IP都不属于本区域的流量,即“穿越型流量”,如Area 0。
- 末端区域:只承载本区域发起的流量和访问本区域的流量,如Area 1。
- 对于末端区域,需要考虑以下几个问题:
- 保存到达其他区域明细路由的必要性:访问其他区域通过单一出口,“汇总”路由相对明细路由更加简洁
- 设备性能:网络建设与维护必须要考虑成本因素。末端区域中可选择部署性能相对较低的路由器。
- OSPF路由器计算区域内、区域间、外部路由都需要依靠收集网络中的大量LSA,大量LSA会占用LSDB存储空间,所以解决问题的关键是在不影响正常路由的情况下,减少LSA的数量。
4.1.2 Stub区域
- Stub区域的ABR不向Stub区域内传播它接收到的自治系统外部路由(对应四类、五类LSA),Stub区域中路由器的LSDB、路由表规模都会大大减小。
- 为保证Stub区域能够到达自治系统外部,Stub区域的ABR将生成一条缺省路由(对应三类LSA),并发布给Stub区域中的其他路由器。
- Stub区域是一种可选的配置属性,但并不建议将每个区域都配置为Stub区域。通常来说,Stub区域位于自治系统的末梢,是那些只有一个ABR的非骨干区域。
- 配置Stub区域时需要注意下列几点:
- 骨干区域不能被配置为Stub区域。
- 如果要将一个区域配置成Stub区域,则该区域中的所有路由器必须都要配置成Stub路由器。
- Stub区域内不能存在ASBR,自治系统外部路由不能在本区域内传播。
- 虚连接不能穿越Stub区域建立。
4.1.3 Stub区域的OSPF路由表
- 配置Stub区域后,所有自治系统外部路由均由一条三类的默认路由代替。
- 除路由条目的减少外,当外部路由发生变化后,Stub区域内的路由器是不会直接受到影响的。
4.1.4 Totally Stub区域
- Totally Stub区域既不允许自治系统外部路由(四类、五类LSA)在本区域内传播,也不允许区域间路由(三类LSA)在本区域内传播。
- Totally Stub区域内的路由器对其他区域及自治系统外部的访问需求是通过本区域ABR所产生的三类LSA缺省路由实现的。
- 与Stub区域配置的区别在于,在ABR上需要追加no-summary参数。
4.1.5 Totally Stub区域的OSPF路由表
- Totally Stub区域访问其他区域及自治系统外部是通过默认路由实现的。
- 自治系统外部、其他OSPF区域的网络发生变化,Totally Stub区域内的路由器是不直接受影响。
- Stub、Totally Stub解决了末端区域维护过大LSDB带来的问题,但对于某些特定场景,Stub、Totally Stub并不是最佳解决方案。
4.2 NSSA和Totally NSSA区域
4.2.1 NSSA和Totally NSSA存在的问题
- RTD和RTA同时连接到某一外部网络,RTA引入外部路由到OSPF域,RTD所在的Area 1为减小LSDB规模被设置为Stub或Totally Stub区域。RTD访问外部网络的路径是“RTD->RTB->RTA->外部网络”,显然相对于RTD直接访问外部网络而言,这是一条次优路径。
- OSPF规定Stub区域是不能引入外部路由的,这样可以避免大量外部路由对Stub区域设备资源的消耗。
- 对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,Stub和Totally Stub区域就不能满足需求
4.2.2 NSSA区域与Totally NSSA区域
- OSPF NSSA区域(Not-So-Stubby Area)是在原始OSPF协议标准中新增的一类特殊区域类型。
- NSSA区域和Stub区域有许多相似的地方。两者的差别在于,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中,同时又不会学习来自OSPF网络其它区域的外部路由。
- NSSA LSA(七类LSA):
- 七类LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述NSSA区域引入的外部路由信息。
- 七类LSA由NSSA区域的ASBR产生,其扩散范围仅限于ASBR所在的NSSA区域。
- 缺省路由也可以通过七类LSA来产生,用于指导流量流向其他自治域。
- 七类LSA转换为五类LSA:
- NSSA区域的ABR收到七类LSA时,会有选择地将其转换为五类LSA,以便将外部路由信息通告到OSPF网络的其它区域。
- NSSA区域有多个ABR时,进行7类LSA与5类LSA转换的是Router ID最大的ABR。
- Totally NSSA和NSSA区别:
- Totally NSSA不允许三类LSA在本区域内泛洪。
- Totally NSSA与NSSA区域的配置区别在于ABR上需要追加no-summary参数。
4.2.3 NSSA区域与Totally NSSA区域的LSDB
- 配置了NSSA区域的ABR产生一条七类LSA缺省路由。
- 配置了Totally NSSA区域的ABR会自动产生一条三类LSA缺省路由。
4.2.4 LSA总结
LSA作用:
Router LSA(一类):每个路由器都会产生,描述了路由器的链路状态和开销,在所属的区域内传播。
Network LSA(二类):由DR产生,描述本网段的链路状态,在所属的区域内传播。
Network-summary-LSA(三类):由ABR产生,描述区域内某个网段的路由,并通告给其他相关区域。
ASBR-summary-LSA(四类):由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
AS-external-LSA(五类):由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
NSSA LSA(七类):由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
- 特殊区域不仅有效减少了区域内LSA的数量以及路由计算的压力,而且一定程度上也缩小了网络故障的影响范围。但特殊区域的局限性在于其作用范围只在本区域内,对于其它区域,如何才能减少LSA、降低路由计算的压力呢?
5.其他特性
5.1 路由汇总
5.1.1 区域间路由汇总
- 在大规模部署OSPF网络时,可能会出现由于OSPF路由表规模过大而降低路由查找速度的现象,为了解决这个问题,可以配置路由汇总,减小路由表的规模。
- 路由汇总是指将多条连续的IP前缀汇总成一条路由前缀。如果被汇总的IP地址范围内的某条链路频繁UP和Down,该变化并不会通告给被汇总的IP地址范围外的设备。因此,可以避免网络中的路由震荡,在一定程度上提高了网络的稳定性。
- 路由汇总只能汇总路由信息,所以ABR是可以执行路由汇总的位置之一:
- ABR向其他区域发送路由信息时,以网段为单位生成三类LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段汇总成一个网段。这样ABR只发送一条汇总后的三类LSA,所有属于命令指定的汇总网段范围的LSA将不会再被单独发送出去。
- 如图所示,Area 1中存在8个连续网段,汇总前RTB将产生8条三类LSA。在RTB上配置汇总后,RTB仅产生1条三类LSA并泛洪到Area 0。
- 引入外部路由的ASBR也是执行路由汇总的位置之一。
5.1.2 外部路由汇总
- ASBR汇总:
- 配置ASBR汇总后,ASBR将对引入的外部路由进行汇总。NSSA区域的ASBR也可以对引入NSSA区域的外部路由进行汇总。
- 如果设备既是NSSA区域的ASBR又是ABR,则可在将七类LSA转换成五类LSA时对相应前缀进行汇总。
- 如图所示,Area 0中RTA将8个连续的外部路由引入到OSPF域内,产生8条五类LSA并在OSPF进程域内泛洪。
- 在ASBR(RTA)配置外部路由汇总后,RTA将仅产生1条五类LSA并泛洪至OSPF路由进程域内。
- 路由汇总降低了网络故障的影响范围。
- 网络发生故障后,路由协议的收敛速度也是衡量路由协议的重要参考依据之一。
5.2 OSPF更新机制
- 为了保证路由计算的准确性,需要保证LSA的可靠性。
- OSPF为每个LSA条目维持一个老化计时器(3600s),当计时器超时,此LSA将从LSDB中删除。
- 为了防止LSA条目达到最大生存时间而被删除,OSPF通过定期更新(每1800S刷新一次)机制来刷新LSA。
- OSPF路由器每1800S会重新生成LSA,并通告给其他路由器。
- 为了加快收敛速度,OSPF设置了触发更新机制。
- 当链路状态发生变化后,路由器立即发送更新消息,其他路由器收到更新消息后立即进行路由计算,快速完成收敛。
5.3 OSPF认证机制
- 如图所示,内部网络通过OSPF协议传递路由。正常情况下,财务部访问公司数据库的流量走向是“财务部->RTA->RTB->Database”。
- 非法设备接入公司内网,通过向网络中注入非法路由,引导流量进行非正常的转发。即“财务部->RTA->非法设备->RTB->Database”。非法设备收到财务部的流量之后,进行恶意分析,获取财务部关键信息,造成公司机密泄露。
- OSPF支持认证功能,只有通过认证的OSPF路由器才能正常建立邻居关系,交互信息。
- 两种认证方式:
- 区域认证方式
- 接口认证方法
- 支持的认证模式分为null(不认证)、simple(明文)、MD5以及HMAC-MD5。
- 当两种认证方式都存在时,优先使用接口认证方式。
5.4 OSPF收敛特性
5.4.1 快速收敛
增量最短路径优先算法I-SPF
I-SPF改进了这个算法,除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。
部分路由计算PRCPRC的原理与I-SPF相同,都是只对发生变化的路由进行重新计算。不同的是,PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新路由。在路由计算中,叶子代表路由,节点则代表路由器。SPT变化和叶子变化都会引起路由信息的变化,但两者不存在依赖关系,PRC根据SPT或叶子的不同情况进行相应的处理:
- SPT变化,PRC处理变化节点上的所有叶子的路由信息。
- SPT没有变化,PRC不会处理节点的路由信息。
- 叶子变化,PRC处理变化的叶子的路由信息。
- 叶子没有变化,PRC不会处理叶子的路由信息。
智能定时器智能定时器,OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。OSPF智能定时器可以通过以下两种方式来加速网络收敛:
- 在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。
- 在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。
- 智能定时器对路径计算的作用
- 根据本地维护的链路状态数据库LSDB,运行OSPF协议的路由器通过SPF算法计算出以自己为根的最短路径树,并根据这一最短路径树决定到目的网络的下一跳。通过调节SPF的计算间隔,可以抑制网络频繁变化可能导致的占用过多带宽资源和路由器资源。
- 在特定组网环境下(例如对路由收敛时间要求较高的环境),可以指定以毫秒为单位的时间间隔,用来增加路由计算的频度,从而加快路由的收敛。
- 当OSPF的链路状态数据库(LSDB)发生改变时,需要重新计算最短路径。如果网络频繁变化,由于不断的计算最短路径,会占用大量系统资源,影响路由器的效率。通过配置智能定时器,设置合理的SPF计算的间隔时间,可以避免占用过多的路由器内存和带宽资源。
- 使能智能定时器后
- 初次计算SPF的间隔时间由start-interval参数指定。
- 第n(n≥2)次计算SPF的间隔时间为hold-interval×2(n-1)。
- 当hold-interval×2(n-1)达到指定的最长间隔时间max-interval时,OSPF连续三次计算SPF的时间间隔都是最长间隔时间,之后,再次返回步骤1,按照初始间隔时间start-interval计算SPF。
5.4.2 按优先级收敛
- 可以通过IP前缀列表等将特定路由过滤出来,通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。
5.5 Database Overflow
- 通过设置路由器上非缺省外部路由数量的上限,来避免数据库超限。
- OSPF网络中所有路由器都必须配置相同的上限值。这样,只要路由器上外部路由的数量达到该上限,路由器就进入Overflow状态,并同时启动超限状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出超限状态。
OSPF Database Overflow过程
- 进入Overflow状态时,路由器删除所有自己产生的非缺省外部路由。
- 处于Overflow状态中时:
- 路由器不产生非缺省外部路由
- 丢弃新收到的非缺省外部路由且不回复确认报文
- 当超限状态定时器超时,检查外部路由数量是否仍然超过上限,如果超限则重启定时器,如果没有则退出超限状态
- 退出Overflow状态时:
- 路由器删除超限状态定时器
- 产生非缺省外部路由
- 接收新收到的非缺省外部路由并回复确认报文
- 准备下一次进入超限状态
限制接收的5类LSA数量:[Huawei-ospf-1]lsdb-overflow-limit 2
- 这条命令是针对外部路由进行限制,也就是对5类LSA进行限制,限制LSA是先将自己产生的5类LSA干掉,如果外部还有大量的LSA,只接受外部的2条LSA,如果已经收到了外部的LSA,再做限制,不会删除原来的LSA,但是新来的LSA不会再接收了。
5.6 MTU检测
华为设备默认关闭MTU检测,以下实验为MTU检测开启并未通过
只有一端开启MTU检测
- 如果两端MTU不一致,只有单边开启MTU检测是不会影响邻居建立的,两端都会到Full状态
- AR1开启MTU检测,AR2没有开启MTU检测
- AR1发送DD报文,MTU值为1400,AR2由于没有开启MTU检测,所以不会查看该值,直接通过
- AR2发送DD报文,由于设备不检测MTU值,所以DD报文中的MTU值为0,AR1收到此DD报文,检测MTU值,发现值为0,小于自身接口的MTU值,通过检测,进入下一状态。
两端开启MTU检测
- Master端的MTU小于Slave端的MTU
- AR2(Master)发送DD报文,MTU值为1500,AR1(Slave)收到此报文,检测MTU,MTU值大于当前接口的MTU,检测不通过,停留在ExStart状态。
- AR1(Slave)发送DD报文,MTU值为1400,AR2收到(Master)收到此报文,检测MTU,MTU值小于当前接口的MTU,检测通过,但是收不到slave发送过来的确认报文,所以卡在ExStart状态。
- Master端的MTU大于Slave端的MTU:
- AR2(Master)发送DD报文,MTU值为1400,AR1(Slave)收到此报文,检测MTU,MTU值小于当前接口的MTU,检测通过,进入ExChange状态。
- AR1(Slave)发送DD报文,MTU值为1500,AR2收到(Master)收到此报文,检测MTU,MTU值大于当前接口的MTU,检测不通过,卡在ExStart状态。
6.其他内容
6.1OSPF的三张表
- 邻居表(Neighbor Table)
- 也称为邻接数据库(邻接状态数据库)
- 包含以获取的邻接路由器信息
- 链路状态数据库(Link-state Database)
- 通常被成为LSDB(链路状态数据库)
- 包含区域或网络中的所有路由器及其连接信息
- 一个区域中的所有路由器的LSDB是相同的
- 路由表
- 通常被称为转发数据库
- 包含到目的地的最佳路径列表
6.2 拓扑和路由器类型
OSPF整体拓扑
- OSPF把自治系统划分成逻辑意义上的一个或多个区域,所有其它区域必须与区域0相连。区域0称为骨干区域
路由器类型
- 区域内路由器(Internal Router):该类设备的所有接口都属于同一个OSPF区域。
- 区域边界路由器ABR(Area Boder Router):该类路由器可以同时属于两个以上的区域,但其中一个接口必须在骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接
- 真正的ABR需要满足以下两个条件:
- 能够产生3类LSA通告给隔壁区域
- 接口发布到Area0并且和邻居形成Full的邻接关系,只有Loopback口属于Area0的路由器称为伪ABR
- 真正的ABR需要满足以下两个条件:
- 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部路由器都是骨干路由器。
- 自治系统边界路由器ASBR(AS Boundary Router):与其它AS交换路由信息的路由器称为ASBR。ASBR并没有特定的位置需求,它可能位于普通的区域,也可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就是ASBR。
IS-IS与OSPF拓扑所体现的不同点
- 在OSPF中,一条链路只属于一个区域;而在IS-IS中,一条链路可以跨接不同的区域;
- 在IS-IS中,骨干网(Backbone)指的不是一个特定的区域;而在OSPF中,Area0被定义为骨干区域。
- 在IS-IS中,Level-1和Level-2级别的路由器分别采用SPF算法,分别生成最短路径树SPT,在OSPF中,只有在同一区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。
6.3 OSPF与ISIS比较
6.3.1 基本特点
- OSPF支持的网络类型有P2P网络、P2MP网络、NBMA网络和广播网络,ISIS仅支持P2P网络和广播网络。
- OSPF工作在IP之上,协议号为89。
6.3.2 邻接关系特点
相关解释如下:
- OSPF建立邻居需要检查Hello报文中的掩码、认证、Hello/Dead时间间隔、区域等信息。而ISIS形成邻居关系条件比较宽松。
- OSPF P2P链路建立邻居关系需要三次握手。ISIS则不需要三次握手,但是华为设备缺省情况下使能ISIS P2P网络三次握手功能,以保证邻居建立的可靠性。
- ISIS邻居关系分为层1和层2。
- OSPF依据优先级和Router-ID选举DR/BDR,且选举结束后,不可抢占。在OSPF中,所有DRother与DR/BDR形成完全邻接关系,DRother间形成2-way即不完全邻接关系。OSPF中,如果优先级为0,则表示该路由器不参与DR/BDR选举。
- ISIS选举DIS依据优先级和MAC地址,可以抢占。在ISIS中,所有路由器均形成邻接关系,ISIS中,如果优先级为0,则表示该路由器也会参与DIS选举,只是优先级比较低。
6.3.3 数据库同步特点
- ISIS LSP种类较少,但是拓展性很强,主要通过LSP携带的TLV字段进行功能拓展。
6.3.4 其他特点
- OSPF开销是基于带宽的,ISIS理论上开销类型分为四种,包括缺省开销、时延开销、代价开销、差错开销、但是实现上都采用缺省开销。