华为HCNA路由技术篇—OSPF协议细节详解

目录

 

1. 选举Route ID

2. OSPF协议原理

3. OSPF报文类型

3.1 Hello报文

3.2 DD报文

3.3 LSR报文

3.4 LSU报文

3.5 LSA报文

4. OSPF邻居状态机

5. OSPF工作流程

5.1 建立邻居关系

5.2 建立邻接关系

5.3 建立邻居的条件

6. 网络类型

7. 选举DR和BDR

8. Cost开销


1. 选举Route ID

通常运行OSPF协议之前,还需要选举一个路由标识符(router-id),用来标识一台运行OSPF协议的路由器(在OSPF域内),通常RID是一个32位的IP地址,不同路由器的RID不能一样,具有唯一性。

Router ID可以通过手动和自动两种方式来配置RID,手动配置RID也很简单,只要指定一个唯一的IP地址就行了。

 

自动选举RID的顺序如下:

  1. 如果有配置多个环回接口,那么在up状态的环回接口中选举最大的ip地址
  2. 如果没有配置环回接口,则在up状态的物理接口中选举最大的ip地址

需要注意的是,在一台运行OSPF协议的路由器上重置OSPF进程后,路由器可能会根据接口的地址变化从而更新Router ID,并且之前学习到的路由信息等都会被清空,为了防止这个问题,通常建议手动配置Router ID。

 

如果路由器设备没有配置任何接口ip地址,在运行ospf协议时自动选举RID时就会显示如下信息:

[Huawei]dis ip int brief
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 1
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 1
The number of interface that is DOWN in Protocol is 2

Interface                         IP Address/Mask      Physical   Protocol  
GigabitEthernet0/0/0              unassigned           down       down      
GigabitEthernet0/0/1              unassigned           down       down      
NULL0                             unassigned           up         up(s)     
[Huawei]
[Huawei]dis ospf brief 

	 OSPF Process 1 with Router ID 0.0.0.0
		 OSPF Protocol Information

 RouterID: 0.0.0.0          Border Router: 
[Huawei]

由于设备的所有接口都没有配置ip地址,因此Router ID显示的是0.0.0.0,这不是正常的Router ID。

2. OSPF协议原理

OSPF协议要求每台运行OSPF协议的路由器都了解整个网络拓扑的链路状态信息,以此计算出到达目的地的最优路径。

OSPF的工作过程:OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,在LSA中包含了路由器已知的接口ip地址,掩码,开销,网络类型等信息。当收到LSA的路由器会根据收到的LSA中提供的信息建立自己的链路状态数据库LSDB,在LSDB的基础上使用SPF算法计算出到达每个网络的最短路径树,通过最短路径树得出到达目的网络的最优路由并加入到路由表当中。

3. OSPF报文类型

OSPF协议的报文是封装在IP网络层中,使用的协议号是89,以OSPF协议的hello报文为例,其封装格式如下所示:

OSPF共有5中报文类型:

  1. Hello报文:Hello报文是用于发现,维护邻居关系的,以每10秒的周期性更新hello报文,在广播和NBMA类型网络中选举指定路由器DR和备份指定路由器BDR(Backup Designated Router )。
  2. DD报文:DD报文:当路由器设备在进行LSDB数据库同步时,用于描述自己的LSDB信息,(不过DD报文中仅仅包含LSA的头部)。
  3. LSR报文:当两台相互发送DD报文后,从对方的链路状态数据库中(LSDB)可以知道哪些LSA是自己本地的链路状态数据库中没有的,或者是否有更新的LSA,那么就可以发送LSR报文请求缺失的LSA。
  4. LSU报文:跟LSR报文的作用是类似的,LSU报文是用来发送对方所缺失的LSA。
  5. LSA报文:用来对接收到的LSU报文进行确认。

3.1 Hello报文

Hello报文是用于发现,维护邻居关系的,以每10秒的周期性更新hello报文,在广播和NBMA类型网络中选举指定路由器DR和备份指定路由器BDR(Backup Designated Router )。

在hello包中会携带邻居的各种信息。

 

 

3.2 DD报文

DD报文:当路由器设备在进行LSDB数据库同步时,用于描述自己的LSDB信息,(不过DD报文中仅仅包含LSA的头部)。

3.3 LSR报文

LSR报文:当两台相互发送DD报文后,从对方的链路状态数据库中(LSDB)可以知道哪些LSA是自己本地的链路状态数据库中没有的,或者是否有更新的LSA,那么就可以发送LSR报文请求缺失的LSA。

上图中可以看到12.1.1.2这台设备向12.1.1.1设备发送了LSR报文请求。

 

 

3.4 LSU报文

LSU报文:跟LSR报文的作用是类似的,LSU报文是用来发送对方所缺失的LSA。

当12.1.1.1设备收到对方发送的LSR报文时就会发送对方缺失的LSA信息。

 

 

3.5 LSA报文

LSA报文:用来对接收到的LSU报文进行确认。

4. OSPF邻居状态机

OSPF邻居建立的状态有以下几个:

  1. 失效状态(Down)       :没有收到Hello包
  2. 初始状态(Init)         :收到对方的Hello包,但没有在hello包中看到自己的信息
  3. 双向通讯状态(Two-Way):收到Hello包,且看到了自己, 形成邻居关系
  4. 交换初始状态(Exstart) :协商主/从关系,保证DD包能有序的发送
  5. 交换状态(ExChange)   :交换DD包,对比LSDB
  6. 加载状态(Loading)     :正在同步LSDB, LSR和LSU交换
  7. 完全邻接状态(Full)     :LSDB完成同步,形成邻接关系

需要注意的是只有Two-Way和Full是稳定状态。

 

5. OSPF工作流程

5.1 建立邻居关系

OSPF工作的邻居发现(即数据包和状态切换)过程 :

 

OSPF协议是通过相互发送hello报文来发现邻居,建立并维护邻居关系的,如果路由器设备发现接收的hello报文中的邻居列表中有自己的RID则说明和邻居建立了双向连接(Two-way),即建立了邻居关系。

另外,运行OSPF的路由器之间交换链路状态信息和路由信息时需要建立邻接关系,但是已经建立邻居关系并不意味着可以形成邻接关系,只有当双方交换过DD报文并同步LSDB后才会形成邻接关系。

 

 

5.2 建立邻接关系

当路由器都建立邻居关系后,就可以建立邻接关系了,如下图所示:

当路由器建立完邻居关系后就可以开始进行链路状态数据库(LSDB)同步了,首先R1和R2双方会相互发送DD报文来选举Master角色,但由于R2设备的RID要比R1大,那么R2设备会被选举为Master路由器。选举完Master后,R1和R2之后发送DD报文都会采用Master的Seq序列号,并且Master路由器每发送一个新的DD报文时,其Seq序列号都会+1。

当双方发送完最后一个DD报文时,说明交换LSA达到LSDB同步,R1和R2之间的状态改为Full,表示建立邻接关系。 

 

当R1和R2设备形成邻接关系后,再查看两台设备的链路状态数据库(LSDB):

R1和R2设备都有相同的LSDB数据库信息。

 

 

5.3 建立邻居的条件

运行ospf协议的路由器通过hello报文建立邻居需要满足以下几个条件:

  1. RID唯一
  2. Hello / Dead时间间隔一致
  3. 区域ID一致
  4. 认证(如果启用了认证) 一致
  5. 链路MTU大小一致(默认不开启检查,思科默认开启)
  6. 子网掩码一致(以太网环境)
  7. 网络地址一致
  8. 末梢区域设置一致(Option)

如果R1和R2两个路由器设备的RID一样的话就无法区分网络设备的身份标识了,那么双方在发送hello报文是不能建立邻居的。这里以RID和hello报文的时间间隔为例,默认情况下hello报文的时间是10秒,但是更改hello报文的时间也会导致R1和R2设备之间无法建立邻居关系以及邻接关系。

把R1设备的hello报文的时间间隔更改为8,R1设备的OSPF邻居状态提示信息如下:

命令行窗口中NeighborPreviousState表示邻居之前的状态,NeighborCurrentState表示邻居当前的状态,说明R1设备已经从Full状态切换成Down状态了,没有建立邻居关系的,NeighborDownPrimeReason=Interface Parameter Mismatch这一行信息代表着无法建立邻居关系的原因:接口参数不匹配。

通过wireshark抓包确实可以看到R1和R2设备之间发送的hello报文中的是8秒,不是默认的10秒,也就是说,由于双方的hello报文时间间隔不一致,从而导致双方无法建立邻居关系。对于其他的建立邻居的条件也是同理,这里就不再一一介绍了。

6. 网络类型

在OSPF协议中有四种网络类型: 广播多路访问型 (BMA)、 非广播多路访问型 (NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。

首先需要明白的一点是OSPF协议的网络类型是基于接口的,在OSPF网络中默认情况下以太网的网络是广播类型的;而PPP,DHLC这些网络则是点到点类型的,我们可以通过查看网络设备的接口类型来验证这一点。

dis ospf int g0/0/0命令查看设备的以太网口g0/0/0,dis ospf s4/0/0命令查看串口s4/0/0的网络类型:

从设备该出的信息来看,以太网接口g0/0/0是广播网络类型,串口s4/0/0是点到点网络类型。

7. 选举DR和BDR

从OSPF的网络类型可知,网络设备的接口类型决定了网络的类型,而网络类型来决定是否要选举DR和BDR,那么问题来了,DR和BDR是什么意思?

我们知道每一次建立邻接关系都要发送hello报文,如果建立邻接关系数越多,意味着就要发送更多的hello报文。默认情况下OSPF网络中的每一台路由设备都可以和其他路由设备建立邻接关系,那么总的建立邻接关系数就是n(n-1)/2。但是如果采用选举DR/BDR的方式建立邻接关系,那么总的建立邻接关系数就是2(n-2)+1,很明显DR/BDR减少了建立邻接关系数。

 

说白了,选举DR/BDR的目的就是减少建立邻接数,从而减少发送hello报文次数来节省网络带宽,减轻路由设备处理数据包的压力。这样其他非DR/BDR只需要与选举为DR/BDR的建立邻接关系并交换链路状态信息以及路由信息,就可以了解整个OSPF网络的状态信息。

 

DR(Designed Router,指定路由器):,相当于网络的中心节点,包含了整个网络的链路状态和路由信息,相当于班长,总经理的角色

BDR(Backup DR,备用DR):在DR发生故障时,用于接管DR,相当于副班长,副总经理。

DRothers:指的是非DR/BDR,相当于普通学生,员工

注意:DR,BDR以及DRothers之间都保持着邻接关系(Full),DRothers之间保持邻居关系(Two-Way)。另外DR、BDR以及DRothers之间以组播的方式进行交互,224.0.0.6向DR和BDR发送链路状态更新,224.0.0.5向所有OSPF路由器发送。

 

DR和BDR选举规则:

  1. 首先比较Hello报文中携带的优先级
    1. 优先级范围0~255,默认=1
    2. 优先级最高的被选举为DR,优先级次高的被选举为BDR
    3. 优先级为0的不参与选举
  2. 优先级一致的情况下,比较RID, 越大越优先

8. Cost开销

在OSPF网络中每一个运行OSPF的接口上,都维护着一个接口Cost开销值,计算cost开销的公式如下:

Cost = 10^8/BW(bps)= 100Mbps/BW = 接口带宽参考值/接口带宽

本质上Cost开销值是计算到一个目标网络的度量值,计算Cost的方式是从源到本路由器沿途所有入站接口的Cost值累加(路由方向)。

原创文章 317 获赞 280 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_35733751/article/details/103866447