OSPF协议

参考文献

1 OSPF协议概述

主要介绍了OSPF一些静态的基础知识。

OSPF原理

每一台路由器将其周边的链路状态描述出来,发送给网络中相邻的路由器。经过一段时间的链路状态信息交互,每台路由器都保存了一个链路状态数据库,该数据库是整个网络完整的链路状态描述。然后应用最短路优先算法计算路由。主要是Djskra算法。

OSPF组播的方式在所有开启OSPF的接口发送Hello包,用来确定是否有OSPF邻居,若发现了,则建立OSPF邻居关系,形成邻居表,之后互相发送LSA(链路状态通告)相互通告路由,形成LSDB(链路状态数据库)。再通过SPF算法,计算最佳路径(cost最小)后放入路由表。

OSPF特点

  • OSPF是一种无类别域间路由协议,支持VLSM可变长子网掩码。支持IPV4和IPV6.
  • 组播地址:224.0.0.5 224.0.0.6。
  • OSPF度量:从源到目的所有出接口的度量值,和接口带宽反比(10^8/带宽)。
  • 收敛速度极快,但大型网络配置很复杂。
  • IP封装,协议号89

OSPF优点

  • 适应范围广
  • 快速收敛
  • 无自环
  • 支持验证、组播发送、路由分级、等值路由。

自制系统和OSPF区域

自治系统(Autonomy System,AS)由统一机构管理的,使用同一组选路策略的路由器集合。OSPF是自治系统内部的路由选择协议。

区域(Area)是指一个路由器的集合,相同的区域有着相同的拓扑结构数据库。OSPF用区域把一个AS分成多个链路状态。分为骨干区域和非骨干区域。

  • 骨干区域(区域0):骨干区域必须连接所有的非骨干区域,而且骨干区域不可分割,有且只有一个,一般情况下,骨干区域内没有终端用户。
  • 非骨干区域(非0区域):非骨干区域一般根据实际情况而划分,必须连接到骨干区域(不规则区域也需通过tunnel或virtual-link连接到骨干区域)。一般情况下,费骨干区域主要连接终端用户和资源。

OSPF路由器逻辑角色

  • DR(Designated Router):指定路由器,OSPF协议启动后开始选举而来
  • BDR(Back-up Designated Router):备份指定路由器,同样是由OSPF启动后选举而来
  • DRothers:其他路由器,非DR非BDR的路由器都是DRothers。

OSPF路由器逻辑位置

  • 区域内路由器(IAR internal area router):所有端口在同一区域的路由器,维护一个链路状态数据库。

  • 区域边界路由器(ABR area border router):具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。

  • 骨干路由器(BBR backbone router):具有连接主干区域端口的路由器。 至少有一个接口属于骨干区域(area = 0)

  • 自治域系统边界路由器(ASBR as boundary router):至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。

邻居和邻接

邻居不一定是邻接,邻接一定是邻居,只有交互了LSA的OSPF邻居才成为OSPF的邻接,只交互Hello包的支撑位邻居。

在点对点网络中,所有邻居都能成为邻接。

MA(广播多路访问网络,比如以太网)网络类型中,DR,BDR,DRothers三者关系为:DR、BDR与所有的邻居形成邻接,DRothers之间只是邻居而不交换LSA。

  • OSPF发送hello报文(只有一跳)收到报文进行协商建立邻居关系。是一种物理上直接相连的关系,但不一定是逻辑上的邻接关系。
  • 当双方成功交换链路状态通告信息后才会成为邻接关系。建立了逻辑上的邻接关系。

OSPF更新

OSPF是一种触发更新的机制。一旦拓扑发生变化便会更新。
OSPF也有周期性更新(30分钟一次)

当收到一条LSA之后:
首先查看是否在LSDB中,若没有则假如LSDB,回复LSACK。继续泛洪出去,并且通过SPF算法计算最佳路径并加入路由表。若存在,则比较谁的更“新”(看序号),序号大者新,若本地不如收到的信更新本地LSDB并泛洪,且通过SPF算法计算最佳路径并加入路由表,若比收到的新,则将本地的泛洪出去。

OSPF中的表

  • 邻居表:记录了建立邻居关系的路由器dis ospf peer
  • LSDB(链路状态数据库):包含了本路由器上的区域的所有的链路状态信息,并实时同步。dis ospf lsdb
  • 路由转发表:由LSDB和SPF算法计算得到。dis ospf routing

2 OSPF协议报文交互过程

主要介绍了OSPF报文和动态交互过程。面向的对象OSPF协议本身。建立可靠数据连接的过程。

OSPF报文总体结构

IP 封装了OSPF报文,LSU(链路状态更新类型的报文)类型的OSPF报文封装了LSA(链路状态通告)报文,LSA报文封装了多个LSA数据。

更具体的封装格式:
IPHeader—-OSPFHeader—-particularHeader—-LSAHeader—-LSAData

OSPF报文头

字段 长度 含义
Version 1字节 版本,OSPF的版本号。对于OSPFv2来说,其值为2。
Type 1字节 类型,OSPF报文的类型,有下面几种类型:1:Hello报文;2:DD报文;3:LSR报文;4:LSU报文;5:LSAck报文。
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字段中。

5种OSPF报文类型-Hello报文

Hello:周期性地发送给本路由器的邻居,使用的组播地址224.0.0.5。DR和BDR发送报文使用的组播地址是224.0.0.6。其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

  • OSPF-hello报文格式

  • OSPF-hello字段说明

字段 长度 含义
Network Mask 32比特 发送Hello报文的接口所在网络的掩码。
HelloInterval 16比特 发送Hello报文的时间间隔。
Options 8比特 可选项: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标识。
  • OSPF-hello报文实例

5中OSPF报文类型-DD报文

DD:Database Description 本地数据库摘要,供路由器核对数据库是否同步。只交换摘要,减少带宽占用。包括空DD报文和带有摘要信息的DD报文。空DD报文用来确定Master/Slave关系,由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

  • OSPF-DD报文格式

  • OSPF-DD报文字段说明
字段 长度 含义
Interface MTU 16比特 在不分片的情况下,此接口最大可发
Options 8比特 可选项:E:允许Flood AS-External-LSAs
I 1比特 当发送连续多个DD报文时,如果这是第一个DD报文
M (More) 1比特 当发送连续多个DD报文时,如果这是最后
M/S (Master/Slave) 1比特 当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
DD sequence number 32比特 DD报文序列号。主从双方利
LSA Headers 可变 该DD报文中所包含的LSA的头部信息。
  • OSPF-DD报文实例

5种OSPF报文类型-LSR报文

LSR:Link-State Request 请求链路状态,在数据库同步过程中使用,请求其他角色发送自己失去的LSA最新版本。内容包括所需要的LSA的摘要。

  • OSPF-LSR报文格式

  • OSPF-LSR报文字段说明
字段 长度 含义
LS type 32比特 LSA的类型号。
Link State ID 32比特 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。
Advertising Router 32比特 产生此LSA的路由器的Router ID。
  • OSPF-LSR报文实例

5种OSPF报文类型-LSU报文

LSU:Link-State Update 链路状态更新,用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU包括几种类型的LSA,LSU负责泛洪LSA,和响应LSR。LSA只会发送给之前以LSR请求的LSA的直连邻居,进行泛洪的时候,邻居路由负责把收到的LSA信息重新封装在新的LSU中。

  • OSPF-LSU报文格式

  • OSPF-LSU报文字段说明
字段 长度 含义
Number of LSAs 32比特 LSA的数量。
  • OSPF-LSU报文实例

5种OSPF报文类型-LSACK报文

LSACK:链路状态确认,路由器必须对每个收到的LSA进行LSACK确认,但可以用一个LSACK确认多个LSA。

  • OSPF-LSACK报文格式

  • OSPF-LSACK报文字段说明
字段 长度 含义
LSAs Headers 可变 通过LSA的头部信息确认收到该LSA。
  • OSPF-LSACK报文实例

OSPF可靠传输机制

采用了确认重传机制,确保OSPF路由信息的可靠传输。

OSPF邻居状态机

邻居状态机的状态说明

  • Down
    邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文

  • Init
    本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含本Router ID(对方并没有收到我发的HELLO

  • Attempt
    只适用于NBMA类型的接口,处于本状态时,定期向那些手工配置的邻居发送HELLO报文

  • 2-Way
    本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。

  • ExStart
    在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。

  • Exchange
    路由器将本地的LSDB用DD报文来描述,并发给邻居

  • Loading
    路由器发送LSR报文向邻居请求对方的LSU报文

  • Full
    在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。本路由器和邻居建立了邻接状态

OSPF报文交互过程

具体步骤

  1. 通过HELLO报文的邻居发现
  2. DD报文的主从关系协商
  3. DD报文交换摘要信息
  4. LSA的请求
  5. LSA的更新
  6. LSA 的确认

3 OSPF协议链路状态通告

主要介绍了LSA链路状态通告和与LSA有关的逻辑关系。这一部分主要讲解了OSPF如何来描述整个网路,即如何生成LSDB。下一部分主要讲解通过LSDB,OSPF计算得到ospf routing table的过程。

常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。

LSA 相同的Header

  • 字段说明
字段 长度 含义
LS age 16比特 LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。
Options 8比特 可选项:E:允许泛洪AS-External-LSA;MC:转发IP组播报文;N/P:处理Type-7 LSA;DC:处理按需链路。
LS type 8比特 LSA的类型:Type1:Router-LSA Type2:Network-LSA Type3:Network-summary-LSA Type4:ASBR-summary-LSA Type5:AS-External-LSA Type7:NSSA-LSA
Link State ID 32比特 与LSA中的LS Type和LSA description一起在路由域中描述一个LSA。
Advertising Router 32比特 产生此LSA的路由器的Router ID。
LS sequence number 32比特 LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。
LS checksum 16比特 除了LS age外其它各域的校验和。
length 16比特 LSA的总长度,包括LSA Header,以字节为单位。

五种链路状态通告类型

Router-LSA(1类)

Router-LSA(Type1):每个路由器都会产生,描述了路由器的链路状态和花费,在所属的区域内传播。

  • Router-LSA通告格式

  • Router-LSA通告字段说明
字段 长度 含义
Link State ID 32比特 生成LSA的Router ID。
V (Virtual Link) 1比特 如果产生此LSA的路由器是虚连接的端点,则置为1。
E (External) 1比特 如果产生此LSA的路由器是ASBR,则置为1。
B (Border) 1比特 如果产生此LSA的路由器是ABR,则置为1。
# links 16比特 LSA中所描述的链路信息的数量,包括路由器上处于某区域中的所有链路和接口。
Link ID 32比特 路由器所接入的目标,其值取决于连接的类型:1:Router ID;2:DR的接口IP地址;3:网段/子网号;4:虚连接中对端的Router ID。
Link Data 32比特 连接数据,其值取决于连接的类型:unnumbered P2P:接口的索引值;stub网络:子网掩码;其它连接:路由器接口的IP地址。
Type 8比特 路由器连接的基本描述:1:点到点连接到另一台路由器;2:连接到传输网络;3:连接到stub网络;4:虚拟链路。
# TOS 8比特 连接不同的TOS数量。
metric 16比特 链路的开销值。
TOS 8比特 服务类型。
TOS metric 16比特 和指定TOS值相关联的度量。

Network- LSA(2类)

Network-LSA(Type2):由广播网或NBMA网络中的DR产生,Network-LSA中记录了这一网络上所有路由器的Router
ID,描述本网段的链路状态,在所属的区域内传播。

  • Network-LSA通告格式

  • Network-LSA通告字段说明
字段 长度 含义
Link State ID 32比特 DR的接口IP地址。
Network Mask 32比特 该广播网或NBMA网络地址的掩码。
Attached Router 32比特 连接在同一个网络上的所有路由器的Router ID,也包括DR的Router ID。

Network Summary-LSA(3类)

Network-summary-LSA(Type3):描述区域内所有网段的路由,并通告给其他相关区域。ASBR-summary-LSA(Type4):描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。Type3和Type4的LSA有相同的格式,它们都是由ABR产生。

  • Network Summary-LSA&ASBR Summary-LSA通告格式

  • Network Summary-LSA&ASBR Summary-LSA通告字段说明
字段 长度 含义
Link State ID 32比特 通告的网络地址。如果是ASBR Summary LSA,此字段表示ASBR的Router ID。
Network Mask 32比特 该广播网或NBMA网络地址的掩码。如果是ASBR Summary LSA,此字段无意义,设置为0.0.0.0。
metric 24比特 到目的地址的路由开销。
TOS 8比特 服务类型。
TOS metric 24比特 和指定TOS值相关联的度量。

ASBR Summary-LSA(4类)

ASBR-Summary-LSA(Type4):描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。Type3和Type4的LSA有相同的格式,它们都是由ABR产生。

AS External-LSA(5类)

AS-External-LSA(Type5):由ASBR产生,描述到AS外部的路由,这是五种LSA中,唯一一种通告到所有区域(除了Stub区域和NSSA区域)的LSA。

  • AS External-LSA通告格式

  • AS External-LSA通告字段说明

字段 长度 含义
Link State ID 32比特 通告的网络地址。
Network Mask 32比特 通告的目的地址的掩码。
E 1比特 外部度量值类型:0:第一类外部路由;1:第二类外部路由。
metric 24比特 到目的地址的路由开销。
Forwarding Address 32比特 到所通告的目的地址的报文将被转发到这个地址。
External Route Tag 32比特 添加到外部路由上的标记。OSPF本身并不使用这个字段,它可以用来对外部路由进行管理。
TOS 8比特 服务类型。
TOS metric 24比特 TOS附加距离信息。

4 OPSF协议链路状态描述

OSPF协议的4种网络类型

  • Broadcast类型。广播网络。选举指定路由器DR与备份指定路由器BDR。广播型全连接网络拓扑结构。
  • NBMA类型。非广播多点可达。选举DR与BDR。单播型全连接网络拓扑结构。
  • PRMP类型。点到多点网络。不要求DR和BDR。使用组播24.0.0.5发送协议。非全连接拓扑结构。
  • PTP类型。点到点网络。无序选择DR和BDR。使用组播224.0.0.5发送协议。点对点拓扑结构。

OSPF周围4种网络拓扑结构

  • Stub net:末端网络拓扑结构,路由器直连其他PC,网段中没有其他运行OSPF协议的网络设备。
  • PPP网络描述:点到点拓扑结构,链路连接另一个OSPF的路由器。
  • 点到多点:非全连接拓扑结构。
  • 全连接网络:全连接拓扑结构。信息冗余。选取DR与BDR。

链路状态描述信息

链路状态描述信息+链路状态通告头组成了链路状态通告信息。链路状态描述信息描述了一条记录的具体含义,反映了路由器周边的网络拓扑结构。不同的网络结构使用不同的链路状态描述信息。链路状态描述是链路状态通告的主体部分。

类型值 链路类型 LinkID LinkData
1-router Point-to-Point链路 邻居路由器的RouterID 始发路由器在该网段时的接口IP地址
2-transit 连接Transit网络链路 DR接口的IP地址 始发路由器在该网段是的接口IP地址
3-stubnet 连接Stub网络链路 Stub网络的IP地址 Stub网络的子网掩码
4-virtual Virtual Link 邻居路由器的RouterID 始发路由器接口的MIB-IIifINDEX值

链路状态描述信息与链路状态通告信息关系

重要:关系理解

链路状态信息组成了链路状态通告信息。链路状态描述信息通过接口链路类型区别。链路状态通告类型,通同路由器逻辑作用区别。

当使用以太网连接路由器的一个端口的时候,这个时候默认为广播类型,默认网络结构为全连接网络,默认生成第二类LSA。

第一类链路状态通告信息LSARouter中链路状态描述信息:

  • Stub类型的网络Serial
    • 使用StubNet链路状态描述信息,描述链路的网段信息
  • PPP网络Serial
    • 使用StubNet链路状态描述信息,描述相连的网段信息
    • 使用p2p链路状态描述信息,描述相连的路由器信息
  • 点到多点Serial
    • 使用StubNet链路状态描述信息,描述相连的网段信息
    • 使用p2p链路状态描述信息,描述相连的路由器。
  • 以太网连接Ethernet
    • 使用TransNet链路状态描述信息,描述网段信息。

第二类链路状态通告信息LSANetwork中的链路状态描述:

  • 全连接网络(或者说,以太网连接网络)
    • 直接描述同一个网段的全连接路由器。

第三类链路状态通告信息LSASumNet

第四类链路状态通告信息LSASumASB

DR与BDR的选举

  1. 登记本网段内运行OSPF的路由器;
  2. 登记具有DR候选资格的路由器,即本网段内的Priority>0的OSPF路由器(Priority可以手工配置,缺省值是1);
  3. 所有的Priority>0的OSPF路由器都认为自己是DR;
  4. Priority值最大,若Priority值相等则Router ID最大的路由器将成为DR。第二为BDR。
  5. 每台路由器通过互相发送Hello报文,同时将自己选出的DR写入Hello报文中,本网段中所有路由器共同选举出DR和BDR。

选举的原则

  • 选举制
    DR是各路由器选出来的,而非人工指定的,虽然管理员可以通过配置Priority干预选举过程。
  • 终身制
    DR一旦当选,除非路由器故障,否则不会更换,即使后来的路由器Priority更高。
  • 世袭制
    DR选出的同时也选出BDR来,DR故障后,由BDR接替DR成为新的DR。
  • 稳定压倒一切
    如果DR频繁的更迭,则每次都要重新引起本网段内的所有路由器与新的DR建立邻接关系。
  • BDR快速响应
    BDR与DR同时被选举出来。BDR也与本网段内的所有路由器建立邻接关系并交换路由信息。DR失效后,BDR立即成为DR。

5 区域划分及LSA种类

原理

路由器数量增多,LSDB庞大,占用存储空间,增加运行SPF算法的复杂度,同时两台路由器之间进行LSDB同步的时间变长。

减少LSA的数量,缩小网络变化的搏击范围。

OSPF协议通过将自治系统划分成不同的区域解决问题。区域内使用第一类和第二类LSA链路通告类型。第三类LSA主要对区域内的路由(网段)信息进行描述,大大减少了路由信息描述的数量。

路由聚合功能。

路由器类型

在第一章讲过

与自治系统外部通信

ASBR可以在系统中的任何位置。将其他路由协议(包括静态路由和接口直连路由)导入到OSPF路由器中。

使用第五类LSA描述包括该路由的目的地之、掩码和花费等信息。将外部信息导入到自制系统内部传播。

骨干区域与虚连接

6 OSPF协议路由的计算

SPF算法和COST值

  • SPF算法-Dijkstra算法。

    根据链路状态数据库,还原网络区域的拓扑结构图。SPF算法根据甲醛有向图,以该路由器为根,计算最小生成树,获得到每一个目的网段的路由。

  • Cost值

    链路花费。值越小,链路带宽越高。OSPF中的COST值一般为$10^8/链路宽带$。

区域内OSPF路由计算过程

LSA描述路由器本地状态–报文交互–>生成LSDB–SPF算法–>LS Routing

  1. 每台路由器根据自己周围的网络拓扑结构生成一条LSA(静态)。通过相互之间发送协议报文将LSA发送给网络中相邻的路由器(动态交互)。网络中所有的路由器具有所有的相同的LSA构成的LSDB。
  2. LSDB是对整个网络拓扑结构的描述。使用LSDB生成带权有向图。
  3. 每台路由器运行SPF算法计算最短路径树。

区域间OSPF路由计算过程

  1. 同一个区域内的路由器之间会保持LSDB的同步。网络拓扑结构的变化首先在区域内更新。
  2. 区域之间通过ABR来完成。生成Type3的LSA
  3. 另一个区域根据Type3的LSA,生成路由,下一跳都指向ABR

区域外OSPF路由的计算过程

  1. 第一类外部路由接受的IGP路由。第一类外部路由开销=本路由器到ASBR开销+ASBR到目的地址开销。
  2. 第二类外部路由接受的EGP路由。第二类外部路由开销=ASBR到目的地之的开销。

路由的类型和优选顺序

  1. 优选区域内路由
  2. 优选区域间路由
  3. 优选自治系统Tpye1类外部路由
  4. 优选自制系统Type2类外部路由
  5. 若都相等,添加等值路由。

一个SPF算法运行的实例分析(来自课本)

  1. 每个路由器生成了第一类LSA