简介:

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。OSPF支持负载均衡和基于服务类型的选路,也支持多种路由形式,如特定主机路由和子网路由等。OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。

主要知识点:

四种路由类型:DR、BDR、ABR、ASBR

五大区域:骨干区域、标准区域、末梢区域、完全末梢区域、非存末梢区域
五大数据包类型:hello、DBD、LSR、LSU(LSA)、LSAck
六种LSA:LSA1、LSA2、LSA3、LSA4、LSA5、LSA7
七种状态:Down状态、Init状态、2-Way状态、ExStart状态、Exchange状态、Loading状态、Full状态

内部网关协议和外部网关协议:

在了解OSPF原理之前我们先需要知道一些相关的概念:
(1)自治系统(AS)
(2)内部网关协议(IGP),如:RIP、OSPF、ISIS协议等。
(3)外部网关协议(EGP),如:BGP协议。

OSPF工作过程:

首先路由器会互相建立邻接关系,建立邻接关系后会互相学习链路状态信息,在学习链路状态信息后会生成链路状态数据库,然后会通过Dijkstra算法计算出最短路径树,将所有最短路径整合成路由表。

OSPF中的四种路由:

DR(Designated Router):指定路由器,OSPF协议启动后开始选举而来 。是为了解决LSA在一个Area里浪费很大的带宽而设计的,当一个路由器端口发生了更改或损坏,此时这个路由器会直接告知DR,而DR会来告知区域内所有路由。

BDR(Back-up Designated Router):备份指定路由器,同样是由OSPF启动后选举而来。它的作用就是在DR无法正常工作时代替DR的工作。

ABR(Area Border Routers):区域边界路由器,连接不同OSPF区域。ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。

ASBR(Autonomous System Boundary Router):自治系统边界路由器,位于OSPF和非OSPF网络之间。 在两个AS之间一个路由器,主要用来传送两个自治系统间的路由的。

OSPF动态路由协议(理论篇)理论知识精讲_第1张图片

上面是简单的示意图,可以看到ABR是不同区域间(Area)的边界路由器,ASBR是不同自治系统(AS)间的边界路由器。而DR和BDR是每个网段间的路由器,我只标了Area 1区域网段的DR和BDR,其实每个网段都有根据具体情况选出自己的DR和BDR。注意:一个路由器可以同时担任多个角色,可以同时是DR、ABR、ASBR。

DR与BDR的选举方法:

在讲选举方法前我们需要,先了解一下Router ID。Router ID是OSPF区域内唯一标识路由器的IP地址。Router ID一般选取路由器loopback接口上数值最高的IP地址;如果没有loopback接口,就在物理接口中选取IP地址最高的;或者我们也可以使用router-id命令直接指定Router ID。
(1)自动选举
网段上Router ID最大的路由器将被选举为DR,第二大的将被选举为BDR。Router ID就是IP地址,一般IP地址的格式是aa.bb.cc.dd,我们比较大小的话一般是从aa比起,如果不一样大,直接选择大的;如果一样大,那么就继续比较bb、cc、dd直到比较出大小,选择大的。

(2)手工选择
我们可以通过设置路由器优先级,来设置DR、BDR。优先级范围是0~255,数值越大优先级越高,一般默认为1。如果优先级相同,则任需要比较Router ID。如果路由器的优先级被设置为0,它将不参与DR和BDR的选举。

注意:一般网段间的DR和BDR选举完毕后,如果网段内再添加新的路由器Router ID比原有的DR和BDR更大,它也不会替代原有的DR和BDR。而OSPF系统启动后,若40s内没有新设备接入就会开始选举。所以一般在现实环境中,第一个配置的路由器就会自动选举为DR,第二个为BDR。

(3)OSPF的组播地址
224.0.0.5
224.0.0.6

(4)OSPF的度量值COST

COST=10的8次方/BW(带宽)

(5)OSPF数据包
承载在IP数据包内,使用协议号为89

OSPF区域:

为了适应大型的网络,OSPF在AS内划分多个区域。每个OSPF路由器只维护所在区域的完整链路状态信息。每个区域都有一个区域ID,可以表示成一个十进制数字,也可以表示成一个IP。每个区域就如同一个独立的网络,该区域的OSPF路由器只保存该区域的链路状态。每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量都不会过大。

骨干区域(Area0):骨干区域必须连接所有的非骨干区域,而且骨干区域不可分割,有且只有一个,一般情况下,骨干区域内没有终端用户。 其它区域都为非骨干区域,非骨干区域分为以下四类。
标准区域:非骨干区域一般根据实际情况而划分,必须连接到骨干区域(不规则区域也需通过tunnel或virtual-link连接到骨干区域)。一般情况下,费骨干区域主要连接终端用户和资源。
末梢区域(stub Area):存末梢区域是不接受自治系统以外的路由信息的区域。如果需要自治系统以外的路由,它使用默认路由0.0.0.0。
完全末梢区域(Totally stubby Area):它不接受外部自治系统的路由以及自治系统内其他区域的路由总结。需要发送到区域外的报文则使用默认路由:0.0.0.0。完全末梢区域是思科自己定义的。
非存末梢区域(NSAA): 它类似于存末梢区域,但是允许接收以LSA Type 7发送的外部路由信息,并且要把LSA Type 7转换成LSA Type 5。

OSPF的数据包类型:

(1)Hello包:10秒发送一次,死亡时间40s,固定是4倍关系,也可以修改。用于发现和维持邻居关系,选举DR和BDR。
(2)数据库描述包(DBD:Database Description ):仅仅是一个对本地数据库的概念性叙述,供路由器核对数据库是否同步。
(3)链路状态请求包(LSR:Link-State Request ):请求链路状态,在数据库同步过程中使用,路由器在收到包含新信息的DBD后发送,用于请求更详细的信息。
(4)链路状态更新包(LSU:Link-State Update ):链路状态更新,LSU包括几种类型的LSA,LSU负责泛洪LSA,和相应LSR。LSA只会发送给之前以LSR请求的LSA的直连邻居,进行泛洪的时候,邻居路由负责把收到的LSA信息重新封装在新的LSU中。
(5)链路状态确认包(LSACK):链路状态确认,路由器必须对每个收到的LSA进行LSACK确认,但可以用一个LSACK确认多个LSA。

OSPF的状态:

(1)Down 状态
(2)Init 状态:发送了Hello包
(3)Two-way 状态:收到对方回复的Hello包且Hello包中包括自己的router-id
(4)Exstart 状态:First DBD确认主从关系,router-id大的为主,先发包
(5)Exchange 状态:交互DBD 相互学习
(6)Loading 状态:LSR与LSU的交互过程
(7)Full 状态:交互完成

OSPF启动的第一阶段是使用Hello报文建立双向通信的过程:

OSPF动态路由协议(理论篇)理论知识精讲_第2张图片

OSPF启动的第二个阶段是建立完全邻接关系:

OSPF动态路由协议(理论篇)理论知识精讲_第3张图片

注意:在Two-Way状态下会选出两个Router ID最大的路由器,但不会确定DR和BDR。DR和BDR是在ExStart状态下确定的。

OSPF将网络划分为四种类型:

(1)点到点网络(Point-to-Point)
(2)广播多路访问网络(Broadcast MultiAccess,BMA)
(3)非广播多路访问网络(None Broadcast MultiAccess,NBMA)
(4)点到多点网络(Point-to-Multipoint)

OSPF的六种LSA:

LSA Type 1:LSA 1是由区域内的路由器发出的LSA,类型为路由器LSA(router LSA)。描述本区域路由器链路到该区域的状态和代价(cost)。一个边界路由器可能产生多个LSA 1。

LSA Type 2:由区域内DR发出,类型为网络LSA(network LSA)。含有连接某个区域路由器的所有链路状态和代价信息。只有DR可以监测该信息。

LSA Type 3:由ABR发出,类型为网络汇总LSA(summary LSA)。含有ABR与本地内部路由器连接信息,可以描述本区域到主干区域的链路信息。它通常汇总缺省路由而不是传送汇总的OSPF信息给其他网络。

LSA Type 4:由ABR发出,类型为ASBR汇总LSA(Summary LSA)。由主干区域发送到其他ABR, 含有ASBR的链路信息,与LSA 3的区别在于LSA 4描述到OSPF网络的外部路由,而LSA 3则描述区域内路由。

LSA Type 5:由ASBR发出,类型为AS外部LSA(AS External LSA。)含有关于自治域外的链路信息。除了末梢区域和完全末梢区域,LSA Type 5在整个网络中发送。

LSA Type 7:由NSSA区域内的ASBR发出,类型为NSSA外部LSA(Not-So-Stubby LSA)。含有关于NSSA区域连接的外部路由信息。LSA 7可以转换为LSA 5。

OSPF的三种通信量:

域内通信量(Intra-Area Traffic)

单个区域内的路由器之间交换数据包构成的通信量。

域间通信量(Intra-Area Traffic)

不同区域的路由器之间交换数据包构成的通信量。

外部通信量(External Traffic)

OSPF域内的路由器与OSPF区域外或另一个自治系统内的路由器之间交换数据包构成的通信量。

OSPF常用检查命令:

show ip route                                                     //查看路由表信息(直连/学习)

show ip route ospf                                            //只查看OSPF学习到的路由

show ip protocol                                              //查看OSPF协议配置信息

show ip ospf                                                     //查看OSPF是如何配置的以及ABR的信息

show ip ospf database                                   //查看LSDB内的所有LSA数据信息

show ip ospf interface                                    //查看接口上OSPF配置的信息

show ip ospf neighbor                                   //查看OSPF邻居和邻接的状态

show ip ospf neighbor detail                       //查看OSPF邻居的详细信息(包括DR/BDR)

show ip ospf adj                                            //查看路由器“邻接”的整个过程

show ip ospf packet                                     //查看每个OSPF数据包的信息

clear ip route                                                //清空路由表

(具体的实验演示,我会写在下一篇博客)