OSPF(HCNA)——OSPF协议详解

目录

1.链路状态与LSA

1.链路状态

2.LSA

2.OSPF报文的类型

3.单区域OSPF网络

1.链路状态数据库

2.最短路径树

3.OSPF路由器

4.多区域OSPF网络

5.邻居关系与邻接关系

6.DR与BDR


1.链路状态与LSA

1.链路状态

OSPF是一种基于Link-State(链路状态)的路由协议,那么究竟什么是链路状态呢?

在OSPF协议中,Link-State(链路状态)中的Link(链路)一词相当于是Interface(接口)的意思。所谓链路状态,其实指的就是路由器的接口状态。路由器的某个接口的状态主要包含下面一些信息(了解)。

(1)该接口的IP地址及掩码。

(2)该接口所属区域的Area-ID。

(3)该接口所属的路由器的Router-ID。

4) 该接口的接口类型(也就是该接口所连的二层网络的类型,如广播型、NBMA 型、点到点型、点到多点型)。

5) 该接口的接口开销(通常会以接口带宽来定义接口开销;带宽越大,开销越小)。

6) 该接口所属的路由器的Router Priority (这个参数是用来选举DRBDR的)。

7) 该接口所连的二层网络中的DR

8) 该接口所连的二层网络中的BDR

9) 该接口的Hellolnterval (该接口发送Hello报文的间隔时间)。

10) 该接口的RouterDeadlnterval 该时间参数称为路由器失效时间。如果该接口 在这个时间范围内没有接收到某个邻居路由器发来的Hello报文,则认为那个邻居路由 器已经失效)。

11)  该接口的所有邻居路由器。

12)  该接口的认证类型。

13)  该接口的密钥。

14)  ……

OSPF是一种基于链路状态的路由协议,其核心思想就是,每台路由器都将自己的各个接口的接口状态(即链路状态)共享给其他路由器。在此基础上,每台路由器就可以根据自己的各个接口的接口状态以及其他路由器各个接口的接口状态计算出从自己去往各个目的地的路由。

2.LSA

那么,LSA又是什么意思呢?LSA就是Link-State Advertisement的缩写词,直译为“链路状态通告”。LSA有十几种类型(Type),内容如下。(当然,现实的生产生活主要用的就只有几种)

(1)Type-1 LSA (也称为Router LSA)

(2)Type-2 LSA (也称为Network LSA)

(3)Type-3 LSA (也称为Network Summary LSA)

(4)Type-4 LSA (也称为ASBR Summary LSA)

(5)Type-5 LSA (也称为AS External LSA)

(6)......

简单的说,LSA是链路状态信息的主要载体,链路状态信息主要是包含在LSA中并通过LSA的通告(防洪)来实现共享的。需要说明的是:

(1)不同类型的LSA中所包含的链路状态的内容是不同的;

(2)不同类型的LSA的功能和作用也是不同的;

(3)不同类型的LSA的通告(防洪)范围也是不同的;

(4)不同角色的路由器(内部路由器,骨干路由器,区域边界路由器ABR,自治系统边界路由器ASBR)都能产生的LSA的类型也是不同的。(路由器的角色可以看我文章《OSPF(HCNA)——OSPF协议介绍》这里不做解释)

现在解释一下Type-1 LSA、Type-2 LSA、Type-3 LSA、Type-4 LSA、Type-5 LSA的作用:

1)Type-1 LSA每台路由器都会产生。Type-1 LSA用来描述路由器各个接口的接口类型、IP地址、开销值等信息。一个Type-1 LSA只能在产生它的Area内泛洪,不能泛洪到其他Area

2)Type-2 LSA它是由DR产生的,主要用来描述该DR所在的二层网络的网络掩码以及该二层网络中总共包含了哪些路由器。一个Type-2 LSA只能在产生它的Area 内泛洪,不能泛洪到其他Area

3)Type-3 LSA它是由ABR产生的。ABR路由器将自己所在的多个Area中的 Type-1Type-2 LSA转换为Type-3 LSA,这些Type-3 LSA描述了 Area之间的路由信息。Type-3 LSA可以泛洪到整个自治系统(整个OSPF网络)内部,但是不能泛洪到Totally
Stub Area
Totally Not-So-Stubby Area (在后面的文章会做解释)

4)Type-4 LSA它是由ASBR所在AreaABR产生的,用来描述去往ASBR的路 由信息。Type-4 LSA可以泛洪到整个自治系统(整个OSPF网络)内部,但是不能泛洪到 Stub AreaTotally Stub Area、Not-So-Stubby AreaTotally Not-So-Stubby Area。

5)Type-5 LSA它是由ASBR产生的,用来描述去往自治系统外部的路由。Type-5 LSA可以泛洪到整个自治系统(整个OSPF网络)内部,但是不能泛洪到StubArea.Totally Stub Area、Not-So-Stubby Area Totally Not-So-Stubby Area

6) ……

2.OSPF报文的类型

如图所示,OSPF的协议报文(简称OSPF报文)是直接封装在IP报文中的,IP报文头部的协议字段的值必须是89。

OSPF报文本身有5种类型,分别是Hello报文,DD报文,LSR报文,LSU报文,LSAck报文,如图所示,我们可以看到,各种不同类型的LSA其实只是包含在LSU报文中。其他类型的OSPF报文中虽然没有携带LSA,但是依然会携带一些链路状态信息,当然也会携带一些其他的协议信息。(关于报文的解释,我会在后面的章节介绍)

路由器的某一接口所发送的Hello报文中主要携带了下面一些信息。

  1. OSPF的版本号。
  2. 该接口所属的路由器的Router-IDo
  3. 该接口所属区域的Area-IDo
  4. 该接口的认证类型。
  5. 该接口的密钥。
  6. 该接口的IP地址的子网掩码。
  7. 该接口的Hellolnterval (该接口发送Hello报文的间隔时间)。
  8. 该接口所属的路由器的Router Priority (这个参数是用来选举DRBDR的)。
  9. 该接口的 RouterDeadlnterval
  10. 该接口所连的二层网络中的DR
  11. 该接口所连的二层网络中的BDR
  12. 该接口的所有邻居路由器。
  13. ……

3.单区域OSPF网络

如图所示显示的是一个单区域的OSPF网络,整个网络只有Area 0,该Area 0也就是整个自治系统。在这个OSPF网络中,没有ABR,假设也没有ASBR。我们用该网络进行简单描述单区域的OSPF网络的工作过程。

1.链路状态数据库

图中,每台路由器都会产生Type-1 LSA,并向整个Area 0防洪。另外,具有DR角色的路由器还会产生Type-2 LSA,并且向整个Area 0防洪。整个Area 0中就只有存在这两种类型的LSA,不再有其他类型的LSA存在。

每台路由器将所有接收到的LSA以及自己产生的LSA集中在一起,便可以得到了一个数据库,我们把这样的数据库称为LSDB(Link-State Database,链路状态数据库)。显然,一个LSBD其实就是若干条LSA的集合。因为LSA是以防洪方式在Area 0中进行通告的,所以Area 0中的每台路由器都能接收到所有其他路由器产生的LSA。这样一来,不同路由器上的LSDB的内容其实是完全一样的。

稍微想想,我们会发现,LSDB其实完完全全的表征了Area 0中的各种信息,包括Area 0中共有多少台路由器,每台路由器有多少个接口,各个接口的类型和开销,路由器之间是怎样连接的,如此等等,也就是说,LSDB相当于是一张关于Area 0的详细地图。

2.最短路径树

如图所示中,每台路由器上的LSDB的内容都是完全一致的。也就是说,每台路由器的“脑海”中都有一张相同的、关于整个Area 0的详细地图。显然,有了这张地图,每台路由器便可以从中找到从自己的位置去往地图中各个目的地的路线。然而,由于环路的存在,路由器是可以通过不同的路径(路线)从自己的位置去往同一个目的地的。在这种情况下,路由器必需根据路径开销的情况从不同的路径众选择出最优(即开销最小)的路径,这个过程也就是最短路径树(Shortest Path Tree,SPT)的生产过程。

如图所示,每台路由器都会将SPT算法(Shortest Path First Algorithm)作用于自己“脑海”的地图,从而生成一棵属于自己的SPT。SPT具有无环结构,其树根就是生成这颗SPT的路由器,并且,从树根出发沿树干的指引去往某个目的地时,所经过的路径一定就是最优路径。(SPT算法了解即可,不需要做过多的了解)

3.OSPF路由器

‘OSPF路由器在生成了自己的SPT后,便可以很容易的根据自己的SPT计算出从自己的位置去往各个目的地的路由。这些路由信息的集合,就是所谓的OSPF路由表。

如图所示,R1的SPT进行细化,我们可以很容易知道,R1的OSPF路由表中应该包含如下的路由信息:

(1)目的地:Net1,出接口:Intf-11,下一跳IP地址:Intf-11的IP地址。Cost:1;

(2)目的地:Net2,出接口:Intf-11,下一跳IP地址:Intf-21的IP地址。Cost:5;

(3)目的地:Net3,出接口:Intf-12,下一跳IP地址:Intf-12的IP地址。Cost:2;

(4)目的地:Net4,出接口:Intf-12,下一跳IP地址:Intf-31的IP地址。Cost:9;

(5)目的地:Net5,出接口:Intf-12,下一跳IP地址:Intf-31的IP地址。Cost:7;

(6)......

4.多区域OSPF网络

这里的话,多区域OSPF网络的工作过程,我们简单的描述一下:

如图所示,在多区域OSPF网络中,由于ABR和ASBR的存在,整个OSPF网络中除了有Type-1 LSA和Type-2 LSA之外,还有Type-3、Type-4、Type-5等等类型的LSA。也就是说,一台路由器的LSDB中,既有Type-1 LSA和Type-2 LSA,也有其他类型的LSA。

根据自己的LSDB中的Type-1 LSA和 Type-2 LSA,路由器可以使用SPF算法得到自己、关于本Area 的SPT,并根据SPT计算出自己去往各个目的地的路由(这个过程与单区域的OSPF网络的工作过程完全一样);根据自己的LSDB中的Type-3 LSA,路由器可以使用DV算法计算出自己去往其他Area 中各个目的地的路由;根据自己的LSDB中的Type-4 LSA和Type-5 LSA,路由器可以使用DV算法计算出自己去往本OSPF网络(本自治系统)之外的目的地的路由。

(简单理解就是,SPT算法作用于同区域[Area]的OSPF路由器;DV算法作用于不同区域[Area]的OSPF路由器)。

如图所示,R3将SPT算法作用于自己的LSDB中的Type-1 LSA和Type-2 LSA,便可以得到自己的、关于Area 1 的SPT,并根据自己去往Area 1中各个目的地的路由。

另一方面,(1)R3 将DV算法作用于自己的LSDB中的Type-3 LSA,便可以计算出自己去往Area 0、Area 2、Area 3中各个目的地的路由,(2)同时,R3将DV算法作用于自己的LSDB中的Type-4 LSA 和Type-5 LSA,便可以计算出自己去往整个OSPF网络之外的目的地的路由。

显然,多区域OSPF网络的工作过程要比单区域的OSPF网络复杂的多。

5.邻居关系与邻接关系

描述RIP协议的时候,RIP路由器都会每隔30秒钟向它的所有的的邻居路由器发布它的最新的RIP路由表中的所有路由信息,同时又不断的接受它的邻居路由器发来的路由信息,并且根据这些接收到的路由信息来更新自己的RIP路由表。在RIP协议中,如果路由器A 的某个接口和路由器B 的某个接口位于同一个二层网络中,则A 和 B便存在邻居关系,A可以称为B的邻居路由器(或者简称邻居),B也可以称为A的邻居路由器(或者简称邻居)。

然而,在OSPF协议中,情况就变得非常复杂了。如果路由器A 的某个接口和路由器B 的某个接口位于同一个二层网络中,则我们就说A 和 B存在“相邻”的关系,但是“相邻”的关系并不等于“邻居(Neighbor)”关系,更不等于“邻接(Adjacency)”的关系。

在OSPF协议中,每台路由器都会通过它的每个接口,当然,这个接口必须使能了OSPF功能,以HelloInterval 为周期向外发送Hello报文。如果两台相邻路由器彼此发送给对方的Hello报文的内容完全一致,那么这两台相邻路由器就会成为彼此的邻居路由器,否则,这两台相邻路由器就不能成为彼此的邻居路由器。两个相邻路由器之间存在相邻关系,但是并不一定存在邻居关系,只有彼此发送给对方的Hello报文的内容完全一致,它们之间才存在邻居关系。

(1)如果两台邻居路由器之间的二层网络类型是P2P网络或者是P2MP网络,则这两台邻居路由器一定会进入彼此之间的LSDB同步过程。当这两台邻居路由器成功的完成了LSDB同步之后,它们之间便建立起了邻接关系,也就是说,彼此成为了对方的邻接路由器。LSDB同步过程的目的是要保证参与LSDB同步过程的两台邻居路由器最终能够拥有内容完全一致的LSDB。LSDB同步的过程是通过交互OSPF DD报文、OSPF LSB报文、OSPF LSU报文来实现的。

(2)如果两台邻居路由器之间的二层网络类型是Broadcast网络或者NBMA网络,并且其中一台路由器是这个二层网络的DR或者是BDR,那么这两台邻居路由器一定会进入彼此之间的LSDB同步过程。当这两台邻居路由器成功的完成了LSDB同步之后,它们之间便建立了邻接关系。如果这两台邻居路由器都不是这个二层网络的DR或者是BDR,那么,这两台邻居路由器就不会进入彼此之间的LSDB同步过程,也就是说,彼此之间是不可能建立起邻接关系。

分清OSPF 邻接关系和邻居关系是非常重要的。如果两台路由器之间存在邻接关系,那么则它们之间一定存在邻居关系。如果两台路由器之间存在邻居关系,则它们之间可能存在邻接关系,也可能不存在邻接关系。显然,一个OSPF网络中,邻接关系的数量总是等于或者小于邻居关系的数量的。

需要特别说明的是,在OSPF网络中,LSA的防洪过程只可能在具有邻接关系的路由器之间进行的。LSA的防洪工过程是通过交互LSU报文和LSAck报文而实现的(LSA的防洪具体过程,后续章节介绍)。显然,邻接关系的数量越少,网络中OSPF协议报文的数量就会越少,OSPF协议占用的网络带宽资源以及路由器处理资源就会越少。

6.DR与BDR

在P2P网络或者是P2MP网络中,完全不存在DR与BDR的概念。DR(指定路由器)与BDR(备份指定路由器)的概念只适用于Broadcast网络或者是NBMA网络。在Broadcast网络或者是NBMA网络中,DR 及 BDR是通过选举而产生的。

选举DR 及 BDR有两个目的,一个目的是让DR来产生针对这个Broadcast网络或者是NBMA网络的Type-2 LSA,另一个目的是减少这个Broadcast网络或者是NBMA网络中邻接关系的数量,另外,BDR的作用是:当DR出现故障时,BDR能够迅速替代DR的角色。

在一个Broadcast网络或者是NBMA网络中,DR会与所有其他的路由器(包括BDR)建立邻接关系,BDR也会与所有其他的路由器(包括DR)建立邻接关系,除此之外,不能再有其他的邻接关系。

如图所示的二层网络是一个以太网(注:以太网属于Broadcast网络类型),该网络包含了6台路由器和1太交换机,在这个以太网中,如果任何两个邻居路由器之间都建立邻接关系,则总共会有6 * (6-1) / 2 = 15个邻接关系。

然而,在选举DR和BDR之后,邻接关系的数量则会从原来的15个减少为9个,如图所示,显然,如果该以太网中的路由器数量越多,则邻接关系数量减少的效果就越明显。

那么,DR是如何被选举出来的呢?在一个Broadcast网络或者是NBMA网络中,路由器之间会进行Hello报文的交互,而每一个Hello报文总是携带了发送该Hello报文的路由器的Router Priority 和 Router ID。

(1)Router Priority是一个8 bit 的二进制数,也可以表示为十进制数,取值范围是从0到255,并且取值越大,代表优先级越高。一个Broadcast网络或者是NBMA网络中的若干个路由器在选举DR时,首先会比较各个路由器的Router Priority的值,Router Priority的值最大者将被选举为成为DR;

(2)如果遇到Router Priority的值相等的情况,则Router ID的值最大者将被选举为成为DR。注意,如果一个路由器的Router Priority的值为0,则表明该路由器不会参加DR或者BDR的选举过程。

如果一个Broadcast网络或者是NBMA网络中只存在DR,而没有BDR,那么当DR出现故障后,就需要重新选举DR,而选举的过程是需要耗费一定的时间的。如果网络中既有DR,又有BDR,则当DR出现故障后,BDR就能迅速代替DR的角色。因此,BDR的存在意义就是充当DR的备份,随时准备迅速的代替DR的角色。

BDR的选举规则和过程 与 DR的选举规则和过程是完全一样的,但是需要注意的是,BDR的选举是在选举出了DR之后进行的。(1)选举BDR时,会比较各个路由器的Router Priority的值,Router Priority的值最大者将被选举为成为BDR;

(2)如果遇到Router Priority的值相等的情况,则Router ID的值最大者将被选举为成为BDR。另外需要注意的是,同一个Broadcast网络或者是NBMA网络中,DR和BDR不能是同一台路由器。

实质上,DR和BDR只是路由器的某个接口的属性,而不是路由器本身的属性。完全有可能出现这样的情况:同一台路由器,在它相连的某个二层网络中它是DR,但是在它相连的另一个二层网络中它岂不是DR。

例如,如图所示,如果路由器R1 的Router Priority 的值为10,那么完全有可能出现这样的情况:

R1是在以太网2中的DR,但是却不是以太网1中的DR。

猜你喜欢

转载自blog.csdn.net/weixin_40274679/article/details/106449711
今日推荐