OSPF

OSPF特性

  1. OSPFv2开放路径最短优先路由协议(RFC2328,用于IPV4网络中)
  2. OSPF仅传播对端设备不具备的路由信息,路由器之间传递的是LSA
  3. 网络收敛迅速,并有效避免了网络资源浪费
  4. 直接工作于IP层之上,IP协议号为89
  5. 无环路
    • 区域内防环(SPF算法计算得出的最短路径树(SPF树)本身无环)
    • 区域间防环(LSA3类防环规则,所有的非0区域必须直接和区域0相连)
  6. OSPF使用组播地址发送协议报文
    • 224.0.0.5:发送Hello包;点到点网络类型下发送LSU。多点可达网络类型,DR给DROther发送LSU
    • 224.0.0.6:多点可达网络类型,DRother给DR/BDR发送LSU
  7. 支持区域划分
    • 方便管理
    • 减少LSDB的泛洪范围,减少设备的新能消耗,提高SPF算法的效率
    • 稳定性比较好,一个区域内拓扑信息的变化不会影响到其他的区域
    • 能支持汇总以及过滤(只能在ABR\ASBR上进行)

工作过程

  1. 发现并且建立OSPF的邻居关系
  2. 泛洪LSA(包含路由信息以及拓扑信息)
  3. 形成LSDB,构建整网(区域)拓扑,整个区域LSDB同步
  4. 进行SPF算法,得出最短路径树
  5. 将路由信息放入最短路径树,计算出路由

分层路由

允许将一个AS分为若干区域;最小化路由更新流量。所有区域有且只有一个。

  • 骨干区域:area ID为0,连接所有非骨干区域,负责非骨干区域之间的通讯
  • 非骨干(标准)区域:area ID为非0,只负责本区域的SPF树构建,需要访问其他区域必须通过骨干区域(防环)
  • 特殊区域:属于标准区域的一种,但是在标准区域基础增加了自动过滤LSA的特性
    区域划分的优点
  1. 方便管理
  2. 减少LSDB的泛洪范围,减少设备的新能消耗,提高SPF算法的效率
  3. 稳定性比较好,一个区域内拓扑信息的变化不会影响到其他的区域
  4. 能支持汇总以及过滤(只能在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网络的拓扑
  • 选举方式
    1. 优先级大优先(优先级范围0-255)
    2. router id 大优先
    3. 优先级为0,主动放弃DR选举,一个网段里优先都为0,那选不出DR,不能达到full
    4. OSPF的选举先选举BDR,再选举DR;在选举期(10s)到期前,当前最优的路由器暂定为BDR,在选举期到后,最优的路由器会被确认为DR
    5. DR和BDR一旦选定,即使OSPF区域内新增优先级更高的路由器,DR和BDR也不重新选举,只有当DR和 BDR都失效后,才重新选举
    6. 一个MA网不能存在多个DR,否则路由计算会有问题
    7. DRother和DRother之间的邻居关系只能是2-way
    8. 只有在广播或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状态机

ospf2.png

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路由计算

选路原则

  1. 同一区域下所有路由器的LSDB同步
  2. 先比较路由类型:区域内>区域间>type 1外部>type 2外部
  3. 路由类型相同再比较路由COST
  4. SPF路由器根据LSDB的内容构建出带有开销的地图
  5. 运行SPF算法,计算出去往目的网络的最优路径
  6. 出接口开销:$cost=\frac {10^8bit} {bandwidth}=\frac {100Mb} {bandwidth}$(bandwidth 链路带宽,$10^8bit$为参考带宽,可通过命令bandwidth-reference修改)
  7. 路由COST:去往目的网段所有出接口开销之和

路由维护

  1. 网络没有拓扑改变OSPF协议是安静的路由协议,每隔30分钟更新LSA
  2. 网络拓扑发生改变,OSPF触发更新
  3. LSA的老化时间是1小时

OSPF引入缺省路由

default-route-advertise:仅当本路由器路由表中存在缺省路由时,才能下发OSPF缺省LSA。
default-route-advertise always:不论本路由器路由表中是否存在缺省路由,始终能够下发OSPF缺省LSA。

注意:import-route命令不能引入OSPF缺省路由!!!!

OSPF路由聚合

1
2
3
ospf 1
area 0
abr-summary x.x.x.x y.y.y.y [not-advertise]

注意:

  1. 必须在始发3类LSA的ABR上做聚合
  2. 必须在路由来源的区域视图下做聚合
  3. 不加not-advertise,则只发聚合,不发明细;
  4. 加not-advertise,则不发聚合,不发明细,相当于做OSPF区域间路由过滤。
1
2
ospf 1
asbr-summary x.x.x.x y.y.y.y [not-advertise]

注意:

  1. 必须在始发5类LSA的ASBR上做聚合
  2. 不加not-advertise,则只发聚合,不发明细;
  3. 加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以及自己已知的邻居
字段

Image (4).tiff

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包内如下参数做检查

  1. Router id:必须唯一
  2. Hello时间/Dead时间:必须相同
  3. 区域ID:必须相同
  4. 特殊区域类型:必须相同。

DD报文(Type2)
作用:描述自己的LSDB,进行数据库的同步。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认
字段

Image.tiff

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的摘要
字段

Image (3).tiff

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(全部内容)的集合
字段

Image (2).tiff

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区域内


OSPF
https://www.intx.work/posts/a9cdbe6f.html
发布于
2015年8月20日
更新于
2019年10月28日
许可协议