OSPF详解

OSPF详解文章目录引用文章:一、OSPF基本概述相关名词:总结:二、OSPF基本概念1、Router-ID注意事项:2、COST注意:3、报文类型OSPF的五种报文:4、OSPF的三张表邻居表(Peertable):链路状态数据库LSDB(Link-statedatabase):OSPF路由表(Routingtable):5、OSPF邻接关系建立过程6、OSPF网络类型OSPF支持的网络类型:常见链路层协议对应的默认网络类型:7、DR、BDR8、OSPF区域(area)的概念**单区域存在的问题:**OSPF

文章目录

引用文章:

OSPF协议介绍及配置 – airoot – 博客园 (cnblogs.com)

一、OSPF基本概述

相关名词:
  • **LSA(链路状态通告):**可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告,更通俗点的讲法是,每台路由器都产生一个通告,这个通告描述它自家门口的情况。

  • SPF:最短路径算法,SPF是OSPF路由协议的一个核心算法,用来在一个复杂的网络中做出路由优选的决策。经过SPF算法的计算后,每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,事实上路由器就已经知道了到达网络各个角落的最优路径。

  • OSPF:(Open Shortest Path First)开放最短路径优先协议,是一种链路状态路由协议,在RFC 2328中描述。OSPF中的字母O意为open,也就是开放、公有,任何标准化的设备厂商都能够支持OSPF。OSPF是一种使用相当广泛的IGP协议,深入掌握OSPF非常有必要。

总结:

​ OSPF作为链路状态路由协议,路由器之间交互的是LSA(链路状态通告),路由器将网络中泛洪的LSA搜集到自己的LSDB(链路状态数据库)中,这有助于OSPF理解整张网络拓扑,并在此基础上通过SPF最短路径算法计算出以自己为根的、到达网络各个角落的、无环的树,最终,路由器将计算出来的路由装载进路由表中。


二、OSPF基本概念

1、Router-ID

​ OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同的OSPF Router-ID。
​ OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈建议手工配置OSPF的Router-ID,因为这关系到协议的稳定
​ 在路由器运行了OSPF并由系统自动选定Router-ID之后,如果该Router-ID对应的接口DOWN掉,或出现一个更大的IP,OSPF仍然保持原Router-ID(也就是说,Router-ID值是非抢占的,稳定第一),即使此时reset ospf process重启OSPF进程,Router-ID也不会发生改变;除非重新手工配置Router-ID(OSPF进程下手工敲router-id xxx),并且重启OSPF进程方可。

注意事项:

​ 如果该Router-ID对应的接口IP 地址消失,例如undo ip address,则reset ospf process后,RouterID也会发生改变。

2、COST

OSPF使用cost“开销”作为路由度量值。
每一个激活OSPF的接口都有一个cost值。OSPF接口cost=100M /接口带宽,其中100M为OSPF的参考带宽(reference-bandwidth)。
一条OSPF路由的cost由该路由从路由的起源一路到达本地的所有入接口cost值的总和。

img

注意:

​ 上图只是为了帮助大家理解路由cost的计算过程,我们都知道OSPF实际的路由计算是由LSA经过计算得来的,所以这里只是形象化的帮助大家理解而已:R1将路由更新出来,Cost=1,R2从Serial4/0/0口收到这条路由,最终这条路由在R2的路由表中的cost等于1加上serial4/0/0接口的cost 50也就是51,再将这条路由更新给R3,那么这条路由在R3上的cost=51+1也就是52。
​ 由于默认的参考带宽是100M,这意味着更高带宽的传输介质(高于100M)在OSPF协议中将会计算出一个小于1的分数,这在OSPF协议中是不允许的(会被四舍五入为1)。而现今网络设备满地都是大于100M带宽的接口,这时候路由COST的计算其实就不精确了。所以可以使用bandwidth-reference 1000命令修改,但是这条命令要谨慎使用,一旦要配置,则建议全网OSPF路由器都配置。

3、报文类型
OSPF的五种报文:
  1. Hello : 建立和维护OSPF邻居与邻接关系,周期收发,周期保活,默认hello 包的hello time 为10s或30s , dead time 为hello time的4倍 ; 邻居间hello包中hello time和dead time必须是完全一致的参数.
  2. DBD : 链路状态数据库描述信息(描述LSDB中LSA头部信息)
  3. LSR : 链路状态请求,用于向OSPF邻居请求链路状态信息
  4. LSU : 链路状态更新(携带一条或多条LSA
  5. LSAck : 对LSU中的LSA进行确认
4、OSPF的三张表
邻居表(Peer table):

OSPF是一种可靠的路由协议,要求在路由器之间传递链路状态通告之前,需先建立OSPF邻居关系hello报文用于发现直连链路上的其他OSPF路由器,再经过一系列的OSPF消息交互最终建立起全毗邻的邻居关系,其中两者之间需要经历几个邻居关系状态,这也是一个重要的知识点。路由器在各个激活的OSPF的接口上维护的邻居都列在邻居表中,通过观察邻居表,能够进一步了解OSPF路由器之间的邻居状态。

链路状态数据库LSDB(Link-state database):

OSPF用LSA(link state Advertisement 链路状态通告)来描述网络拓扑信息,然后OSPF路由器用链路状态数据库来存储网络的这些LSA。OSPF将自己产生的以及邻居通告的LSA搜集并存储在链路状态数据库LSDB中。掌握LSDB的查看以及对LSA的深入分析才能够深入理解OSPF。

OSPF路由表(Routing table):

对链路状态数据库进行SPF(Dijkstra)计算,而得出的OSPF路由表。

5、OSPF邻接关系建立过程

img

​ OSPF邻居关系的建立过程是我们在学习OSPF过程中的一个重点,而且非常具有研究价值,就OSPF的实际部署而言,掌握这里头的机制也是很有必要的,因为邻居关系的建立是OSPF工作的基本,如果连邻居关系都建立不起来,就别谈其他的了。在实际业务部署中,可能会碰到各种问题导致OSPF邻居关系无法正常建立,因此这个模块非常值得推敲。

1、启动配置完成后,运行ospf协议的路由器,将组播收发hello包;若hello包中存在本地的RID,视为对端已经认识本地,故标志邻居关系建立,生成邻居表;
2、进行条件匹配:匹配失败将停留于邻居关系,仅hello周期保活即可;
3、匹配成功者后:将建立邻接(毗邻)关系;首先使用不携带数据库目录的DBD进行主从关系选举;之后主优先与从进行DBD目录交换;交换后再使用LSR/LSU/LSack来获取未知的LSA信息;直到邻接间数据库完全一致;生成LSDB表;-链路状态数据库(该网络所有LSA的集合)
4、当数据库的同步完成后:本地将所有的LSA进行组合;生成有向图—>最短路径树将最佳路径加载到本地的路由表中;网络收敛完成,hello包周期保活;之后的每30min邻接关系间周期比对下一数据库目录;(查漏补缺)

6、OSPF网络类型

OSPF是一个**“接口敏感型”协议**,这句话非常值得细细品味。在上面我们介绍ospf cost的时候,就曾经讲过,路由的cost实际上得累加上入接口的cost。而OSPF中后续要介绍的DR、BDR的概念,实际上也是基于接口的,另外邻居关系的建立,也是与接口有关,因此其实很多机制着眼点都与接口有关。一旦我们在某个接口上激活了OSPF,那么这个接口将会根据该接口的二层(数据链路层)封装,捆绑对应的OSPF网络类型,注意,不同的OSPF接口网络类型,OSPF在该接口上的操作将有所不同

OSPF支持的网络类型:

· 点到点网络(PPP/HDLC GRE , 串线)

· 广播型多路访问网络(BMA , 以太网)

· 非广播型多路访问网路(NBMA,MGRE)

· P2MP网络

常见链路层协议对应的默认网络类型:

img

如果一个接口是以太网接口,那么该接口激活OSPF后,该接口的缺省OSPF网络类型为Broadcast也就是广播型多路访问网络。而如果一个接口是serial接口,二层封装为HDLC或者PPP,那么激活OSPF后,其缺省的OSPF网络类型就是Point-to-Point也就是点对点。
接口的OSPF网络类型是可以通过命令修改的。

7、DR、BDR

img

在广播多路访问网络(Multi Access)中,例如以太接口,所有的路由器的接口都是相同网段、处于同一个广播网络中,这些接口如果两两建立OSPF邻居关系,这就意味着,网络***有:

n(n-1)/2

这么多个OSPF邻居关系,维护如此多的邻居关系不仅仅额外消耗设备资源,更是增加了网络中LSA的泛洪数量

img

· 为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。

· DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性,也就是说如果该MA网络中,已经选举完成、并且选举出了一个DR,那么后续即使有新的、更高优先级的设备加入,也不会影响DR的选举,除非DR挂掉。

· **指定路由器 (DR):**DR 负责侦听多路访问网络中的拓扑变更信息并将变更信息通知给其他路由器,同时负责代表该MA网络发送LSA类型2。MA网络中,所有的OSPF路由器都与DR建立全毗邻的OSPF邻接关系。

· 备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色

· 注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的,所以如果我们说:“这台路由器是DR”实际上这种说法是不严谨的,严格的说,应该是:“这台路由器的这个接口,在这个MA网络上是DR”。

· MA网络中,所有的DRother路由器均只与DR和BDR建立全毗邻的邻接关系,DRother间不建立全毗邻邻接关系,如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解

· 路由器的接口如果网络类型为广播多路访问或者非广播多路访问型,那么都会进行DR/BDR的选举。所以我们看,OSPF接口网络类型的不同,OSPF的操作是有所不同的。在P2P或者P2MP类型的接口上,就不选举DR\BDR

接下去看看在MA网络中,有了DR、BDR的存在后,LSA的泛洪:

img

假设网络已经完成了OSPF收敛,现在突然R3下挂的一个网络发生了故障
路由器R3用224.0.0.6通知DR及BDR
DR、BDR监听****224.0.0.6这一组播地址
DR向组播地址224.0.0.5发送更新以通知其它路由器
所有的OSPF路由器监听224.0.0.5这一组播地址
路由器收到包含变化后的LSA的LSU后,更新自己的LSDB,过一段时间(SPF延迟),对更新的链路状态数据库执行SPF算法,必要时更新路由表。
这里有个知识点要记住,OSPF使用两个well-know的组播地址:224.0.0.5及224.0.0.6,这是一个常识,需熟记。所有的OSPF路由器(的接口)都会侦听发向224.0.0.5这个组播地址的报文所有DR/BDR都会侦听224.0.0.6

8、OSPF 区域(area)的概念
单区域存在的问题:

img

设想一下,如果OSPF没有区域的概念,或者整个OSPF网络就是一个区域,那么会有什么问题?在一个区域内,LSA会被泛洪,并且同一个区域的OSPF路由器,关于该区域的LSA会同步,这样一来,如果整个网络就一个单独的区域的话,如果规模非常庞大,那么LSA的泛洪会很严重,OSPF路由器的负担很大,因为OSPF要求区域内的所有路由器,LSDB必须统一,这样以便计算出一个统一的、无环的拓扑;
区域内部动荡会影响全网路由器的SPF计算;
LSDB庞大,资源消耗过多,设备性能下降,影响数据转发;
每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。

OSPF多区域:

img

基于上述原因,OSPF设计了区域area的概念
多区域的设计减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的
在区域边界可以做路由汇总减小了路由表
充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由
多区域提高了网络的扩展性,有利于组建大规模的网络

OSPF区域中的骨干区域area0:

img

在部署OSPF时,要求全OSPF域,必须有且只能有一个area0Area 0为骨干区域,骨干区域负责在非骨干区域之间发布由区域边界路由器汇总的路由信息(并非详细的链路状态信息),为避免区域间路由环路,非骨干区域之间不允许直接相互发布区域间路由。因此,所有区域边界路由器都至少有一个接口属于Area 0,即每个区域都必须连接到骨干区域。

OSPF路由器的角色

img

OSPF路由器的角色:
区域内路由器Internal Router
区域边界路由器Area Border Router
骨干路由器Backbone Router
AS边界路由器AS Boundary Router


三、OSPF LSAs及特殊区域

1、前言

前面我们已经介绍过了,对于OSPF这类的链路状态路由协议而言,LSA链路状态通告是工作在底层、最为关键、最为核心的构件,正因为有了LSA,OSPF能够准确的描述网络拓扑并且最终计算出最优的路由。OSPF设计了多种LSA,以便描述网络拓扑及各种类型的路由。

2、实验环境

img

上图是本次我们用于讲解OSPF LSA的网络拓扑,比较简单:

· R1、R2、R3、R4四台路由器运行OSPF。

· 设备接口互联IP如图所示,都是192.168.0.0/16开头的地址段。

· 所有设备配置Loopback0接口,IP地址为x.x.x.x/32,x为设备编号。
但仅在R1及R2上network loopback0接口。

· 所有设备的OSPF RouterID均使用Loopback0接口的IP地址,也就是x.x.x.x

· 在R1、R2、R3所处的LAN中,将R3的GE0/0/0口优先级调高,使之成为DR
我们开始来逐一认识每种LSA:

3、LSA详解
1)LSA类型1-路由器LSA(Router SLA)

每一台运行OSPF的路由器均会产生1类LSA,1类LSA怎么理解?其实很简单,就是每台路由器描述一下自己“家门口的状况”,并且只会告诉给“全村的人”(本区域内泛洪)。

1类LSA主要的功能有以下两点:

描述路由器的特殊角色,如Virtual-link、ABR、ASBR:
这是通过1类LSA中相关的V、B、E位的置1来体现的,例如如果本台设备是ABR,那么它产生的1类LSA中B位会置1。
描述本路由器在某个区域内部的直连链路(接口)及接口COST值。

img

例如上图中,所有OSPF路由器都会产生1类LSA,并且在本区域内泛洪。我们以R1举例,它会产生一个类型1的LSA,那么在这个LSA1中,包含两个链路的描述,一个用于描述Loopback接口以及接口的COST值,另一个是描述GE0/0/0接口以及COST值。这个1类LSA会在area1内泛洪。

我们首先来看一下R1的LSDB:

[R1] display ospf lsdb
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Area: 0.0.0.1
Type   LinkState ID  AdvRouter Age Len  Sequence  Metric
Router  2.2.2.2     2.2.2.2   527 48  80000005  1
Router  1.1.1.1     1.1.1.1   562 48  80000006  1
Router  3.3.3.3     3.3.3.3 775 36  80000007  1
Network  192.168.123.3 3.3.3.3  816 36  80000003  0
Sum-Net  192.168.34.0  3.3.3.3  771 28  80000001  48

上面就是R1的LSDB,实际上在area1内,OSPF路由器关于area1的LSDB都是统一的。在上面的LSDB中我们观察到了1、2、3类LSA。重点来看一下R1自己产生的1类LSA:

[R1] display ospf lsdb router 1.1.1.1                #这条命令查看router lsa也就是1类LSA 1.1.1.1
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.1
Link State Database
Type  : Router                            #LSA类型为router lsa,也就是类型1
Ls id  : 1.1.1.1                            # LS ID为1.1.1.1,这是R1的RouterID
Adv rtr  : 1.1.1.1                           # 该LSA通告者的RouterID,也就是R1的RouterID
Ls age : 644
Len   : 48
Options : E
seq#  : 80000006
chksum : 0xbca7
Link count: 2                             #这个LSA包含2个链路的描述
\* Link ID: 192.168.123.3                    #链路1,ID为192.168.123.3也就是DR的IP地址
Data : 192.168.123.1                      #R1的GE0/0/0口的IP
Link Type: TransNet                      #链路类型
Metric : 1                              #接口Cost=1
\* Link ID: 1.1.1.1                         #链路2,对应Loopback接口
Data  : 255.255.255.255
Link Type: StubNet
Metric : 0 #接口Cost=0
Priority: Medium

这就是1类LSA, R2在Area1中的1类LSA大体上类似,那么R3泛洪的1类LSA是如何?

[R3 ]display ospf lsdb router 3.3.3.3
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0#R3在area0内泛洪的1类LSA
Link State Database
Type : Router
Ls id   : 3.3.3.3
Adv rtr  : 3.3.3.3
Ls age  : 946
Len   : 48
Options : ABR E
seq#   : 80000002
chksum : 0x2878
Link count: 2               #R3在area0内泛洪的1类LSA包含两个Link,实际上一个用于描述这个接口所在的网段,另一个用于描述这个点到点接口对端的路由器也就是R4
\* Link ID: 4.4.4.4           #R4的RouterID
Data : 192.168.34.3        #R3的serial4/0/0的IP地址
Link Type: P-2-P
Metric : 48
\* Link ID: 192.168.34.0      #描述R4的Serial4/0/0口所在的网段及掩码
Data  : 255.255.255.0
Link Type: StubNet
Metric : 48
Priority : Low

Area: 0.0.0.1              #R3在area1内泛洪的1类LSA
Link State Database
Type   : Router
Ls id   : 3.3.3.3
Adv rtr  : 3.3.3.3
Ls age  : 970
Len   : 36
Options  : ABR E
seq#  : 80000007
chksum : 0x7fe4
Link count: 1
\* Link ID: 192.168.123.3
Data : 192.168.123.3
Link Type: TransNet
Metric : 1

我们来总结一下,针对不同的链路类型,OSPF 1类LSA在描述不同链路类型的时候,LSID及Data字段的内容有不同:

img

2) LSA类型2-网络LSA(Network LSA)

在多路访问型MA网络中(例如以太网,或者帧中继网络),会选举DR、BDR,而所有的Drother都只能和DR及BDR建立邻接关系,Drother也就是非DR、BDR路由器之间不会建立全毗邻的OSPF邻接关系。
从某种层面上说,DR实际上代表了这个MA网络,在本区域内泛洪2类LSA,来呈现该MA网络中的所有路由器。因此2类LSA仅存在于有MA网络的area中并且由DR发送,用来描述这个MA网络中的所有路由器(的Router-ID)。

img

在上例中,R3的GE0/0/0口是123.0网络的DR,因此R1、R2都只和R3建立全毗邻的邻接关系。这时候R3就成了这个MA网络的代表者,其发送2类LSA,该LSA包含的内容如图,详细信息见下,注意该2类LSA也只是在area1内泛洪

[R3] display ospf lsdb network
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.1
Link State Database
Type   : Network          #LSA类型为network lsa,也就是类型2
Ls id   : 192.168.123.3      #LS ID链路状态ID为DR的接口IP地址
Adv rtr  : 3.3.3.3           #通告者RouterID,自然就是R3的RouerID
Ls age  : 1256
Len    : 36
Options  : E
seq#   : 80000003
chksum  : 0x2a1e
Net mask : 255.255.255.0    #掩码信息
Priority : Low
Attached Router  3.3.3.3    #连接到这个MA网络的路由器:R3
Attached Router  1.1.1.1    #连接到这个MA网络的路由器:R1
Attached Router  2.2.2.2    #连接到这个MA网络的路由器:R2

总结一下:
2类LSA,也就是网络LSA,由DR产生,描述其在该MA网络上连接的所有路由器的RouterID(包括DR自己)以及该MA网络的掩码。
2类LSA只在本区域Area内洪泛,不允许跨越ABR。而且只有在MA网络才会出现。
2类LSA中没有COST字段(因此需借助1类LSA来进行SPF算法)

得益于1、2类LSA,OSPF在一个区域内的路由计算就没有问题了。

3) LSA类型3-网络汇总LSA(Network Summary LSA)

前两类LSA解决了区域内路由计算的问题,那么区域间呢?如果路由器需要访问其他区域呢?
这时就需要3类LSA。3类LSA是网络汇总LSA,这里的“汇总”二字,其实翻译为“归纳”更贴切,它和路由汇总是完全不同的概念。由于ABR同时属于两个以上的区域(其中必须有骨干区域),它知道这些区域的1、2类LSA,那么就能做件事:将某个区域的1、2类LSA,做个归纳,然后为其他区域生成3类LSA并泛洪到其他区域中,如此一来,区域间的路由计算就没问题了。.
因此3类LSA,由ABR产生:

img

上图中,R3将area0内的LSA1做了归纳,然后为area1注入LSA3,这个LSA3实际上是描述的192.168.34.0/24这个网段,以及cost值,当然,这个cost值实则为R3的Serial4/0/0口的接口cost。

img

上图是R3将area1内的网络信息通过LSA3注入到了area0中,其中包含三个网段信息,分别是192.168.123.0/24、1.1.1.1/32、2.2.2.2/32。那么这样一来R4就能进行计算,得出三条路由。
来看一下R3的LSDB

[R3] display ospf lsdb
OSPF Process 1 with Router ID 3.3.3.3
Link State Database

Area: 0.0.0.0
Type   LinkState ID  AdvRouter Age Len  Sequence  Metric
Router  4.4.4.4     4.4.4.4   1574 48  80000002   48
Router  3.3.3.3     3.3.3.3   1573 48  80000002   48
Sum-Net 192.168.123.0 3.3.3.3    1593 28  80000001    1
Sum-Net 2.2.2.2     3.3.3.3   1350 28  80000001    1
Sum-Net 1.1.1.1     3.3.3.3   1386 28  80000001    1

Area: 0.0.0.1
Type   LinkState ID  AdvRouter  Age Len  Sequence  Metric
Router  2.2.2.2    2.2.2.2   1351 48  80000005    1
Router  1.1.1.1     1.1.1.1   1387 48  80000006    1
Router  3.3.3.3     3.3.3.3    1597 36  80000007    1
Network 192.168.123.3  3.3.3.3    1638 36  80000003    0
Sum-Ne192.168.34.0  3.3.3.3    1593 28  80000001   48

在更详细点的来查看一下R3产生的3类LSA

[R3] display ospf lsdb summary
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0
\# R3为area0注入的LSA3
Link State Database
Type : Sum-Net
Ls id   : 192.168.123.0
Adv rtr  : 3.3.3.3
Ls age : 1637
Len  : 28
Options  : E
seq#   : 80000001
chksum  : 0x1b50
Net mask : 255.255.255.0
Tos 0 metric: 1
Priority : Low

Type   : Sum-Net
Ls id   : 2.2.2.2      #描述2.2.2.2/32这个子网的LSA3
Adv rtr  : 3.3.3.3
Ls age  : 1394
Len    : 28
Options  : E
seq#   : 80000001
chksum  : 0xbe89
Net mask : 255.255.255.255
Tos 0 metric: 1#cost=1
Priority : Low

Type   : Sum-Net
Ls id   : 1.1.1.1      #描述1.1.1.1/32这个子网的LSA3
Adv rtr  : 3.3.3.3
Ls age  : 1430
Len    : 28
Options  : E
seq#   : 80000001
chksum  : 0xec5f
Net mask : 255.255.255.255
Tos 0 metric: 1#cost=1
Priority : Low

Area: 0.0.0.1
\#R3为area1注入的LSA3
Link State Database
Type   : Sum-Net
Ls id   : 192.168.34.0      #描述192.168.34.0/24这个子网
Adv rtr  : 3.3.3.3
Ls age  : 1637
Len    : 28
Options  : E
seq#   : 80000001
chksum  : 0xc9cb
Net mask : 255.255.255.0
Tos 0 metric: 48#cost为48
Priority : Low

以上就是R1在area0及area1中产生的3类LSA。事实上3类LSA由ABR就是将某个区域的子网信息通告给其他区域。往更深的角度思考,其实OSPF在area之间的3了LSA传递很像距离矢量路由协议的行为。

4)LSA类型4-ASBR汇总LSA(ASBR Summary LSA)

img

为了讲解LSA4及LSA5,我们需要将配置做点小变更。在R4上,我们开设一个新的Loopback接口,配置一个IP地址,子网位44.44.44.0/24,现在我们使用import-route的方式,将44.44.44.0/24的直连路由重发布进OSPF。然后继续我们的讲解:
4类LSA是一个指向ASBR的LSA由该ASBR所在的area中的ABR产生(这点要格外留意)。
ASBR作为域边界路由器,将外部的路由通过重发布的方式注入了OSPF域,这些外部路由在OSPF中进行传递(这些外部路由是以5类LSA的形式在域内传播),而我们OSPF内部的路由器如果想前往这些外部网段,则需要同时具备两个条件:

· 知道外部的路由(这通过重发布的动作,已经完成了注入,借助5类LSA完成传播)

· 知道完成这个重分发动作的ASBR的位置

也就是说,我们在围城里,想要去围城外的某个地方,需具备两个条件,1是你要知道外头有什么,2是你要知道城门在哪里,所以5类LSA告诉你外头有啥4类LSA告诉你城门是谁
关键在于第二点。与ASBR在同一区域的区域内部路由器(例如本实验中的R3),能通过ASBR(R4)产生的1类LSA知道该ASBR的位置(1类LSA中E位=1,所以与ASBR同区域的路由器都知道),但是问题来了,1类LSA的泛洪范围是本区域内,那么该区域外的路由器(如area1中的R1、R2),如何得知这台ASBR的位置呢?那么就需要借助4类LSA了。

img

因此4类LSA由ABR产生,用来告诉与ASBR不在同一个区域内的其他OSPF Router关于 ASBR的信息

img

上图中R4作为ASBR,做了路由import,将直连路由4.4.4.4/32引入了OSPF。这些路由通过5类LSA的形式在OSPF Domain里扩散。但是4.4.4.4/32的路由要真正加载进OSPF路由表,还需要一个重要因素,那就是他们得知道注入这条外部路由的ASBR在哪儿。我们已经说了,与ASBR R4同处一个area的R3已经通过LSA1知道了ASBR,但是area1内的路由器却并不知道,因为R4产生的1类LSA只能够在area0内泛洪。
在这个时候,R3作为ABR,就扮演一个重要作用,它自己得知ASBR的位置后,会向area1注入4类LSA,用于描述ASBR。这样一来area1内的R1及R2就既通过LSA5学习到了路由4.4.4.4/32,又通过LSA4了解到了ASBR的位置,因此这条外部路由才能够被加载进他们的路由表中。
我们在R1上查看一下这个4类LSA:

[R1]display ospf lsdb asbr
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.1
Link State Database
Type   : Sum-Asbr
Ls id   : 4.4.4.4#ASBR的RouterID
Adv rtr  : 3.3.3.3       #通告这条4类LSA的ABR的RouterID
Ls age  : 1037
Len    : 28
Options  : E
seq#   : 80000001
chksum  : 0x2ce3
Tos 0 metric: 48      #ABR也就是R3自己到达ASBR的开销
5)LSA类型5-AS外部LSA AS External LSA)

img

R4此刻已经是一台ASBR了,因为它将外部路由44.44.44.0/24通过import-route的方式注入到了OSPF中,这条外部路由实际上是通过LSA5在整个OSPF domain内泛洪。

[R1]display ospf lsdb ase
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Type   : External
Ls id   : 44.44.44.0      #注入进来的这条外部路由的网络号
Adv rtr  : 4.4.4.4 #ASBR的RouteriD
Ls age  : 781
Len    : 36
Options  : E
seq#   : 80000001
chksum  : 0xcde2
Net mask : 255.255.255.0#外部路由的掩码
TOS 0 Metric: 1       #这条外部路由的外部metric
E type  : 2          #外部路由的metric类型,为metric-type 2
Forwarding Address : 0.0.0.0
Tag    : 1
Priority : Medium
6)LSA类型7:NSSA外部LSA(NSSA External LSA)

7类LSA是一种非常特殊的LSA,要注意的是这种LSA作为一种描述外部路由的LSA它只能被在NSSA中进行泛洪,不能跨越NSSA进入骨干区域0。特殊区域NSSA会阻挡从骨干区域area0中过来的5类LSA进入,同时允许NSSA本地始发外部路由,这些外部路由以7类LSA的形式在本地NSSA中进行泛洪,当这些7类LSA到达NSSA的ABR时,由该ABR负责将这些7类LSA转换成5类LSA,方可注入骨干区域。

img

留意一下上图,我们将配置做一点变更:将area1配置为NSSA。然后在R1上再创建一个Loopback1,配置一个11.11.11.0/24的子网IP,然后将这个直连路由import到OSPF中:

img

这样一来,这条外部路由由于是在特殊区域NSSA中被注入的,那么它是以LSA类型7注入进来,并在NSSA area1内泛洪的。
在R2上做一下查看:

[R2]display ospf lsdb
OSPF Process 1 with Router ID 2.2.2.2
Link State Database
Area: 0.0.0.1
Type   LinkState ID  AdvRouter     Age Len  Sequence  Metric
Router  2.2.2.2     2.2.2.2      100 48  80000006    1
Router  1.1.1.1     1.1.1.1      100 48  80000007    1
Router  3.3.3.3     3.3.3.3      100 36  80000006    1
Network  192.168.123.3  3.3.3.3      100 36  80000003    0
Sum-Net  192.168.34.0  3.3.3.3      148 28  80000001   48
NSSA   11.11.11.0   1.1.1.1      163 36  80000001    1

我们看到area 1中,已经出现了一条NSSA类型的LSA,这就是7类LSA。

再来看一下详细内容:

[R2] display ospf lsdb nssa 11.11.11.0
OSPF Process 1 with Router ID 2.2.2.2
Area: 0.0.0.1
Link State Database
Type   : NSSA
Ls id  : 11.11.11.0
Adv rtr  : 1.1.1.1
Ls age  : 253
Len    : 36
Options  : NP
seq#   : 80000001
chksum  : 0xf90
Net mask : 255.255.255.0
TOS 0 Metric: 1
E type  : 2
Forwarding Address : 1.1.1.1
Tag    : 1
Priority : Low

我们看到,其实7类LSA在报文格式上,与5类LSA没有明显的差别。两者都用于描述外部路由。但是7类LSA只能够存在于NSSA中,不能被泛洪到常规区域中。因此在本实验中,R3也能够从area1中收到R1产生的7类LSA,并且在路由表中加载如下路由:

[R3] display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————
Routing Tables: Public
Destinations : 16    Routes : 16
Destination/Mask  Proto  Pre  Cost Flags  NextHop     Interface
11.11.11.0/24   O_NSSA 150  1   D   192.168.123.1  GigabitEthernet0/0/0
……

但是7类LSA是不能进入area0的,那么area0内的用户如何能够学习到这条外部路由呢?R3作为一台ABR,就发挥了很重要的作用,它会做一个“7转5”的动作,也就是将7类LSA转换成5类LSA,然后在泛洪到area0中,从而泛洪到其他常规区域中:

img

我们可以在R4上再做查看:

[R4] display ospf lsdb
OSPF Process 1 with Router ID 4.4.4.4
Link State Database
Area: 0.0.0.0
Type   LinkState ID  AdvRouter     Age Len  Sequence  Metric
Router  4.4.4.4     4.4.4.4      765 48  8000000C   48
Router  3.3.3.3     3.3.3.3      686 48  8000000B   48
Sum-Net  192.168.123.0  3.3.3.3      685 28  8000000A    1
Sum-Net  2.2.2.2     3.3.3.3      640 28  80000001    1
Sum-Net  1.1.1.1     3.3.3.3      642 28  80000001    1

AS External Database
Type   LinkState ID  AdvRouter     Age Len  Sequence  Metric
External 44.44.44.0   4.4.4.4      638 36  80000001    1
External 11.11.11.0   3.3.3.3      642 36  80000001    1

我们看到,11.11.11.0这条外部SLA,到了area0里的R4上,就变成了5类LSA了,并且advrouter,也就是通告者是R3。

4、特殊区域详解

img

被设置为stub区域的区域不会学习其他区域的详细路由条目,为保证Stub区域能够到达自治系统外部,Stub区域的ABR将生成一条缺省路由(对应三类LSA),并发布给Stub区域中的其他路由器。

1、Stub area末梢区域

区域里面允许出现1类、2类、3类LSA ,不允许出现4/5类 LSA,会生成 一条默认的三类LSA

STUB特点:

​ 1、骨干区域不能被配置为Stub区域。

​ 2、如果要将一个区域配置成Stub区域,则该区域中的所有路由器必须都要配置成Stub路由器。

​ 3、Stub区域内不能存在ASBR,自治系统外部路由不能在本区域内传播。

​ 4、该区域没有虚链路穿越。

​ 5、当外部网络发生变化后,Stub区域内的路由器是不会直接受到影响

​ 6、所有STUB区域的路由器上均做STUB配置。

​ 7、该区域存在一个或多个ABR。

STUB作用:

​ 1、拒绝四类、五类LSA

​ 2、下发三类LSA默认路由。

配置:

AR4P配置
[Huawei]ospf 1
[Huawei-ospf-1]area  1
[Huawei-ospf-1-area-0.0.0.1]stub       //区域内所有设备都配置

AR1配置
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]stub      //区域内所有设备都配置 
[Huawei-ospf-1-area-0.0.0.1]quit
[Huawei]display  ospf lsdb               //查看ospf数据库
2、Totally stub area完全末梢区域

区域里面允许出现1/2类LSA ,不允许出现3/4/5类LSA ,但是会生成一条默认的3类LSA

作用:

1、拒绝三类、四类、五类LSA

2、下发三类LSA默认路由。

配置:

AR4配置
[Huawei]ospf 1
[Huawei-ospf-1]area  1
[Huawei-ospf-1-area-0.0.0.1]stub  no-summary       //在STUB 基础上 ,ABR上追加此命令

AR1配置
[Huawei]ospf 1
[Huawei-ospf-1]area  1
[Huawei-ospf-1-area-0.0.0.1]stub  no-summary        //在STUB 基础上 ,ABR上追加此命令

[Huawei]display  ospf lsdb                 查看ospf数据库
	 OSPF Process 1 with Router ID 1.1.1.1
		 Link State Database 

		         Area: 0.0.0.1
 Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
 Router    2.2.2.2         2.2.2.2             86  36    8000000A       1
 Router    1.1.1.1         1.1.1.1             81  48    8000000E       1
 Network   192.168.2.1     1.1.1.1             81  32    80000002       0
 Sum-Net   0.0.0.0         2.2.2.2            454  28    80000001       1
3、Not-So-Stubby Area 非完全末梢区域(NSSA)

允许出现1/2/3/7类LSA , 会生成一条缺省的7类LSA ,不允许出现的4/5LSA,在ABR上 7类自动转为5类

  1. 允许存在ASBR;
  2. 该区域ASBR引入的外部路由产生七类LSA;
  3. 区域所有的设备均需配置;
  4. 该区域七类LSA传播到其他区域时,将有此区域的ABR转换成五类LSA;
  5. 默认,该区域的ABR不会向此区域通告缺省路由。

作用:

​ 过滤三类、四类、五类LSA(远端传递过来的)

配置:

配置命令
[Huawei]ospf 1
[Huawei-ospf-1]area  1
[Huawei-ospf-1-area-0.0.0.1]nssa
4、totally-NSSA

区域里面允许出现1/2/7类LSA 以及一条 缺省的7类LSA 和一条缺省的3类LSA ,不允许出现的是3/4/5类LSA

配置命令
[R3]ospf 1
[R3-ospf-1]area 2
[R3-ospf-1-area-0.0.0.2]nssa no-summary    //在NSSA 基础上 ,ABR上追加此命令
OSPF特殊区域类型(优化OSPF数据库和路由表):
作用 是否下发默认路由
STUB 过滤四类、五类LSA 下发三类LSA缺省
totally-STUB 过滤三类、四类、五类LSA 下发三类LSA缺省
NSSA 过滤四类、五类LSA(远端传送过来的)
totally-NSSA 过滤三类、四类、五类LSA 下发三类LSA缺省

四、OSPF的配置

1、基础配置
创建OSPF进程,并指定OSPF进程号及RouterID

[Router] ospf [ process-id | router-id router-id ]

其中process-id为进程号,关于进程号的详细描述,请见下文。另外Router-ID关键字指定的是本台路由器ospf的Router-ID,建议在创建OSPF进程时,采用该方法手工配置Router-ID。

在area0中宣告指定接口

[Router-ospf] area area-id
[Router-ospf-area] network ip-address wildcard-mask
上面的network命令用于在特定接口上激活OSPF。

OSPF进程号(Processor ID):

进程号取值范围1-65535,只标识ospf在本路由器内的一个进程,这个进程号只是本地有效。在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF 进程之间的路由交互相当于不同路由协议之间的路由交互。
进程号是本地有效,若不同的路由器之间OSPF对接,两台路由器的OSPF进程号可以不同,这是不会有任何问题的,但是为了保证网络配置的规范性和标准化,建议还是采用相同的进程号。

通配符掩码wildcard-mask:

通配符是一个用于决定哪些IP地址位该精确匹配(0代表精确匹配)哪些地址位被忽略的32位数值,通配符掩码通常用于处理访问控制列表(ACL)、OSPF和EIGRP等路由协议的网络通告。下面看一下网络掩码netmask和通配符掩码wildcard-mask的区别:

接下去看几个例子:

上面的例子中,我们在network命令后关联的IP是172.16.1.0,通配符掩码是0.0.0.255,那么将这两个数都转成二进制,其中通配符掩码位为0的位,必须严格匹配,为1的位则无所谓。那么我们就看路由器本地的接口IP,去做对应,如果能匹配上,该接口就激活OSPF,否则就不激活。

同样的拓扑,如果我们将通配符掩码换成0.0.255.255,则最后两个八位组无所谓,最终路由器的三个接口都激活了OSPF。

2、示例(单区域)

网络拓扑中包含三台路由器及两台PC;

为了能够更直观的观察到实现现象,每台路由器使用x.x.x.x的地址作为OSPF的RouterID,其中x为设备编号,例如R1的RouterID为1.1.1.1,以设备的接口编号及IP编址如图所示。

R1的配置如下:

#完成接口IP的配置
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 192.168.1.254 24

#创建OSPF进程1,并且设置router-ID为1.1.1.1;在R1的GE0/0/0及GE0/0/1口上激活OSPF:
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255

R2的配置如下:

#完成接口IP的配置
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 24

#创建OSPF进程1,并且设置router-ID为2.2.2.2;在R1的GE0/0/0及GE0/0/1口上激活OSPF:
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 192.168.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255

R3的配置如下:

#完成接口IP的配置
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 192.168.2.254 24

#创建OSPF进程1,并且设置router-ID为3.3.3.3;在R3的GE0/0/0及GE0/0/1口上激活OSPF
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 192.168.2.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255

完成配置后我们来做一下查看及验证,首先看一下OSPF的邻居关系,这是OSPF路由收敛的基础,如果邻居关系的状态不正确,那么路由肯定是无法正常获悉的,我们在R1上先做个查看:

[R1] display ospf peer
OSPF Process 1 with Router ID 1.1.1.1
Neighbors
#以下是R1的G0/0/0口的OSPF邻居
Area 0.0.0.0 interface 192.168.12.1(GigabitEthernet0/0/0)’s neighbors
Router ID: 2.2.2.2 Address: 192.168.12.2
State: Full Mode:Nbr is Master Priority: 1
DR: 192.168.12.2 BDR: 192.168.12.1 MTU: 0
Dead timer due in 34 sec
Retrans timer interval: 5
Neighbor is up for 01:53:16
Authentication Sequence: [ 0 ]

使用display ospf peer命令能查看OSPF邻居关系,上面的输出就是R1的OSPF邻居关系,我们看到R1发现了一个OSPF邻居,这个OSPF邻居是连接在R1的GE0/0/0口上,且其RouterID为2.2.2.2,接口IP为192.168.12.2。最重要的是状态为Full,表示R1与R2的OSPF邻居关系已经为全毗邻状态。
同理在R2上应该能看到两个OSPF邻居,而在R3上能看到一个OSPF邻居。
接下去看看路由表。

[R1] display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————
Routing Tables: Public
Destinations : 12 Routes : 12
Destination/Mask ProtoPre CostFlags NextHop Interface
192.168.1.0/24 Direct 0 0 D 192.168.1.254 GigabitEthernet0/0/1
192.168.1.254/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
192.168.2.0/24 OSPF10 3 D 192.168.12.2 GigabitEthernet0/0/0
192.168.12.0/24 Direct 0 0 D 192.168.12.1 GigabitEthernet0/0/0
192.168.12.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.12.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/0
192.168.23.0/24 OSPF 10 2 D 192.168.12.2 GigabitEthernet0/0/0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0

在上述输出中,我们看到R1已经学习到两条OSPF路由,分别是192.168.2.0/24及192.168.23.0/24;同理在R2就R3上也能看到相应的OSPF路由。现在PC1及PC2就能够互相通信了。

3、示例(多区域)

网络中包含三台路由器及两台PC;
为了能够更直观的观察到实现现象,每台路由器使用x.x.x.x的地址作为OSPF的RouterID,其中x为设备编号,例如R1的RouterID为1.1.1.1;OSPF区域的规划如图所示;

R1的配置如下:

#完成接口IP的配置
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 192.168.1.254 24

#在R1的GE0/0/0及GE0/0/1口上激活OSPF
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255

R2的配置如下:

#完成接口IP的配置
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 24

#在R2的GE0/0/0及GE0/0/1口上激活OSPF,需留意,R2是ABR,因此要注意激活的OSPF接口所在的区域。
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 192.168.12.0 0.0.0.255
[R2-ospf-1] area 1
[R2-ospf-1-area-0.0.0.1] network 192.168.23.0 0.0.0.255

R3的配置如下:

#完成接口IP的配置
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 192.168.2.254 24

#在R3的GE0/0/0及GE0/0/1口上激活OSPF
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 192.168.2.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255

完成配置后,PC1与PC2即可互相ping通。

4、查看及验证

查看OSPF协议相关运行参数
display ospf brief
查看OSPF邻居表
display ospf peer
查看LSDB表
display ospf lsdb
查看OSPF路由
display ospf routing

今天的文章OSPF详解分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8962.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注