1.1.2 OSPF的基本概念

链路状态路由协议OSPF

 

特点

 

我们来看一下OSPF的几个特点:

 

  • 路由信息传递与路由计算分离。
  • 基于SPF算法。
  • 以“累计链路开销”作为选路参考值。

 

 

第一个,对于路由信息的传递和路由计算,它是分离的。

 

我首先先去传递路由,等待全网的路由都同步了之后,大家所有的路由信息都相同了。那么这个时候,我就会再开始进行计算。

 

第二个,计算的时候使用的是SPF算法去计算生成树的。

 

第三个,以“累计链路开销”。

 

这里的累计链路开销就是我们的带宽作为选路的参考值。

 

工作过程

 

具体到每一个工作过程:

 

 

首先,第一步是关于邻居的建立

 

对于邻居的建立,两个路由器之间发送一个Hello报文,这个Hello报文就相当于自我的一个介绍,它会介绍我接口的IP地址,接口的区域,OSPF的进程号,以及Router ID等,会介绍一些路由器中OSPF的参数和路由器的链路信息等。

 

第二步,同步链路状态数据库

 

这个链路状态数据库主要是用于存放我们的路由信息,这里要保证本区域中所有链路状态数据库都相同,等于本区域的其他路由器都共享了我的路由信息。

 

第三,大家的信息都完全一致相同了之后,我才会开始取计算我最优的路径

 

最优路径我们使用的是SPF算法去计算的。

 

OSPF的工作原理

 

接下来我们看一下OSPF的工作原理:

 

Router ID

 

用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个Router ID。

 

 

首先第一点是邻居建立的过程,在了解邻居建立的过程中,我们需要去了解一些参数:

 

第一个参数是关于Router ID,Router ID是用于自治系统内部,唯一标识一台运行OSPF的路由器。

 

每台运行OSPF的路由器,都有一个Router ID,此时,对于Router ID的配置,我们后面会讲解。

 

对于Router ID,我们可以去手工配置,系统进程下只要去指定router ID,这里Router ID的格式就是一个IP地址的格式。

 

eg:我们可以指定一个IP地址是1.1.1.1。

 

当我指定了1.1.1.1,对于我这个路由器其实并不同于在某一个接口下去配置1.1.1.1,我们可以理解为router-id其实就是一个名称。

 

但是我们可以配置loopback口和Router-ID相同,这是可以的。在现网环境中、实际项目中我们也是这么做的。

 

但是理论上来说我们对于这个路由器没有配置任何一个IP地址作为1.1.1.1,也是完全可以的,只是在实际项目中,我们最好把loopback和router-id都配置成相同的,这样更有效的去标识一个路由器。

 

有的人会说,我配置路由器的时候我没有手工指定router-id,但是我去查看路由器的时候我还是能发现这个router-id是一个IP地址,这时就是有一个选举的过程的:

 

  • 首先第一点,我会优选我在路由器上手工指定的Router-ID。
  • 但是如果管理者没有配置手工指定的Router-ID,我会选择loopback口中IP地址最大的一个来作为Router-ID。
  • 如果我们IP地址的loopback都没有配置呢,我就会选择物理接口IP地址最大的作为Router-ID。

 

但是这个时候会发现选举规则并不一样,我现在明明手工指定了Router-ID,为什么我最后去查看的时候我物理接口的IP地址作为了Router-ID呢,这里主要是做了一个稳定大于一切的原则去体现的

 

eg:对于OSPF来说,现在管理者手工配置的时候,直接就配置了一个OSPF,然后去宣告了我的物理接口IP地址,可能过了半个小时或者1~2天,突然管理员想到了没有去手工指定Router-ID,这个时候如果再去手工指定的Router-ID,并不能去抢占我现在物理接口的Router-ID。

 

这个主要是做了一个稳定大于一切的原则。我在最开始配置的时候,只是去宣告了物理接口的IP地址,没有去配置手工指定的Router-ID,然后路由器就会开始去选举了,选举的时候没有手工指定的Router-ID,也没有loopback口作为Router-ID,那么我直接就使用物理的IP地址作为Router-ID。

但是可能过了1~2天,或者十几分钟,管理员想起来了,我再去手工指定一个Router-ID之后,这个Router-ID是默认不生效的,也就不能抢占原来Router-ID的地位。

 

因为要保证稳定性。

 

假如说现在两个人之间已经建立起了邻居关系,我这个路由器已经认定了你的接口IP地址作为我的邻居,这个时候如果手工去指定的话,我们可以看到图中现在连接了3个邻居关系,这三个邻居关系就可能会发生变化,路由的一些响应的数据就要更改,那么我在这里对于我们路由的稳定性不是很好。所以就作了一个稳定大于一切的原则。

 

当然有的时候可能会说我就是想要我手工指定的Router-ID作为路由器的Router-ID不可以吗?

 

我们可以在用户视图下使用reset ospf process,这个是重启OSPF进程的意思,使用这个命令把整个OSPF重启一下,或者使用reboot把整个路由器重启一下都可以。

 

这个是Router-ID的一个点。

 

Hello报文

 

第二个,关于我们知道如何去标识我们的邻居了,我们来看一下如何去发现和建立邻居。

 

  • Hello报文的作用:
    • 邻居发现:自动发现邻居路由器。
    • 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
    • 邻居保持:通过Keepalive机制,检测邻居运行状态。

 

这里主要用到的是一个Hello报文:

 

Hello报文的作用主要是邻居发现:

 

这里可以自动的去发现邻居和路由器。

 

第二个是邻居的建立:

 

可以完成Hello报文中的参数协商,来去建立邻居关系。

 

第三点就是邻居保持

 

通过keepalive机制来检查邻居运行的状态。

 

OSPF邻居建立过程

 

这里我们针对OSPF,我们发现这个时候关于邻居的建立有两个名词:

 

  • 第一个是邻居建立的过程。
  • 第二个是邻接建立的过程,即邻接关系。

 

它们有什么不一致呢?

 

邻居关系主要是我从Down状态到接受到对端的Hello报文,知道我的邻居具体的信息,这个时候是2-way状态。

 

知道我的邻居的具体信息,这个过程我们就称为邻居建立的过程。

 

邻接建立的过程就是往后了,我们知道邻居的Router-id,接口的IP地址、区域ID等,这只是知道我们的邻居的明细。到后续还需要去学习我们的路由信息。学习完路由信息之后,整体的路由同步之后才是一个邻接关系的建立完成。

 

我们要注意一点,OSPF的邻居建立并不是代表我们的邻接关系已经建立了,但是反过来我们知道,OSPF的邻接关系建立了,路由已经学习到了,那么就说明邻居关系已经建立完成了。

 

下面我们可以看到Hello报文在邻居建立过程中的一个顺序:

 

 

我们来看一下OSPF邻居关系具体过程:

 

  • 首先RTA和RTB之间,对于RTA和RTB刚启动OSPF的时候,它的状态是一个Down的状态,然后由RTA去发送一个Hello报文。

 

此时的Hello报文只有我自己的Router-ID,没有邻居的Router-ID是置为null的

 

  • 而RTB收到这个Hello报文则进入init状态,同样的RTB也是向对端去发送我的Hello报文,RTA收到之后就会进入Init状态。

 

  • 收到了对方的Hello报文之后就会进入参数的协商,去查看我的对端和本端在这里一些相应的参数是不是正确的。

 

比如:

我的认证的参数,以及我的Router-id有没有冲突,我的Hello报文的间隔时间以及死亡间隔时间等。

 

  • 很多参数去协商发现协商成功之后,我就会给对方去回复一个Hello报文,这里我就会带上邻居的Router-id,证明我认可你这个邻居了,收到了对方发过来的第二次Hello报文之后,就会进入一个2-way的状态,在2-way状态就说明邻居状态建立过程成功了。

 

手动建立

 

  • OSPF支持单播方式建立邻居关系。
  • 对于不支持组播的网络可以通过手动配置实现邻居的发现和维护。

 

 

这个时候对于我们的OSPF来说我们有两种方式去建立邻居:

 

  • 第一种使我们刚刚我们所说的,利用组播去建立邻居关系,它的组播是由224.0.0.5和224.0.0.6。

 

为什么需要有两个组播地址呢?

 

这里在最后一块区域讲解DR和BDR的时候我们会讲解,这里我们先记住OSPF支持组播的方式建立邻居关系对于组播来说是【.5】和【.6】。

 

  • 另外,由于我们有一些网络类型是不支持组播的,以及不支持广播的,我们就可以通过单播的方式去建立邻居,但是如果要通过单播的方式的话,就需要去进行一个手工的配置。

 

我们可以看到在RTA上,OSPF进程下指定一个邻居2.2.2.2,即指定对端的Router-id。在这里去建立邻居关系。

 

链路状态信息

 

讲完了邻居关系建立过程,邻居建立成功之后我们就可以开始去协商我们的链路状态信息了。

 

对于链路状态信息在OSPF中主要使用4个维度去描述:

 

 

 

 

  • 链路的类型。
  • 接口IP地址及掩码。
  • 链路上所连接的邻居路由器。
  • 链路的宽带(开销)。

 

链路信息主要包括:

 

  • 第一个是关于链路的类型,针对我们的网络有不同的类型。

 

eg:以太网是一种链路类型、PPP链路也是一种链路类型、帧中继链路也是另外一种链路类型了。对于不同的链路类型有对应不同的网络类型来描述。

 

  • 第二点就是接口IP地址和掩码。

 

这个就很好理解了,我要去描述路由的话,我肯定要描述IP地址和掩码。

 

  • 第三点,链路上所连接的邻居路由器。

 

这里可能会标识我连接邻居路由器的接口IP地址,以及邻居路由器的Router-id来去标识我的邻居。

 

这里可以看到,如果我们要去描述邻居路由器的话,相当于就是一个拓扑的信息。

 

  • 第四点就是关于链路的带宽。

 

可以看到对于OSPF它想去传递路由信息的话,会从以上4个角度去描述,在OSPF我们把它称之为链路状态信息,英文的缩写我们叫做LSA。

 

这个就称之为我们的链路状态信息,它在这里相当于OSPF的路由信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值