HCIA 动态路由与OSPF原理

一、前言

前面我们逐步学习了交换机原理、路由器原理、ARP协议、静态路由,简单来说交换机负责MAC地址这一层的通信,路由器负责IP地址这一层的通信,而ARP协议则是帮助交换机生成MAC地址表,帮助PC机生成ARP表,如此PC机的数据就可以无障碍到达路由器,接着路由器依据其路由表将数据发往对应IP所在的端口,依次传递实现跨网段的通信。

另外要补充说明下,之前说过路由器的端口可以像独立PC一样是独立工作的,这同时也体现在路由器的端口也有ARP表的,因为它除了要接收PC发来的数据,还需要将这个数据传递给另一个PC,所以也需要使用ARP协议在另一个网段中“找到”目标PC

我们在路由器上手动配置的路由条目就是静态路由,但仅使用静态路由肯定是有问题的,不然也不会需要研究动态路由了。

二、静态路由的局限

跟交换机组成的网络一样,当路由器组成的网络越来越庞大时,无论是管理还是故障处理都比较麻烦,考虑下面这个简单的网络,只需要配置2条路由就可以搞定。

 

 

 

但如果我们像下面这样再加一台路由,只是加了1台路由器,就需要配置6条路由了。

 

 

 

再考虑另一个场景,像下图这样,四台路由做交叉互备,这是比较常见的一种做法。

 

 

AR1故障时,AR2还可以通过AR3进行通信,但数据包不可能即走AR2->AR1的链路又走AR2->AR3的链路,所以配置路由时只能使其中一个路径有效。假设现在AR1故障需要启用AR2->AR3的路径,则管理员需要登录AR2做配置,这个效率肯定是不满足生产要求的,所以动态生成路由表是必须的。

三、动态路由

所谓静态路由就是我们人工手动配置的路由条目,那么动态路由自然就是自动生成的了,与交换机的STP有点类似但更复杂点。

OSPF就是我们常用的动态路由协议,全名叫Open Shortest Path First(开放式最短路径优先),是一个开放的,基于链路状态,使用最短路径优先算法,工作在内部网关的动态路由协议。这些名词都有其特别的含义,下面详细说下。

开放:

开放的含义是其算法是公开的,大家都可以用,而且大家执行一样的标准就可以互相通信了,毕竟生产路由器的厂家千千万,大家执行一个标准才能够互相通信。

链路状态:

其含义是路由器之间交换链路状态信息(Link State)而不是直接交互路由信息。

【交互路由信息】:举例来说,路由器启动时可以获取到的就只是与自己直连的路由信息,它可以将这个信息传递给自己的直连路由,像下图这样,它不仅告知相邻路由器自己在哪里,还告知相邻路由器可以通过自己到达那些路由器。这样通过层层传递,最终网络中所有路由器都知道该如何到达任意路由器(准确来说是到达路由器所接入的网段)。

 

 

 

【交互链路状态】:路由器启动时还是获取到与自己直连的路由信息,像下图这样,大家各自生成一个链路状态表。这个链路状态表除了记录下各端口都连了那些路由器(准确来说是网段),还包括了路径开销(COST),COST值越小则路径越优。

 

 

 

路由器生成链路状态表后就传递给自己的“邻居”,邻居们口口相传确保其他路由器都能收到。这样,网络中的所有路由器也就能够收集到其他路由器的“链路状态”。

最短路径优先算法:

当网络中的所有路由器都得到了其他路由器的链路状态,他们会运行一个叫做“最短路径优先Shortest Path FirstSPF)”的算法,具体咋算的不知道,反正它能得到一个最佳的路由结果。由于所有路由器都执行同一个算法,所以它们可以各自得到最适合自己又不互相冲突的路由表(比如环网)。

内部网关:

其隐含意思是还另外有“外部网关协议”,确实是有的,OSPF仅适用于企业内部的组网,如果是连接不同企业的路由会有其他的路由协议,比如BGP协议。

 

四、OSPF的三张表

OSPF中有三张重要的表,包括:OSPF邻居表、LSDB表、OSPF路由表(非路由器路由表)。一开始网络中的路由器先通过hello报文来“发现”与自己相邻的其他路由器并生成“邻居表”,有了邻居后便将自己所知晓的链路状态通过LSA报文传递给邻居,邻居们口口相传便将大家的链路状态传递到全网最终得到LSDB表,最后通过SPF算法计算出OSPF路由表。

OSPFrouter-id

在建立各种表之前,我们需要先对网络中的路由器进行编号,像下图这样,采用x.x.x.x这样的格式。

 

 

 

 

HELLO报文与组播

路由器的OSPF协议启动后,会向直连的其他路由器发HELLO报文,告知对方自己的存在。但问题是路由器并不知道与自己连接在一起的路由器IP啊,这可没法通信。所以路由器HELLO报文的目的地址是224.0.0.5这样的组播地址,这样对OSPF感兴趣的路由器会监听这个组播地址,也就能够收到HELLO报文。

 

 

 

HELLO报文中有很多内容,但最重要的还是发报文路由器的route-id,以及报文本身自带的非常重要的内容,即报文中的源IP

通过向直连的路由器发送HELLO报文,网络中的路由器马上就知道了以下信息:

1)隔壁路由器的route-id

2)隔壁路由器的IP

像下图这样:

 

 

 

邻居表

通过前面的直连路由器信息很容易就能得到下图这样的邻居表,其标识了当前路由器对应端口连接的路由器route-id和相应IP地址(当然实际的邻居表信息挺多的,这里只说下重点)。

 

 

 

LAS报文与LSDB

有了邻居表以后,路由器会将自己知道的链路状态(链路信息+链路开销)通过组播的方式发给邻居。这里隐含的意思是,一开始路由器只会发自己直连的信息,但它获取到邻居发来的链路信息后会将这个链路信息记录并转发给其他邻居,具体来说就是通过一种叫LSA的报文来同步这些信息并使得网络中所有路由器都能得到一张完全一致的LSDB表。LSA报文的工作机制以及LSDB生成的过程这里先不做讨论。

通过命令display ospf lsdb”可以查看路由器上的LSDB,我们知道路由器可以根据这个LSDB表生成OSPF路由即可,并且网络中的所有路由器都有完全一样的这张表。

 

 

 

SPF算法与OSPF路由

有了LSDB表后,各路由器再根据SPF算法来计算出适合自己的OSPF路由,可以通过命令“display ospf routing”来查看OSPF路由表。SPF算法这里也先不做讨论。

 

 

 

最终路由信息

最后我们查询路由表时可以看到OSPF生产的路由信息。

 

 

 

五、回顾

本篇只是简要讲述了一下OSPF的原理,没有办法深入讲,因为每一个点都可以拿出来长篇大论,所以本篇只是做概念上的讲述帮助理解OSPF原理。

同时也没有讲具体的配置,这个大家可以自己去百度百度,比较简单。

posted @ 2022-11-02 20:24  布兰姥爷  阅读(88)  评论(0编辑  收藏  举报