OSPF介绍
OSPF(Open Shortest Path First,开放最短路径优先)是一种用于互联网协议网络的链路状态路由协议。它属于内部网关协议(IGP),主要用于单一自治系统(AS)内部的路由选择。在AS中,所有的OSPF路由器都维护一个相同的描述这个AS的数据库,该数据库中存放的是路由域中相应的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。
OSPF大概所需掌握的知识点
OSPF 基本配置,查看OSPF 表格,OSPF 5 种报文 ,7种邻居状态,4 种网络类型,4 种特殊区域,7类LSA,4 种 link-type,标识一条LSA的 3 个要素,OSPF 邻居与邻接关系,单区域、多区域、OSPF 认证(keychain),DR 的选举,OSPF 被动接口,OSPF 域间聚合,外部聚合,不规则区域的解决办法(虚链接),OSPF 开销值、协议优先级及计时器的修改,OSPF 外部路由引入,下放默认路由,OSPF 协议中 Forwarding Address 的理解
OSPF涉及术语
Router-id
介绍
一台路由器要运行OSPF协议,必须存在router-id。Router-id是一个32比特无符号整数,唯一标识一台运行OSPF协议的路由器,切不能相同(相同区域,router-id不能相同;不同区域,router可以相同,建议设置不同以便区分)。
选取方式
1、通过命令行手动配置。(推荐,根据路由器名字,命名router-id)
2、设备自动设定。
如果没有手动配置Router ID,设备会从当前接口的IP地址中自动选取一个作为Router ID。其选取顺序是:
①优先从Loopback地址中选择最大的IP地址作为Router ID。
②如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为Router ID。
只有重新配置系统的Router ID或者OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。
区域(Area)
介绍
OSPF协议通过将自治系统划分成不同的区域解决LSDB频繁更新的问题,提高网络的利用率。区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是设备,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。
区域分类
普通区域
缺省情况下,OSPF区域被定义为普通区域。普通区域包括:
- 骨干区域(Area 0):连接所有其他OSPF区域的中央区域,通常用Area 0表示。骨干区域负责汇聚来自不同区域的路由信息,并在这些区域之间传递路由信息。非骨干区域之间的路由信息必须通过骨干区域来转发。
- 标志区域(Standard Area):除了Area 0之外的其他区域,通常被称为标准区域或非骨干区域。非骨干区域必须与骨干区域保持连通。这些区域内部的路由器只与同一区域内的其他路由器交换链路状态信息(LSA)。
Stub区域
Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,因此这些区域中设备的路由表规模以及路由信息传递的数量都会大大减少。一般情况下,Stub区域位于自治系统的边界,是只有一个ABR的非骨干区域,为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR设备。
备注:1、骨干区域不能配置成Stub区域。2、Stub区域内不能存在ASBR,因此自治系统外部的路由不能在本区域内传播。3、虚连接不能穿过Stub区域。
NSSA(Not-So-Stubby Area)区域
NSSA区域允许引入自治系统外部路由,携带这些外部路由信息的Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,泛洪到整个OSPF域中。
备注:1、NSSA区域的ABR会发布Type7 LSA缺省路由传播到本区域内。2、所有域间路由都必须通过ABR才能发布。3、虚连接不能穿过NSSA区域。
路由器类型
路由器类型 |
含义 |
---|---|
区域内路由器(Internal Router) |
该类设备的所有接口都属于同一个OSPF区域。 |
区域边界路由器ABR(Area Border Router) |
该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
骨干路由器(Backbone Router) |
该类设备至少有一个接口属于骨干区域。 所有的ABR和位于Area0的内部设备都是骨干路由器。 |
自治系统边界路由器ASBR(AS Boundary Router) |
与其他AS交换路由信息的设备称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。 |
支持的网络和报文类型
LSA类型
OSPF(Open Shortest Path First)协议中,LSA(Link-State Advertisement)是用于传播链路状态信息的消息类型。每个 OSPF 路由器会生成不同类型的 LSA,以便传播它的链路状态信息,并最终帮助计算最短路径。OSPF 定义了多种类型的 LSA,每种类型都有不同的用途和传播方式。
总结 Type 1 和 Type 2 LSA 用于描述路由器和网络的基本拓扑。 Type 3 和 Type 4 LSA 用于跨区域传播汇总信息和 ASBR 的信息。 Type 5 和 Type 7 LSA 用于引入外部网络的路由信息,其中 Type 5 是标准的外部路由,而 Type 7 主要用于 NSSA 区域。 |
||||||||||||||||
报文类型
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
报文类型 |
报文作用 |
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进行确认。 |
OSPF报文格式
有5种OSPF报文,这五种报文具有相同的报文头格式。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。这五种报文具有相同的报文头格式,长度为24字节。
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +---------------+---------------+-------------------------------+ | Version | Type | Packet length | +---------------+---------------+-------------------------------+ | Router ID | +---------------------------------------------------------------+ | Area ID | +-------------------------------+-------------------------------+ | Checksum | AuType | +-------------------------------+-------------------------------+ | Authentication | +---------------------------------------------------------------+ | Authentication | +---------------------------------------------------------------+
字段 |
长度 |
含义 |
---|---|---|
Version |
1字节 |
版本,OSPF的版本号。对于OSPFv2来说,其值为2。 |
Type |
1字节 |
类型,OSPF报文的类型,有下面几种类型:
|
Packet length |
2字节 |
OSPF报文的总长度,包括报文头在内,单位为字节。 |
Router ID |
4字节 |
发送该报文的路由器标识。 |
Area ID |
4字节 |
该报文的所属区域。 |
Checksum |
2字节 |
校验和,包含除了认证字段的整个报文的校验和。 |
AuType |
2字节 |
验证类型,值有如下几种表示:
|
Authentication |
8字节 |
鉴定字段,其数值根据验证类型而定:
|
hello报文
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
字段 | 长度 | 含义 |
---|---|---|
Network Mask | 32比特 | 发送Hello报文的接口所在网络的掩码。 |
HelloInterval | 16比特 | 发送Hello报文的时间间隔。 |
Options | 8比特 | 可选项:
|
Rtr Pri | 8比特 | DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。 |
RouterDeadInterval | 32比特 | 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 |
Designated Router | 32比特 | DR的接口地址。 |
Backup Designated Router | 32比特 | BDR的接口地址。 |
Neighbor | 32比特 | 邻居,以Router ID标识。 |
DD报文
OSPF DD(Database Description)报文描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。
字段 | 长度 | 含义 |
---|---|---|
Interface MTU | 16比特 | 在不分片的情况下,此接口最大可发出的IP报文长度。 |
Options | 8比特 | 可选项:
|
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 sequence number | 32比特 | DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 |
LSA Headers | 可变 | 该DD报文中所包含的LSA的头部信息。 |
LSR报文
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
字段 | 长度 | 含义 |
---|---|---|
LS type | 32比特 | LSA的类型号。 |
Link State ID | 32比特 | 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。 |
Advertising Router | 32比特 | 产生此LSA的路由器的Router ID。 |
LSU报文
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
字段 |
长度 |
含义 |
---|---|---|
Version |
1字节 |
版本,OSPF的版本号。对于OSPFv2来说,其值为2。 |
Packet length |
2字节 |
OSPF报文的总长度,包括报文头在内,单位为字节。 |
Router ID |
4字节 |
发送该报文的路由器标识。 |
Area ID |
4字节 |
该报文的所属区域。 |
Checksum |
2字节 |
校验和,包含除了认证字段的整个报文的校验和。 |
AuType |
2字节 |
验证类型,值有如下几种表示:
|
Authentication |
8字节 |
鉴定字段,其数值根据验证类型而定:
|
Number of LSAs |
32比特 |
LSA的数量。 |
LSAs |
- |
常用的LSA共有6种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA、AS-External-LSA和NSSA-LSA。 所有的LSA都有相同的报文头 不同的LSA类型有不同的格式:
|
OSPF LSA类型
LSAck报文
OSPF LSAck(Link State Acknowledgment)用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。
字段 |
长度 |
含义 |
---|---|---|
Version |
1字节 |
版本,OSPF的版本号。对于OSPFv2来说,其值为2。 |
Packet length |
2字节 |
OSPF报文的总长度,包括报文头在内,单位为字节。 |
Router ID |
4字节 |
发送该报文的路由器标识。 |
Area ID |
4字节 |
该报文的所属区域。 |
Checksum |
2字节 |
校验和,包含除了认证字段的整个报文的校验和。 |
AuType |
2字节 |
验证类型,值有如下几种表示:
|
Authentication |
8字节 |
鉴定字段,其数值根据验证类型而定:
|
An LSA Header |
可变 |
通过LSA的头部信息确认收到该LSA。LSA头部信息格式 |
OSPF工作过程
1、邻接建立:路由器通过Hello报文发现并建立邻接关系。
2、数据库同步:路由器交换DBD(数据库描述)报文,确认链路状态信息。
3、链路状态更新:通过LSR(请求)、LSU(更新)和LSAck(确认)报文交换链路状态信息。
4、SPF计算:根据链路状态信息,使用SPF算法计算最短路径树,更新路由表。
5、维护更新:定期交换Hello和DBD报文,保持链路状态信息的同步和更新。
OSPF建立邻居关系
DR的选举
作用:负责在MA网络中简历和维护邻接关系,同步LSA。
选举过程
1、接口DR:优先级越大越优,默认优先级为1,若优先级为0则表示不参与DR/BDR的选举
2、先选举BDR ,后有DR
如果先选举DR,再选举BDR ,当选举 BDR 的过程中DR 失效,此时网络中既没有 DR 也没有 BDR,切换将无法进行,状态机也就没办法做了。所以先有 BDR, 后有 DR 是为了保证状态机能正常工作。
3、router-id越大越优先
4、当处于同一网段的两台路由器竞争DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先 级为0,则它不会被选举为DR或BDR。
5、DR非抢占,基于端口。
OSPF支持的网络类型
网络类型 |
含义 |
广播类型(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报文)。 |
---------------------------------------------------------------------------------------------------------------------------------
亲爱的读者朋友们,我在发布的博客中可能存在一些不足之处,如果您发现了任何错误或有改进建议,恳请不吝赐教,您的反馈对我非常重要。谢谢!