OSFP协议特点详解以及OSFP单多区域配置实例
OSPF 是 Open Shortest Path First(开放最短路径优先)的缩写。它是 IETF 组织开发的一个基于链路状态的内部网关协议。目前针对 IPv4 协议使用的是 OSPF Version 2(RFC 2328)。
科普OSPF开发历程:
链路状态理由协议
SPF算法
是OSPF路由协议的基础。SPF算法有时也被称为Dijkstra算法,这是因为最短路径优先算法SPF是Dijkstra发明的。SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。在OSPF路由协议中,最短路径树的树干长度,即OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost,其算法为:Cost = 100×106/链路带宽。:在这里,链路带宽以bps来表示。也就是说,OSPF的Cost 与链路的带宽成反比,带宽越高,Cost越小,表示OSPF到目的地的距离越近。举例来说,FDDI或快速以太网的Cost为1,2M串行链路的Cost为48,10M以太网的Cost为10等。
OSPF 具有如下特点:
适应范围广——支持各种规模的网络,最多可支持几百台路由器。
快速收敛——在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
无自环——由于 OSPF 根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
区域划分——允许自治系统的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
等价路由——支持到同一目的地址的多条等价路由。
路由分级——使用 4 类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
支持验证——支持基于接口的报文验证,以保证报文交互的安全性。
组播发送——在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。
OSPF 的基本概念
1. 自治系统(Autonomous System)
一组使用相同路由协议交换路由信息的路由器,缩写为 AS。
2. OSPF 路由的计算过程
OSPF 协议路由的计算过程可简单描述如下:
每台 OSPF 路由器根据自己周围的网络拓扑结构生成 LSA(Link State Advertisement,链路状态通告),并通过更新报文将 LSA 发送给网络中的其它 OSPF 路由器。
每台 OSPF 路由器都会收集其它路由器通告的 LSA,所有的 LSA 放在一起便组成LSDB(Link State Database,链路状态数据库)。LSA 是对路由器周围网络拓扑结构的描述,LSDB 则是对整个自治系统的网络拓扑结构的描述。
OSPF 路由器将 LSDB 转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的。
每台路由器根据有向图,使用 SPF 算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
3. OSPF的协议管理距离(AD)是110
OSPF由IETF在20世纪80年代末期开发,OSPF是SPF类路中的开放式版本链路是路由器接口的临一中说法,因此OSPF也称为接口状态路由器
4. 路由器 ID 号
一台路由器如果要运行 OSPF 协议,则必须存在 RID(Router-ID,路由器 ID)。RID 是一个 32 比特无符号整数,可以在一个自治系统中唯一的标识一台路由器。
RID 可以手工配置,也可以自动生成;如果没有通过命令指定 RID,将按照如下顺序自动生成一个 RID:
①如果当前设备配置了 Loopback 接口,将选取所有 Loopback 接口上数值最大的 IP 地址作为 RID;
②如果当前设备没有配置 Loopback 接口,将选取它所有已经配置 IP 地址且链路有效的接口上数值最大的 IP 地址作为 RID。
5. OSPF 的协议报文
OSPF 有五种类型的协议报文:
Hello 报文:周期性发送,用来发现和维持 OSPF 邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)以及自己已知的邻居。
DD(Database Description,数据库描述)报文:描述了本地 LSDB 中每一条LSA 的摘要信息,用于两台路由器进行数据库同步。
LSR(Link State Request,链路状态请求)报文:向对方请求所需的 LSA。
两台路由器互相交换 DD 报文之后,得知对端的路由器有哪些 LSA 是本地的 LSDB 所缺的,这时需要发送 LSR 报文向对方请求所需的 LSA。内容包括所需要的 LSA 的摘要。
LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的 LSA。
LSAck(Link State Acknowledgment,链路状态确认)报文:用来对收到的LSA 进行确认。内容是需要确认的 LSA 的 Header(一个报文可对多个 LSA 进行确认)。
6.LSA 的类型
OSPF 中对链路状态信息的描述都是封装在 LSA 中发布出去,常用的 LSA 有以下几种类型:
Router LSA(Type1):由每个路由器产生,描述路由器的链路状态和开销,在其始发的区域内传播。
Network LSA(Type2):由 DR 产生,描述本网段所有路由器的链路状态,在其始发的区域内传播。
Network Summary LSA(Type3):由 ABR(Area Border Router,区域边界路由器)产生,描述区域内某个网段的路由,并通告给其他区域。
ASBR Summary LSA(Type4):由 ABR 产生,描述到 ASBR(Autonomous System Boundary Router,自治系统边界路由器)的路由,通告给相关区域。
AS External LSA(Type5):由 ASBR 产生,描述到 AS(Autonomous System,自治系统)外部的路由,通告到所有的区域(除了 Stub 区域和 NSSA 区域)。
NSSA External LSA(Type7):由 NSSA(Not-So-Stubby Area)区域内的ASBR 产生,描述到 AS 外部的路由,仅在 NSSA 区域内传播。
Opaque LSA:是一个被提议的 LSA 类别,由标准的 LSA 头部后面跟随特殊应用的信息组成,可以直接由 OSPF 协议使用,或者由其它应用分发信息到整个 OSPF 域间接用。Opaque LSA 分为 Type 9、Type10、Type11 三种类型,泛洪区域不同;其中,Type 9 的 Opaque LSA 仅在本地链路范围进行泛洪,Type 10 的 Opaque LSA 仅在本地区域范围进行泛洪,Type 11 的 LSA可以在一个自治系统范围进行泛洪。
7. 邻居和邻接
在 OSPF 中,邻居(Neighbor)和邻接(Adjacency)是两个不同的概念。
OSPF 路由器启动后,便会通过 OSPF 接口向外发送 Hello 报文。收到 Hello 报文的 OSPF 路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。
形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换 DD 报文,交换 LSA 并达到 LSDB 的同步之后,才形成真正意义上的邻接关系。
OSPF区域和角色
1. 链路状态协议泛红链路状态信息,使每台路由器有一个完整的网络拓扑视图
最短路径优先算法用于点到点的网络连接,为了在目前多样的网络中实现OSPF协议,OSPF必须知道它所运行的网络类型
在交换OSPF链路状态信息前,OSPF协议会在路由器之间建立邻居关系一个大型的OSPF网络使用分级设计原则。多个区域连接到一个分配区,区域0,也称为骨干区
OSPF的三张表
1. 邻居表(neighbor table)
OSPF用邻居机制来发现和维护路由的存在,邻居表存储了双向通信的邻居关系OSPF路由器列表的信息。
2. 拓扑表(topology table)
OSPF用LSA(link state Advertisement 链路状态通告)来描述网络拓扑信息,然后OSPF路由器用拓扑数据库来存储网络的这些LSA。
3. OSPF路由表(nouter table)
对链路状态数据库进行SPF(Dijkstra)计算,而得出的OSPF路由表
OSPF建立过程
OSPF的网络类型
OSPF实战配置
Ospfv3主要是在IPV6中的应用,基础篇简单给出案例,详细请看深入篇
OSPF 的报文格式
OSPF报文直接封装为IP报文协议报文,协议号为 89。一个比较完整的OSPF报文
(以LSU报文为例)结构如下所示。
1. OSPF 报文头
OSPF有五种报文类型,它们有相同的报文头。如下所示。
主要字段的解释如下:
Version:OSPF 的版本号。对于 OSPFv2 来说,其值为 2。
Type:OSPF 报文的类型。数值从 1 到 5,分别对应 Hello 报文、 DD 报 文、LSR 报文、 LSU 报文和 LSAck 报文。
Packet length:OSPF 报文的总长度,包括报文头在内,单位为字节。
Router ID:始发该 LSA 的路由器的 ID。
Area ID:始发 LSA 的路由器所在的区域 ID。
Checksum:对整个报文的校验和。
AuType:验证类型。可分为不验证、简单(明文)口令验证和 MD5 验证,其值分别为 0、1、 2。
Authentication:其数值根据验证类型而定。当验证类型为 0 时未作定义,为 1 时此字段为密码信息,类型为 2 时此字段包括 Key ID、 MD5验证数据长度和序列号的信息。
2. Hello 报文( Hello Packet)
最常用的一种报文,周期性的发送给邻居路由器用来维持邻居关系以及DR/BDR的选举,内容包括一些定时器的数值、 DR、 BDR以及自己已知的邻居。Hello报文格
式如下所示。
主要字段解释如下:
Network Mask:发送 Hello 报文的接口所在网络的掩码,如果相邻两台路由器 的网络掩码不同,则不能建立邻居关系。
HelloInterval:发送 Hello 报文的时间间隔。如果相邻两台路由器的 Hello 间隔时间不同,则不能建立邻居关系。
Rtr Pri:路由器优先级。如果设置为 0,则该路由器接口不能成为 DR/BDR。
RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的 Hello 报文,则认为邻居失效。如果相邻两台路由器的失效时间不同,则不能建立邻居关系。
Designated Router:指定路由器的接口的 IP 地址。
Backup Designated Router:备份指定路由器的接口的 IP 地址。
Neighbor:邻居路由器的 Router ID。
3. DD 报文( Database Description Packet)
两台路由器进行数据库同步时,用 DD 报文来描述自己的 LSDB,内容包括 LSDB中每一条LSA 的 Header( LSA 的 Header 可以唯一标识一条 LSA)。LSA Header只占一条 LSA 的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据 LSA Header 就可以判断出是否已有这条 LSA。DD报文格式如下所示。
主要字段的解释如下:
Interface MTU:在不分片的情况下,此接口最大可发出的 IP 报文长度。
I( Initial):当发送连续多个 DD 报文时,如果这是第一个 DD 报文,则置为 1,否则置为 0。
M( More):当连续发送多个 DD 报文时,如果这是最后一个 DD 报文,则 置为 0。否则置为 1,表示后面还有其他的 DD 报文。
MS( Master/Slave):当两台 OSPF 路由器交换 DD 报文时,首先需要确定双方的主( Master)从( Slave)关系, Router ID 大 的一方会成为 Master。当值为 1 时表示发送方为 Master。
DD Sequence Number:DD 报文序列号,由 Master 方规定起始序列号,每发送一个 DD 报文序列号加 1, Slave 方使用 Master 的序列号 作为确认。主从双方利用序列号来保证 DD 报文传输的可靠性和完整性。
4. LSR 报文( Link State Request Packet)
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下所示。
主要字段解释如下:
LS type:LSA 的类型号。例如 Type1 表示 Router LSA。
Link State ID:链路状态标识,根据 LSA 的类型而定。
Advertising Router:产生此 LSA 的路由器的 Router ID。
5. LSU 报文( Link State Update Packet)
LSU报文用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。LSU报文格式如下所示。
主要字段解释如下:
Number of LSAs:该报文包含的 LSA 的数量。
LSAs:该报文包含的所有 LSA。
6. LSAck 报文( Link State Acknowledgment Packet)
LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。
一个LSAck报文可对多个LSA进行确认。报文格式如下所示。
主要字段解释如下:
LSA Headers:该报文包含的 LSA 头部。
7. LSA 头格式
所有的LSA都有相同的报文头,其格式如下所示。
主要字段的解释如下:
LS age:LSA 产生后所经过的时间,以秒为单位。LSA 在本路由器的链路状 态数据库( LSDB)中会随时间老化(每秒钟加 1),但在网络的传输过程中却不会。
LS type:LSA 的类型。
Link State ID:具体数值根据 LSA 的类型而定。
Advertising Router:始发 LSA 的路由器的 ID。
LS sequence number:LSA 的序列号,其他路由器根据这个值可以判断哪个LSA 是最新的。
LS checksum:除了 LS age 字段外,关于 LSA 的全部信息的校验和。
length:LSA 的总长度,包括 LSA Header,以字节为单位。
小伙伴们想获取更多思科认证干货,
可以扫描下图二维码加入微信交流群!