OSPF详解和配置

OSPF工作原理

OSPF叫做开放式最短路径优先,属于动态路由协议。它是使用链路状态的算法,用于计算最短路径树,以Cost开销作为链路的度量值,和RIP所使用的跳数值作为度量值不同。

OSPF支持变长子网掩码的使用,支持路由的汇聚功能,OSPF 的收敛速度比 RIP 的快许多。OSPF 能够非常快速的适应网络的变化,在网络变化时也是采取的出发更新,并且在更新只是只发送更新网络的数据内容,而不像 RIP 会将整张路由表都发送过去,同时定期更新的频次很低,相较于 RIP 的 30s 发送一次节约了很多的带宽。

OSPF 支持认证功能,而 RIP 到了 Version2 才有此功能,提供了明文,MD5 加密,不开启的技术支持。
OSPF 已经发布了三个版本,Version 2 对 Version 1 做了一定的优化,Version 2 适用于 IPv4,Version 3 适用于 IPv6。

在这里插入图片描述

OSPF工作流程

1.首先建立邻接关系表
只有建立好了邻接关系表才能在后期做到信息共享,扩充路由表中的信息。
(1)设备在启动OSPF进程之后会向所有的开启OSPF端口发送Hello包,以确定他们的链路是否存在邻居。此时链路的状态从Down State转变为Attempt State。
(2)对端路由器在接收到Hello数据包之后,检查其中的字段,若是neighbor中并没有包含自己的Router ID,此时链路的状态从Attempt转变为Init State,并把对方的Router ID、Area ID、优先级、子网掩码、Hello包时间间隔等等一些配置信息记录下来,同时将自己的信息放入Hello包中发送给源路由。
(3)在源路由收到对端路由的Hello包之后,在Neighbor字段中发现自己的Router ID便知道刚刚对端已经收到自己Hello包,就像消息确认一般。此时链路的状态从Init State转变成Two-ways State。在消息确认中两台路由器的Hello间隔、Dead间隔、网络类型这些参数必须一致,若是两台路由器便建立好了邻居关系

进入该状态的路由便可开始DR(指派路由,负责使用该变化信息更新其他路由的主设备)的选举了,同时Hello报文是周期性的发送,用于实时告知邻居状态,若是在一段时间内没有收到Hello数据包,或者Hello数据包中无自己的router id,链路状态会从Two-ways state退回到Init state。

(4)建立好邻居关系后便创建邻居表来记录邻居关系,同时开始DR和BDR的选举,根据他们的优先级、router id来选举。DR的选举也标志着链路的状态从Two-ways state转变成Exstart state。选举的完成也标志着该状态的结束。

虽然DR的选举完成,也就标志着第一阶段的邻居关系的协商结束了。

邻居关系(neighbor):任意两台启用了 OSPF 的路由器,相互的 Hello 数据包协商,在信息匹配之后都能够形成邻居关系。

邻接关系(Adjacency):启用了 OSPF 的路由器与 DR 或者 BDR 形成的关系叫做邻接关系邻居之间需要同步链路状态数据库,那么它们之间需要建立邻接关系。建立了邻接关系的路由器,那么它们的链路状态数据库一定是同步的。 在广播型链路中需要通过选举来确定 DR 与 BDR,然后形成邻接关系。而在点到点的链路中,直接形成邻接关系不会选举。

2.交换链路状态通告,数据同步
每台运行着 OSPF 的路由器都会维持一个链路状态数据库。在建立了邻接关系之后,路由器会相互发送链路状态通告(LSA,Link state Advertisement),通过 DBD 数据包(Database Description,有时也称为 DD)描述自己所知道的直连链路的状态、开销等等的信息;通过 LSR 数据包(Link state Request)请求邻接路由发送链路状态更新包,LSU 数据包(Link state update:链路状态更新数据包)用于回应 LSR 而发送的更新数据包,在收到了 LSU 数据包之后会向对方发送 LSAck 数据包(Link state Acknowledgment)用于确认对方所发送的 LSU 数据包。

路由器在收到 LSA 后会以通过 224.0.0.5 的组播地址泛洪到邻居路由上。收到 LSA 的邻接路由立即将 LSA 泛洪到其他直接连接的邻居,直到区域中的所有路由器收到所有 LSA。

当该区域中所有的路由设备的链路状态数据库都同步完成,链路会经历 Exchange State --> Loading State --> Full State 这样的三个状态。

3.路由的生成

一旦路由器收到所有 LSA 并建立好了其本机的链路状态数据库,也就代表这它拥有了所有的路由器及其状态的信息。

OSPF 会根据收到的 LSA 信息构建出拓扑表(LSDB),由此数据库负责维护网络的拓扑信息。

此时的 OSPF 就会使用 Dijkstra 算法,也就是 SPF 最短路劲优先算法,创建一个 SPF 树。(在交换机环路的实验中我们便讨论了树形结构才不会导致环路的产生,所以会生成一颗树)

每个路由器都有自己生成的一棵树,都是以自己为根节点生成的一棵树,也就代表都是站在自己的角度,根据每条链路的带宽来算出到达每个节点的最短路径。最后将计算得出的每条最短路劲插入路由表中。

这样路由器根据路由表中提供的信息,能够将数据从最佳的接口转发出去。

在整个过程中我们可以得到 OSFP 一共会建立三张表,使用五种数据包,链路有八种状态的变化。

邻居表:记录所有已知邻居的数据库

拓扑表:记录了同区域中所有路由器以及相关链路的信息

路由表:记录路由信息,由SPF算出。

Hello包:与邻居建立关系,并且维护这个关系,使用组播地址224.0.0.5
DBD包:描述本地链路状态
LSR包:请求相邻路由器发送其数据库中链路状态的具体信息
LSU包:向邻居发送链路状态的条目及信息
LSAck包:向被请求方确认收到数据包

八种状态:Down state、Init state、 Attempt state、Two-ways state、Exstart state、 Exchange state、Loading state、Full state

路由角色:DR(指派路由)、BDR(后备指派路由)、DROther(非指定路由)。在一个区域只有一个DR和BDR。

DR 主要用于与其他路由建立邻接关系,同时所有的邻居或者邻接的路由都会将 LSA 的信息发送到 DR 上,由 DR 作为 LSA 信息的集中点、汇总点,作为 LSDB 广播的发送者,为网络中的其他路由器规划拓扑,并确保区域中所有的 Router 的链路状态数据库保持同步。

BDR 作为 DR 的备选者,通过计时器检测 DR 的更新活动,能在 DR 挂掉之后能够充当 DR 角色。

DROther 与 DR 和 BDR 形成邻接关系,与其他 DROther 角色只发送 HELLO 数据包。这样避免了每台路由器都与其他路由器建立邻居关系,而产生额外的开销。

通常以优先级来选举 DR,优先级高者作为 DR(优先级的取值范围是 0~255),若是优先级为 0 则不参与选举,优先级相同则以 Router ID 做为依据来选举 DR,所有端口的 IP 地址中最大的一个作为 Router ID。若是路由器有回环接口则优先选择,因为回环接口较为稳定。
注意:路由器的优先级会影响选举的过程,但是一旦确定之后不会因为新增路由器的优先级高而重新选举或者强制更换已经有效的 DR 与 BDR。

为了使得 OSPF 更加的高效并且可扩展,OSPF 提出了区域的概念,多个区域支持分层的路由与分层的网络结构。

每个网络都必须至少有一个区域,并且至少有一个骨干区域(backbone area),区域编号为 0。

  • 网络只有一个区域,该区域便是骨干区域。
  • 网络中有多个区域,此方式适用于分层结构的网络,在多区域中必须有一个,并且仅有一个骨干区域(backbone
    area),同时每个非骨干区域都必须(nonbackbone area)与骨干区域相连。

处于不同区域之间的临界路由称之为区域边界路由(ABR,Area Border Router)

当一个自治系统很大的时候,只有一个区域的话,每台路由器的链路状态数据库(Link state Database,LSDB)将会非常的庞大,而这些信息都交给 SPF 算法去计算,将会消耗巨大的 CPU 资源,而且网络稳定之后若是其中某台路由的信息变化了(信息变化表示如优先级、RID、链路带宽等等的这些信息改变),便需要更新 LSDB 并重新启用 SPF 算法全部重新计算一次,这样将非常的费时与浪费 CPU 资源。
注意:若是简单的网络拓扑更改只会之间更新路由表,不会重新启用 SPF 计算。

划分区域的话,便将一个大的区域划分为若干个小的区域,这样一个小的区域中路由数量就不会很多,数量的减少在启用 SPF 的时候对 CPU 的压力就不会这么大。路由的 SPF 计算只会计算区域内部的路径,而区域边界路由传给其他路由的信息并不会这么细致,所以区域内的信息更改对其他区域的路由表不会有太大的影响,只是区域内部的重新计算,这样 CPU 也不会有太大的压力。

总的来说 OSPF 的划分区域有这样的一些优势:

  • 路由表减小:区域之间的网络地址可以路由汇总,这样是的路由表的条目不会过大。
  • 链路状态更新,系统资源开销减少:将 SPF 所占用的内存与 CPU 都降低。
  • SPF 计算的频次减少:LSA 的泛洪会终止与区域的边界,这样降低路由更新所带来的影响,其他区的路由不必重新计算。

OSPF基本配置

拓扑图:
在这里插入图片描述
配置端口ip:

r1

r1(config)#inter e0/0
r1(config-if)#ip address 202.202.1.1 255.255.255.0
r1(config-if)#no shutdown
r1(config-if)#exit
r1(config)#inter lo 0
r1(config-if)#ip address 202.201.1.1 255.255.255.0
r1(config-if)#no shutdown

r2

r2(config)#inter e0/0
r2(config-if)#ip address 202.202.1.2 255.255.255.0
r2(config-if)#no shutdown
r2(config)#inter e0/1
r2(config-if)#ip address 202.204.1.1 255.255.255.0
r2(config-if)#no shutdown
r2(config-if)#exit

r3

r3(config)#inter e0/0
r3(config-if)#ip address 202.204.1.2 255.255.255.0
r3(config-if)#no shutdown
r3(config)#inter lo 0
r3(config-if)#ip addre
r3(config-if)#ip address 192.168.1.1 255.255.255.0
r3(config-if)#no shut

r4

r4(config)#inter e0/0
r4(config-if)#ip address 202.204.1.3 255.255.255.0
r4(config-if)#no shutdown
r4(config-if)#exit
r4(config)#inter lo 0
r4(config-if)#ip address 10.3.1.1 255.255.255.0
r4(config-if)#no shutdown
r4(config-if)#exit

开启OSPF进程,发布自己的网段

而 OSPF 是根据无类网络所设计的,所以支持 VSLM 与 CIDR。如此在发布网络是需要加入反掩码,所谓的反掩码便是用 255.255.255.255 - 当前的子网掩码 所得到。

我们还提到过 OSPF 是基于所设计的,所以至少得有一个区域,而区域之中必须的有一个骨干区域,并且只能有一个。所以若是单区域的情况下该区域只能是骨干区域,骨干区域的预设区域值是 0。

在发布网段的时候必须说明该网段属于哪一个区域之中的。所以发布网络的格式是:

network 网络号  反掩码  area 区域号

r1

r1(config)#router ospf 10
r1(config-router)#network 202.201.1.0 0.0.0.255 area 0
r1(config-router)#network 202.202.1.0 0.0.0.255 area 0

r2

r2(config)#router ospf 10
r2(config-router)#network 202.202.1.0 0.0.0.255 area 0
r2(config-router)#network 202.203.1.0 0.0.0.255 area 0
r2(config-router)#network 202.204.1.0 0.0.0.255 area 0

r3

r3(config)#router ospf 10
r3(config-router)#network 192.168.1.0 0.0.0.255 area 0
r3(config-router)#network 202.204.1.0 0.0.0.255 area 0

r4

r4(config)#router ospf 10
r4(config-router)#network 202.204.1.0 0.0.0.255 area 0 
r4(config-router)#network 10.3.1.0 0.0.0.255 area 0

配置完成。
查看路由表信息:

r1#show ip route ospf
Gateway of last resort is not set

      10.0.0.0/32 is subnetted, 1 subnets
O        10.3.1.1 [110/21] via 202.202.1.2, 00:06:02, Ethernet0/0
      192.168.1.0/32 is subnetted, 1 subnets
O        192.168.1.1 [110/21] via 202.202.1.2, 00:06:02, Ethernet0/0
      202.203.1.0/32 is subnetted, 1 subnets
O        202.203.1.1 [110/11] via 202.202.1.2, 00:08:00, Ethernet0/0
O     202.204.1.0/24 [110/20] via 202.202.1.2, 00:07:47, Ethernet0/0

ping各ip,可以ping通。

查看设备的邻居关系,还有接口的状态和角色:

r3#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
10.3.1.1          1   FULL/DR         00:00:39    202.204.1.3     Ethernet0/0
202.203.1.1       1   FULL/BDR        00:00:36    202.204.1.1     Ethernet0/0

查看ospf信息:

r1#show ip protocols 

在这里插入图片描述
开启和关闭调试模式:

debug ip ospf adj
no debug ip ospf adj

配置认证(改一个,全部都要改):

r1(config)#router ospf 10
r1(config-router)#area 0 authentication 
r1(config-router)#exit
r1(config-if)#ip ospf authentication-key lll

显示:

*Nov 20 03:20:25.394: %OSPF-5-ADJCHG: Process 10, Nbr 202.203.1.1 on Ethernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired

查看路由表:

r1#show ip route ospf 

已经没有信息了,这是因为接收不到其他设备发来的信息了

在r2也配置一下:

r2(config)#router ospf 10
r2(config-router)#area 0 authentication 
r2(config-router)#exit
r2(config)#inter e0/0
r2(config-if)#ip ospf authentication-key lll

此时,在r1上查看还有没有信息了:

r1#show ip route ospf 
Gateway of last resort is not set

      202.203.1.0/32 is subnetted, 1 subnets
O        202.203.1.1 [110/11] via 202.202.1.2, 00:02:30, Ethernet0/0
O     202.204.1.0/24 [110/20] via 202.202.1.2, 00:02:30, Ethernet0/0

可以收到r2发来的路由表信息了。

在接口模式中使用md5加密模式的认证:

r3(config)#inter e0/0
r3(config-if)#ip ospf message-digest-key 1 md5 lll
发布了108 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37369726/article/details/103151220
今日推荐