OSPF(Open Shortest Path First,开放式最短路径优先)路由协议基础

动态路由协议

路由协议介绍

路由器获取路由条目分别有三种途径:直连路由、静态路由、动态获得。
动态路由获得来源于路由器选取的不同各种路由协议。路由协议又可以按照不同的标准进行分类。

按照工作区域分类

IGP(Interior Gateway Protocols,内部网关协议)

在同一个AS(Autonomous System,自治系统)内交换路由信息,主要用来发现和计算同一自治系统内的路由信息。例如RIP、OSPF协议(晚于RIP) 、IS-IS协议

EGP(Exterior Gateway Protocls,外部网关协议)

用于AS之间的互联。例如BGP协议,使用一种PV(Path Vector,路径矢量)算法,是根据距离矢量算法修改的算法。因此BGP协议有时也会称为路径矢量路由算法。

按照工作机制/算法分类

Distance Verctol Protocols距离矢量协议
介绍

运行距离矢量路由协议的路由器会周期性地泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学到路由,并且加载到自己的路由表中,然后再通告给其他路由器。

缺点

对于整个网络的路由器而言,并不知道整个网络的拓扑,只知道去往某个网段可不可达、开销有多大。

例子

RIP协议

Link-State Routing Protocols链路状态路由协议
介绍

链路状态路由协议通告的是路由器对自己直连接口状态的信息,包括接口的开销、与邻居路由器之间的关系。这些信息被叫做Link State Advertisment 链路状态信息。会在路由器之间建立邻居关系后进行交互

收到LSA信息的路由器会将LSA信息放在自己的LSDB(Link State DataBase,链路状态数据库)中,而后对LSDB中的许多种LSA信息进行分析,从而了解全网拓扑

每台路由器基于LSDB,使用SPF(Shortest Path First ,最短路径优先)算法进行计算,计算出一个以自己为根、无环、拥有最短路径的树

路由器计算出的最短路径,会被加载到自己的路由表里。
在这里插入图片描述

例子

OSPF 、IS-IS协议

OSPFv2

OSPF目前有两个版本:OSPFv2(RFC2328)和OSPF(RFC2740),这里只讨论OSPFv2版本。

OSPF应知应会

OSPF路由器唯一标识 Router ID

也是一个多用点分十进制方式表示的32位二进制数,一台OSPF路由器的Router ID是按照下面的方式生成的:

  1. 如果路由器的管理人员手动静态配置了Router ID,则路由器会使用管理员配置的Router ID。

  2. 如果管理员没有手动配置,但在路由器上创建了逻辑接口,如环回接口,则路由器会使用这台路由器上所有逻辑接口的IPv4地址中,最大的地址作为自己的Router ID。无论该接口是否参与了OSPF协议。

  3. 如果管理员既没有手动配置Router ID,也没有在路由器上创建逻辑接口,那么路由器就会使用这台路由器所有活动物理接口的IPv4中数值最大的IPv4作为自己的Router ID,无论该接口是否参与了OSPF协议。

Router ID特性:

Router ID一旦选定,只要OSPF进程没有重启,Router ID就不会在此后因为接口的变化而产生变化

不同于只具有本地意义的路由器主机名,一旦OSPF协议选出Router ID,它就会将Router ID作为通信数据的一部分添加在发送给邻居的信息中(比如封装在OSPF头部,添加在hello信息中),因此,一台OSPF路由器的Router ID产生变化,会对它的OSPF邻居状态以及网络中其他的路由器产生影响,所以为避免重置进程后,一些与OSPF不相干的操作影响到OSPF对路由器ID的选择,Router ID推荐管理员手动配置

首先,规划出一个私有网段用于OSPF的Router ID选择。例如192.168.1.0/24.在启用OSPF进程前,在每个OSPF路由器上建立一个loopback接口,使用一个32位掩码的私有地址作为其IP地。这个32位的私有地址即作为该路由设备的Router ID,如果没有特殊要求,这个loopback接口地址可以不发布在OSPF网络中。

OSPF区域 Area

在大中型网络中,路由器设备可能非常多,如果不进行区域划分的话,整个网络的所有设备都需要随时学习彼此的路由信息,最终生成的路由信息数据库可能会非常庞大且变化频繁,这样大大消耗了路由器的有限存储空间,也不利于高效路由选择。

OSPF通过将AS划分成多个不同层次的区域来解决LSDB频繁更新的问题,提高了网络利用率。区域是从逻辑上将路由器划分为不同的组,每个组用一个32bit非负整数,命名为区域号Area ID的量来标识。

划分区域后,各路由器发送的大多数LSA只需要在区域内传播,仅有少数用于计算区域间路由的LSA需要跨区域传播,这样大大减少了网络中LSA传输的数量,也降低了用于存储LSDB所需的存储空间,是单一链路故障对整个网络产生的影响降到最低,使网络更稳定。

Area ID 格式点分十进制整数
描述与IPv4地址一样
举例1Area0.0.0.11
举例2Area0.0.0.255255
举例3Area0.0.1.0256
OSPF报文格式

OSPF直接采用IP封装,协议号为89。
在这里插入图片描述

OSPF报文的5种类型

在OSPF Packet 头部的Type字节代表着OSPF报文的类型,取值为1-5,分别对应着5种报文。对这5种OSPF报文进行分析

hello信息

在这里插入图片描述

DataBase Description 交互链路状态信息库摘要

与hello信息报文一样,另外四种信息也存在于OSPF数据部分。

路由器需要交换很多个DataBase Description信息才能实现链路状态信息的同步,路由器判断自己是否收全了双方交换的DataBase Decription信息,就是以DataBase Description 序列号是否连续为依据。

接口MTU可选项标记
DataBase Decription序列号
LSA头部

虽然LSA信息有好几种类型,但所有的LSA头部是相同的格式,作为LSDB中LSA的清单,DataBase Description会携带所有LSA的头部。

Link State request 发送特定的链路状态信息

当路由器通过其他OSPF路由器发来的DataBase Description进行查漏后,它会发送Link State Request ,请该设备用其链路状态数据中的LSA为自己补缺,因此在Link State Request 中,路由器必须参照对方路由器发送的DataBase Description中的LSA头部,一一清晰的指出自己LSDB中缺少对方LSDB中的哪些LSA,所以发送的Link State Request中全是LSA头部包含的字段。

在这里插入图片描述

Link State Uptate 发送详细的链路状态信息

当路由器接收到邻居发送过来的link state request信息之后,他就会按照该信息中指定的LSA封装一个Link State Update信息,将对方所求的各个LSA副本通过这个Link State Uptate信息通告给它。包含以下内容在这里插入图片描述

Link State Ack 确认LSA

当路由器接收到对方路由器发送来的link state update信息时,它需要对这个信息中包含的所有LSA进行一一确认,而确认LSA的方式也是使用各个LSA的头部来确认更新信息中包含的LSA,因此Link State ACK信息中携带的信息也就只有需要确认的 LSA头部。在这里插入图片描述

OSPF的度量值
介绍

OSPF使用cost(开销)作为路由的度量值,每一个激活了OSPF的接口,都会维护一个接口cost值。缺省的接口cost=100(Mbits/s)/接口带宽,所以接口带宽不同,接口的cost不同。

100Mbits/s是OSPF指定的缺省参考值,该值是可配置的。

OSPF路由的Cost=沿路出接口Cost之和,也就是路由从源网络到目的网络所经过所有路由器的出接口Cost总和
以下图为例:从R3去往10.0.1.1/32的这条路由Cost值=1+64
在这里插入图片描述

修改度量值案例

在实际应用中,不推荐修改OSPF参考带宽,建议根据接口带宽手动配置接口Cost。例如下图中R1、R2位于企业网中的汇聚层:
在这里插入图片描述
缺省状态下,对于R4而言,去往左上角10.0.1.1/32的数据包有红绿两条路由:在这里插入图片描述
而如果将R1与R2之间的Cost修改一下,即可让R4上去往10.0.1.1的路由变为1条。在这里插入图片描述
所以在规划流量路径时,推荐将汇聚层直连链路Cost值> 接入环所有链路Cost值之和,这样可以保证从接入层访问汇聚层设备时,只能二选一或多选一,而不会在R1与R2之间纠结。

OSPF最重要的三张表
OSPF邻居表

一个启用OSPF的路由器会首先发送hello信息,希望能够在这个接口所连接的网络上寻找到其他同样启用了OSPF的路由器
在这里插入图片描述
一台路由器在自己启用了OSPF的接口上接收到了其他路由器发送的OSPF hello信息,通过这个hello信息还判断出对方已接收到了自己发送的hello信息,那么就代表这两台路由器之间实现了双向通信,在双向通信的基础上,如果两台路由器还能满足某些条件(这个某些条件后面在讨论),它们之间才能相互交换LSA。

在这里插入图片描述
因此,OSPF需要先通过hello信息,在自己连接的网络中寻找能交换链路状态信息的邻居。为此,OSPF路由器会通过一张数据表来记录自己各个接口所连接的OSPF邻居设备,以及自己与该邻居设备之间的邻居状态。这张表就是OSPF邻居表。

OSPF邻居表使用命令 dislay ospf peer 查看

LSDB

通过LSA的泛洪,路由器会把收到的LSA汇总记录在LSDB中,然后在区域内邻居路由器之间彼此实现LSDB同步,最终可实现在同区域内的所有路由器上,都会形成同样的LSDB。此时,邻居路由器之间才形成真正的邻居关系。

虽然在路由器上查看LSDB时,看到的是一个数据表,但是由于路由器的链路状态数据库是各个路由器通告自己链路状态信息并最终汇总的结果。因此,这个表中那些关于网络,网络设备和链路的信息可以抽象成一张包含路径权重的有向图(权重表示,路由设备对于这个方向上这条路径的开销值)在这里插入图片描述
当一个区域中的每一个路由器都拥有了完全相同的地图之后,这些路由器只需要分别在本地以自己为根,用SPF算法计算出去往各个网络的最短距离,就可以向自己的路由表中添加OSPF路由了。

LSDB使用命令 dislay ospf lsdb 查看

OSPF路由表

OSPF路由表中包含destination 、Cost和NextHop等指导转发的信息。
在这里插入图片描述
路由器路由表通常称为全局路由表,并非所有的OSPF路由都可以放到路由器路由表

使用display OSPF routing 查看OSPF路由表

相关文档
OSPFv2 RFC2328文档
OSPFv3 RFC2740文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值