OSPF概述
回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,而对于这个网络中的所有路由器而言,他们并不清楚网络的拓扑,他们只是简单的知道要去往某个目的应该从哪里走,距离有多远。
相比之下链路状态路由协议就要复杂的多:
1. LSAs的泛洪
运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系。之后彼此之间开始交互LSA,也就是链路状态通告,注意这里交互的不是路由信息,而是链路状态通告,那么什么是链路状态通告呢,你可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告,更通俗点的讲法是,每台路由器都产生一个通告,这个通告描述它自家门口的情况。
2. LSDB的组建
每台路由器都会产生LSAs,路由器将搜集到的网络中的LSAs放入自己的LSDB(链路状态数据库),有了LSDB,路由器也就清楚了全网的拓扑。因为LSDB中所存储的每条LSA都是由网络中各路由器产生并且描述其直连接口各项信息的条目。
3. SPF计算
接下去,每台路由器基于LSDB,使用SPF(最短路径算法)进行计算。SPF是OSPF路由协议的一个核心算法,用来在一个复杂的网络中做出路由优选的决策。经过SPF算法的计算后,每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,事实上路由器就已经知道了到达网络各个角落的最优路径。
4. 维护路由表
最后,路由器将计算出来的最优路径,加载进自己的路由表。
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域内,禁止出现两台路由器拥有相同的OSPFRouterID。
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值的总和。
注意:上图只是为了帮助大家理解路由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一共有五种报文,各有各的用途:
Hello建立和维护OSPF邻居关系
DBD链路状态数据库描述信息(描述LSDB中LSA头部信息)
LSR链路状态请求,用于向OSPF邻居请求链路状态信息
LSU链路状态更新(包含一条或多条LSA)
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邻居关系建立过程
OSPF邻居关系的建立过程是我们在学习OSPF过程中的一个重点,而且非常具有研究价值,就OSPF的实际部署而言,掌握这里头的机制也是很有必要的,因为邻居关系的建立是OSPF工作的基本,如果连邻居关系都建立不起来,就别谈其他的了。在实际业务部署中,可能会碰到各种问题导致OSPF邻居关系无法正常建立,因此这个模块非常值得推敲。
本文描述数据通信基础性知识,因此更加深入的内容暂不涉及。
6、OSPF网络类型
OSPF是一个“接口敏感型”协议,这句话非常值得细细品味。在上面我们介绍ospf cost的时候,就曾经讲过,路由的cost实际上得累加上入接口的cost。而OSPF中后续要介绍的DR、BDR的概念,实际上也是基于接口的,另外邻居关系的建立,也是与接口有关,因此其实很多机制着眼点都与接口有关。一旦我们在某个接口上激活了OSPF,那么这个接口将会根据该接口的二层(数据链路层)封装,捆绑对应的OSPF网络类型,注意,不同的OSPF接口网络类型,OSPF在该接口上的操作将有所不同。
OSPF支持的网络类型:
·
点到点网络
·
·
广播型多路访问网络
·
·
非广播型多路访问(NBMA)网路
·
·
P2MP网络
·
常见链路层协议对应的默认网络类型
如果一个接口是以太网接口,那么该接口激活OSPF后,该接口的缺省OSPF网络类型为Broadcast也就是广播型多路访问网络。而如果一个接口是serial接口,二层封装为HDLC或者PPP,那么激活OSPF后,其缺省的OSPF网络类型就是Point-to-Point也就是点对点。
接口的OSPF网络类型是可以通过命令修改的。
7、DR、BDR
在广播多路访问网络(Multi Access)中,例如以太接口,所有的路由器的接口都是相同网段、处于同一个广播网络中,这些接口如果两两建立OSPF邻居关系,这就意味着,网络***有:
n(n-1)/2
这么多个OSPF邻居关系,维护如此多的邻居关系不仅仅额外消耗设备资源,更是增加了网络中LSA的泛洪数量。
·
为减小多路访问网络中的 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的泛洪:
假设网络已经完成了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)的概念
单区域存在的问题:
设想一下,如果OSPF没有区域的概念,或者整个OSPF网络就是一个区域,那么会有什么问题?在一个区域内,LSA会被泛洪,并且同一个区域的OSPF路由器,关于该区域的LSA会同步,这样一来,如果整个网络就一个单独的区域的话,如果规模非常庞大,那么LSA的泛洪会很严重,OSPF路由器的负担很大,因为OSPF要求区域内的所有路由器,LSDB必须统一,这样以便计算出一个统一的、无环的拓扑;
区域内部动荡会引起全网路由器的SPF计算;
LSDB庞大,资源消耗过多,设备性能下降,影响数据转发;
每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总。
OSPF多区域:
基于上述原因,OSPF设计了区域area的概念
多区域的设计减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的
在区域边界可以做路由汇总,减小了路由表
充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由
多区域提高了网络的扩展性,有利于组建大规模的网络
OSPF区域中的骨干区域area0:
在部署OSPF时,要求全OSPF域,必须有且只能有一个area0,Area 0为骨干区域,骨干区域负责在非骨干区域之间发布由区域边界路由器汇总的路由信息(并非详细的链路状态信息),为避免区域间路由环路,非骨干区域之间不允许直接相互发布区域间路由。因此,所有区域边界路由器都至少有一个接口属于Area 0,即每个区域都必须连接到骨干区域。
OSPF路由器的角色
OSPF路由器的角色:
区域内路由器Internal Router
区域边界路由器Area Border Router
骨干路由器Backbone Router
AS边界路由器AS Boundary Router
三、OSPF LSAs及特殊区域
1、前言
前面我们已经介绍过了,对于OSPF这类的链路状态路由协议而言,LSA链路状态通告是工作在底层、最为关键、最为核心的构件,正因为有了LSA,OSPF能够准确的描述网络拓扑并且最终计算出最优的路由。OSPF设计了多种LSA,以便描述网络拓扑及各种类型的路由。
2、实验环境
上图是本次我们用于讲解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值。
例如上图中,所有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.33.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字段的内容有不同:
file:///C:\Users\sy\AppData\Local\Temp\ksohtml\wps16E2.tmp.jpg
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)。
在上例中,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产生:
上图中,R3将area0内的LSA1做了归纳,然后为area1注入LSA3,这个LSA3实际上是描述的192.168.34.0/24这个网段,以及cost值,当然,这个cost值实则为R3的Serial4/0/0口的接口cost。
上图是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.03.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)
为了讲解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了。
因此4类LSA由ABR产生,用来告诉与ASBR不在同一个区域内的其他OSPF Router关于 ASBR的信息。
上图中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)
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,方可注入骨干区域。
留意一下上图,我们将配置做一点变更:将area1配置为NSSA。然后在R1上再创建一个Loopback1,配置一个11.11.11.0/24的子网IP,然后将这个直连路由import到OSPF中:
这样一来,这条外部路由由于是在特殊区域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中,从而泛洪到其他常规区域中:
我们可以在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