一、OSPF路由协议

ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(1)



开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。


两个版本:

IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)


在这里估计你要打三个问号了???什么是基于链路状态的内部网关协议,什么又是开放式最短路径树,为什么会出现OSPF呢?接下来就让我娓娓道来!


首先来展开第一个疑问:为什么会出现OSPF呢?

肯定就有人说,出现任何❤️技术都是为了解决某个领域的难题,不错,OSPF的出现正是解决日益庞大的网络如何选路并到达目的地的难题,因特网最开始出现的时候是局限在某个区域中,而随着因特网的普及,越来越多的地区和区域都加入进来,到如今更是与我们生活融为一体,不可分割。早期的时候可能就是几个人互联的网络,或者是一个小型的区域网络,而随着组织和企业的加入,一个组织越来越多的人机开始交互,日益庞大,导致网络互联的成本和难度日益提高,一个数据包的选路越来越复杂,靠人手工维护陷入困境(静态路由),相应的出现了自动学习的方法(动态路由)。


最开始的RIP协议,在早期解决了部分问题,但随着时间的推移,RIP的短板也越来凸显:

RIP:RIP是一种基于距离矢量算法的路由协议


  1. 收敛慢;

  2. 易产生路由环路;

  3. 可扩展性差,只支持最大16跳,大规模网络不合适;

  4. 不支持VLSM


OSPF能更好的解决RIP无法解决的问题

历史就是如此相似,混乱的时代总能产生英雄;而在网络江湖中,OSPF也应运而生。

OSPF就是为RIP的短板而生,集大成者得天下,而现在网络江湖中,OSPF已霸占主流;RIP也就退出历史潮流,OSPF在IGP中如鱼得水,那到底是如何做到的呢?请继续动动手指


二、OSPF关键要素


OSPF是基于链路状态的路由协议,那什么是链路状态呢?

RIP是距离矢量路由协议,是跳跃点来作为路由选路,并不构建全局的面,简单理解可以说RIP是点,OSPF是以点构建成面,也就是每个OSPF上都有一套全局的地图可供选路。

每个运行OSPF的路由器都有一张全局的地图库进行查询,RIP没法做到,那具体都有哪些因素影响呢?


OSPF关键要素--五种报文


OSPF是运行在网络层协议,IP协议号 89,其实在我理解OSPF是跨层封装,OSPF将协议包封装在IP包中,可以看如下图所示:


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(2)


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(3)


如下图所示:


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(4)

OSPF报文类型说明:

ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(5)

故OSPF是划分在IP层中,但是在整个TCP/IP协议簇中,很多协议其实并不能确定是属于个协议,有些是跨协议,有些协议在灰色地带,最主要的还是看具体解决什么问题,我可以说OSPF是在传输层,BGP属于应用层,所以不能很粗略的定义在哪一层,OSPF是基于IP的,BGP基于TCP的,报文封装在下层,而解决的问题是网络层问题,看计算机网络自顶向下方法一书可以看出,故不要太局限严格定义在哪一层的协议。


OSPF数据包首部逻辑结构:


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(6)

抓包结构:

ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(7)


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(8)


OSPF关键要素--三张表


OSPF协议的运行需要三张表,邻居表、链路状态数据库、OSPF路由表。如下以华为示例:

邻居表:display ospf peer

  1. 通过Hello报文形成邻居

  2. 用邻居机制来维持路由

  3. 邻居表存储双向通信的OSPF路由器列表信息


链路状态数据库(LSDB):display ospf peer

  1. 通过LSU报文更新LSDB

  2. 描述拓扑信息的LSA存储在LSDB中


路由表:display ospf routing

  1. OSPF计算出来的路由将会加载到路由表

  2. 路由优先级 域内>域间>域外 1/2 >NSS区域 1/2


三、OSPF协议原理

启动OSPF,发送hello包,建立邻居关系,泛洪LSA,每台路由器汇总LSA,形成LSDB,链路状态数据库生成带权有向图,每台运行OSPF路由器以自己为根节点计算最小路径树,最终形成每台路由器的路由表加载到路由器内存中。


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(9)


LSA泛洪:

运行链路状态路由协议的路由器都会进行链路状态公告LSA (Link State Advertisement)泛洪,LSA中包含了路由器已知的接口状态、接口IP地址、掩码、开销、网络类型、宣告路由ID和等信息。


通俗点讲就是LSA把路由器邻居相互之间的路由信息和拓扑信息进行握手交换。


建立LSDB:

收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database)。


通俗点讲就是每台路由器都会收到网络中其他的路由器发送过来的LSA信息,这些所有的LSA信息构成了LSDB。这里需要注意的是当网络稳定后,网络中的所有设备应该是有相同的LSDB的。


建立最短路径树:

运行OSPF协议的路由器在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。


路由计算:

通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。


OSPF从最开始的邻居建立到最终路由表的加载是有一个过程的,整个过程分7个状态,分别都是不同的OSPF数据报文交互的结果。如下图:


ospf路由协议原理图(一剑开天门系列-OSPF路由协议基础)(10)


关于OSPF协议状态机下文讲结合实际抓包和图文着重分解。

更多文章请关注网络小斐


,