OSPF
OSPF特性
- OSPFv2开放路径最短优先路由协议(RFC2328,用于IPV4网络中)
- OSPF仅传播对端设备不具备的路由信息,路由器之间传递的是LSA
- 网络收敛迅速,并有效避免了网络资源浪费
- 直接工作于IP层之上,IP协议号为89
- 无环路
- 区域内防环(SPF算法计算得出的最短路径树(SPF树)本身无环)
- 区域间防环(LSA3类防环规则,所有的非0区域必须直接和区域0相连)
- OSPF使用组播地址发送协议报文
- 224.0.0.5:发送Hello包;点到点网络类型下发送LSU。多点可达网络类型,DR给DROther发送LSU
- 224.0.0.6:多点可达网络类型,DRother给DR/BDR发送LSU
- 支持区域划分
- 方便管理
- 减少LSDB的泛洪范围,减少设备的新能消耗,提高SPF算法的效率
- 稳定性比较好,一个区域内拓扑信息的变化不会影响到其他的区域
- 能支持汇总以及过滤(只能在ABR\ASBR上进行)
工作过程
- 发现并且建立OSPF的邻居关系
- 泛洪LSA(包含路由信息以及拓扑信息)
- 形成LSDB,构建整网(区域)拓扑,整个区域LSDB同步
- 进行SPF算法,得出最短路径树
- 将路由信息放入最短路径树,计算出路由
分层路由
允许将一个AS分为若干区域;最小化路由更新流量。所有区域有且只有一个。
- 骨干区域:area ID为0,连接所有非骨干区域,负责非骨干区域之间的通讯
- 非骨干(标准)区域:area ID为非0,只负责本区域的SPF树构建,需要访问其他区域必须通过骨干区域(防环)
- 特殊区域:属于标准区域的一种,但是在标准区域基础增加了自动过滤LSA的特性
区域划分的优点
- 方便管理
- 减少LSDB的泛洪范围,减少设备的新能消耗,提高SPF算法的效率
- 稳定性比较好,一个区域内拓扑信息的变化不会影响到其他的区域
- 能支持汇总以及过滤(只能在ABR\ASBR上进行)
OSPF相关概念
路由器角色
IR(区域内路由器 Internal Router)
该类设备的所有接口都属于同一个OSPF区域
ABR(区域边界路由器 Area Border Router)
该类路由器可以同时属于两个以上的区域,但其中一个接口必须在骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接
- 完全意义的ABR:至少有一个接口在骨干区域以及非骨干区域,并且和骨干区域要存在一个full的邻接关系
- 非完全意义的ABR:至少有一个接口在骨干区域以及非骨干区域,但是和骨干区域不存在任何的邻居关系
- 相同点:都能产生LSA3类
- 不同点:对LSA3类的防环规则不同
BR(骨干路由器 Backbone Router)
该类路由器至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部路由器都是骨干路由器
ASBR(自治系统边界路由器 AS Boundary Router)
与其他AS交换路由信息的路由器称为ASBR。ASBR并没有特定的位置要求,它可能位于普通的区域,也可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR
网络类型
Broadcast类型(广播)
- 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast
- 通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF路由器的预留IP组播地址;224.0.0.6的组播地址为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文
- DR选举作用
- 主要减少LSA的泛洪以及MA网络中充当虚节点
- MA网络必须存在DR,否则无法构建MA网络的拓扑
- 选举方式
- 优先级大优先(优先级范围0-255)
- router id 大优先
- 优先级为0,主动放弃DR选举,一个网段里优先都为0,那选不出DR,不能达到full
- OSPF的选举先选举BDR,再选举DR;在选举期(10s)到期前,当前最优的路由器暂定为BDR,在选举期到后,最优的路由器会被确认为DR
- DR和BDR一旦选定,即使OSPF区域内新增优先级更高的路由器,DR和BDR也不重新选举,只有当DR和 BDR都失效后,才重新选举
- 一个MA网不能存在多个DR,否则路由计算会有问题
- DRother和DRother之间的邻居关系只能是2-way
- 只有在广播或NBMA网络中才会选举DR;在P2P或P2MP网络中不需要选举DR
P2P(点到点)类型
- 当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P
- 以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)
NBMA类型(非广播多点可达 Non-broadcast multiple access)
当链路层协议是ATM或FR时,缺省情况下,OSPF认为网络类型是NBMA
以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)
需手工配置邻居
如果在中心到节点的网络结构下使用NBMA需要的注意问题
- DR必须在中心节点上,否则会导致LSA学习不全
- 需要在节点上手工写fr map(IP地址和DLCI的映射)
P2MP(点到多点 Point-to-Multipoint) 类型
没有一种链路层协议会被缺省的认为是P2MP 类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络
以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)
会为接口生成32为的主机路由
在FR/ATM网络下使用P2MP需要的注意问题:链路必须启用为广播功能
网络类型 | 缺省链路层协议 | Hell0时间/Dead时间 | 选举DR/BDR |
---|---|---|---|
Broadcast(广播多点可达) | 以太网、FDDI | 10S/40S | 选 |
P2P(点到点) | Serial(PPP/HDLC) | 10S/40S | 不选 |
NBMA(非广播多点可达) | Serial(FR) | 30S/120S | 选 |
P2MP(点到多点) | 必须人工指定 | 30S/120S | 不选 |
建议:将物理拓扑是点到点的以太网接口网络类型修改为P2P
区域类型
普通区域(E=1 N=0):
区域0(骨干区域),所有的非0区域(所有区域有且只能有一个)必须与区域0相连(为了防止路由环路),无法与区域0相连的区域要建立虚连接
只有非0区域可以被配置为特殊区域。虚连接不能穿越特殊区域
特殊区域
作用:减少某些区域内路由器的LSDB和路由表的大小。
Stub区域(E=0 N=0):
- Stub区域的ABR会将区域间的路由信息传递到本区域,但不会引入自治系统外部路由,为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。
- Totally Stub区域的ABR不会将区域间的路由信息和自治系统外部路由信息传递到本区域。为保证到本自治系统的其他区域和自治系统外的路由依旧可达,该区域的ABR将生成一条缺 省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。
NSSA区域(E=0 N=1):
- NSSA(Not-So-Stubby Area)区域是Stub区域的变形,与Stub区域的区别在于 NSSA区域允许引入自治系统外部路由,由ASBR发布Type-7 LSA通告给本区域。当 Type-7 LSA到达NSSA的ABR时,由ABR将Type-7 LSA转换成Type-5 LSA,传播到其他区域。
- Totally NSSA区域,该区域的ABR不会将区域间的路由信息传递到本区域。为保证到本自治系统的其他区域的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器
特殊区域中的LSA类型
区域类型 | 1类 | 2类 | 3类 | 4类 | 5类 | 7类 | 缺省LSA |
---|---|---|---|---|---|---|---|
普通区域 | √ | √ | √ | √ | √ | X | 手动下发 5类 |
STUB | √ | √ | √ | X | X | X | ABR自动下发 3类 |
完全STUB | √ | √ | X | X | X | X | ABR自动下发 3类 |
NSSA | √ | √ | √ | X | X | √ | ABR手动下发 7类 |
完全NSSA | √ | √ | X | X | X | √ | ABR自动下发 3类 |
OSPF状态机

Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和RouterDeadInterval间隔相同。
Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是在该报文的邻居列表字段中没有自己的router-id,表示邻居尚未收到本端发送的Hello消息,两台路由器之间未建立双向通信关系。在此状态下路由器发送Hello报文的时候要把邻居的router-id添加到邻居列表中。
2-WayReceived:此事件表示路由器发现与邻居的双向通信已经确认(在邻居发送的Hello报文的邻居列表中发现自己的router-id)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way状态。
- 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
- 1-WayReceived:此事件表示路由器发现在邻居发送的Hello报文的邻居列表中没有自己的router-id,这通常是由于对端邻居重启造成的。
- 影响OSPF邻居建立的因素
- Router ID 一个AS中不能相同
- 区域ID要一样
- 地址要唯一,掩码要一样(广播网络)
- 生存时间和死亡时间一样
- 验证通过
- 特殊区域标志位想通
ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文,协商两台路由器之间的主从关系;决定初始DD报文的序列号;但是在此状态下发送的DD报文不包含链路状态描述。
Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
Loading:邻居路由器之间使用LSR/LSU/LSAck报文交换LSA,同步LSDB。
Full:两台邻居路由器的LSDB已经同步。
OSPF路由计算
选路原则
- 同一区域下所有路由器的LSDB同步
- 先比较路由类型:区域内>区域间>type 1外部>type 2外部
- 路由类型相同再比较路由COST
- SPF路由器根据LSDB的内容构建出带有开销的地图
- 运行SPF算法,计算出去往目的网络的最优路径
- 出接口开销:$cost=\frac {10^8bit} {bandwidth}=\frac {100Mb} {bandwidth}$(bandwidth 链路带宽,$10^8bit$为参考带宽,可通过命令
bandwidth-reference
修改) - 路由COST:去往目的网段所有出接口开销之和
路由维护
- 网络没有拓扑改变OSPF协议是安静的路由协议,每隔30分钟更新LSA
- 网络拓扑发生改变,OSPF触发更新
- LSA的老化时间是1小时
OSPF引入缺省路由
default-route-advertise
:仅当本路由器路由表中存在缺省路由时,才能下发OSPF缺省LSA。default-route-advertise always
:不论本路由器路由表中是否存在缺省路由,始终能够下发OSPF缺省LSA。
注意:import-route命令不能引入OSPF缺省路由!!!!
OSPF路由聚合
1 |
|
注意:
- 必须在始发3类LSA的ABR上做聚合
- 必须在路由来源的区域视图下做聚合
- 不加not-advertise,则只发聚合,不发明细;
- 加not-advertise,则不发聚合,不发明细,相当于做OSPF区域间路由过滤。
1 |
|
注意:
- 必须在始发5类LSA的ASBR上做聚合
- 不加not-advertise,则只发聚合,不发明细;
- 加not-advertise,则不发聚合,不发明细,相当于做OSPF外部路由过滤。
OSPF高级特性
收敛特性
FULL-SPF:完全SPF计算
- 构建整个SPF树,针对树上的每个节点进行计算
I-SPF:增量SPF计算
- 只对受影响的节点进行SPF路径计算
部分路由计算PRC
- 只对发生变化的路由进行重新计算,不是进行路径计算
- 根据I-SPF算出来的SPT来更新路由
- 对接口翻动等原因带来的网络不稳定,进行智能控制,减少LSA洪泛
按优先级收敛
- 可以通过IP前缀列表等将特定路由过滤出来,通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性
提高OSPF的收敛速度
- 修改hello时间
- 与BFD联动
- 修改智能定时器
- 修改OSPF的网络类型
- 按优先级收敛,能够让某些特定的路由优先收敛的一种技术
- smart-discover MA网络的接口下配置,收到hello无需等待hello包的周期时间到期就可以立即触发hello报文
虚连接
应用场景
- 骨干区域被分割
- 非骨干区域没有与骨干区域直连相连
- 不存在骨干区域
- 解决次优路径问题
配置vlink要注意的问题
- 在非骨干区域的边界路由器上配置
- vlink peer指定是对方路由当前router id
- 虚链路的接口开销计算:等于实际经过物理链路最小COST的总和
vlink会带来的影响
- 增加网络的复杂性
- 增加非骨干区域路由器的负担
- 无法针对vlink所在的区域做汇总
- 不能随意修改router id
- VLINK配置不当会导致环路
认证
认证分类
- 接口认证:接口下配置认证
- 区域认证:区域下配置认证,最终应用到该区域下所有接口
- 特点
- 接口认证和区域认证同时配置,接口认证优先于区域
- 一端配置接口认证另配置区域认证,只要认证的密码和类型一致,不会影响邻居关系建立
- 配置接口认证较灵活, 区域认证可以减少配置量
- 配置area 0认证之后,注意也要在vlink所处的设备也进行认证(ara0 或vlink-peer下配置)
- OSPF的认证数据放在OSPF的报文头部中,所以OSPF的所有报文都要进行认证
认证方式
- Null(不认证)
- Simple
- MD5
- HMAC-MD5
- keychain
秘钥链,在不同的时间段启用不同的key,安全更高
OSPF报文与LSA
报文格式
报文组成:报文头+内容
报文头字段
Version(1字节):版本,OSPF的版本号。对于OSPFv2来说,其值为2
Type(1字节):类型,OSPF报文的类型
Packet length(2字节):OSPF报文的总长度,包括报文头在内,单位为字节
Router ID(4字节):发送该报文的路由器标识
Area ID(4字节):发送该报文的所属区域
Checksum(2字节):校验和,包含除了认证字段的整个报文的校验和
AuType(2字节):验证类型,值有如下几种表示, 0:不验证;1:简单认证;2:MD5认证
Authentication(8字节):鉴定字段,其数值根据验证类型而定
- 类型为0时未作定义
- 类型为1时此字段为密码信息
- 类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息
- MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中
报文类型
Hello报文(Type1)
作用:建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居
字段:
Network Mask(32比特):发送Hello报文的接口所在网络的掩码
HelloInterval(16比特):发送Hello报文的时间间隔
Options(8比特):可选项
- DN:在MPLS VPN双PE防环的时候使用
- O:该字段指出始发路由器支持Opaque LSA(类型9、类型10和类型11),不透明的LSA如TE的隧道的建立
- DC:按需链路位,如果表示为1,支持按需链路,如果对方路由器不支持,会失去按需链路的特性,然后建立邻居
- EA:当始发路由器具有接收和转发External-Attributes-LSA(Type8 LSA)的能力时,该位被置位。OSPF引入BGP是否可以带BGP属性
- N/P
- N位:只用在Hello数据包中,表示支持NSSA区域,邻居之间必须一致
- P位:只用在NSSA LSA。该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA。在NSSA的ABR上引入外部P=0
- E:表示是否支持外部路由,邻居之间必须一致
- MC:转发IP组播报文
- MT位:表示始发路由器支持多拓扑OSPF。同一OSPF进程是否一起支持IPv4,v6
Rtr Pri(8比特):DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举
RouterDeadInterval(32比特):失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效,通常为四倍HelloInterval
Designated Router(32比特):发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器
Backup Designated Router(32比特):发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器
Neighbor(32比特):邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文
重要参数:建立OSPF邻居关系时会对Hello包内如下参数做检查
- Router id:必须唯一
- Hello时间/Dead时间:必须相同
- 区域ID:必须相同
- 特殊区域类型:必须相同。
DD报文(Type2)
作用:描述自己的LSDB,进行数据库的同步。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认
字段:
Interface MTU(16比特):在不分片的情况下,此接口最大可发出的IP报文长度
Options(8比特):可选项,同Hello报文
I位(1比特):当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0
M(More)位(1比特):当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文
M/S (Master/Slave)位(1比特):当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master
- 一开始都会以自己为主,发送DD报文,然后比较Router id,Router id大为主,小为从
- 选举完成之后,由从路由器先发出DD报文,DD报文中包含LSA head信息
DD sequence number(32比特):DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性
LSA Headers(可变长):该DD报文中所包含的LSA的头部信息
LSR报文(Type3)
作用:向对方请求所需的LSA。内容包括所需要的LSA的摘要
字段:
LS type(32比特):LSA的类型号
Link State ID(32比特):根据LSA中的LS Type和LSA description在路由域中描述一个LSA
Advertising Router(32比特):产生此LSA的路由器的Router ID
其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧
LSU报文(Type4)
作用:向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合
字段:
Number of LSAs(32比特):LSA的数量
LSA:明细LSA信息,常用的LSA共有6种
LSACK报文(Type5)
作用:对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送
字段:
LSAs Headers(可变):通过LSA的头部信息确认收到该LSA
LSA类型
Type-1:路由器LSA
作用:描述路由器自身的直连链路信息(邻居、网段、开销)
始发者:每一台运行OSPF的路由器
Link State ID:始发该LSA的路由器的Router-id(描述谁的信息)
ADV Router:始发该LSA的路由器的Router-id(谁产生)
洪范范围:始发该LSA的区域内,不能离开始发区域。由DR产生,描述本网段所有路由器的链路状态,仅在其始发的区域内传播
Type-2:网络LSA
作用:描述多点可达环境中的路由器、网段、掩码信息
始发者:DR
Link State ID:DR的接口IP
ADV Router:始发该LSA的DR的Router-id
洪范范围:始发该LSA的区域内,不能离开始发区域。
Type-3:汇总LSA
作用:描述区域间的路由信息
始发者:ABR
Link State ID:区域间传递路由的网络号
ADV Router:始发或转发该LSA的ABR的Router-id
洪范范围:区域内洪范,ABR在区域间转发时做相应修改(ARV Router/COST)
注意:正因为3类LSA描述的是路由信息,而非链路状态信息,因此,OSPF区域间是类似于距离矢量的工作原理!因此,OSPF规定所有的非0区域必须直接和区域0相连,目的是为了在区域间防止环路!
Type-4:ASBR总汇LSA
作用:通告ASBR的可达性
始发者:ABR
Link State ID:ASBR的Router-id
ADV Router:始发或转发该LSA的ABR的Router-id
洪范范围:区域内洪范,ABR在区域间转发时做相应修改(ARV Router/COST)
Type-5:AS外部LSA
作用:描述AS外部路由信息(被引入的路由信息)
始发者:ASBR
Link State ID:AS外部路由信息的网络号
ADV Router:ASBR的Router-id
洪范范围:整个OSPF路由域(特殊区域除外)
- Type 1外部路由:5类LSA的cost+路由器到ASBR的cost
- Type 2外部路由:5类LSA的cost(缺省情况下使用type 2的开销计算方式)
Type-7:NSSA区域的AS外部LSA
作用:描述NSSA区域引入的AS外部路由信息(被引入的路由信息)
始发者:NSSA区域的ASBR
Link State ID:NSSA区域引入的AS外部路由信息的网络号
ADV Router:NSSA区域的ASBR的Router-id
洪范范围:NSSA区域内
:NSSA区域内