技术博客官网也是一个不错的学习平台(第411篇)
技术博客官网也是一个不错的学习平台(第411篇)
今天的主题是OSPF 大纲
技术成就梦想51CTO-中国知名的数字化人才学习平台和技术社区
OSPF 概念型问题_wx655f0abb3511b的技术博客_51CTO博客
OSPF协议介绍及配置 - airoot - 博客园 (cnblogs.com)
一、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字段的内容有不同:
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。
4、特殊区域详解
为了让我们的讲解更加的通俗易懂,我们看上面这个拓扑,这是一个根据客户业务逻辑结构所涉及的OSPF网络,共有三个区域(实际上远远不止),骨干区域area0为一级行及二级行所部署,***行部署的是OSPF的常规区域,为了保证网络的畅通,我们将网络中的各个角落都宣告进了OSPF,感觉上很爽,但是其实路由器很压抑,毕竟随着设备越来越多、网络前缀越来越多,路由条目势必逐渐增多,那么路由器就亚历山大了,毕竟庞大的路由表及LSA在极大地消耗着路由器的资源。
从网络优化的角度,我们一直在试图在保证网络通畅的情况下减少网络中传递的路由条目及LSA的数量,路由汇总就是一种很好的方式,当然,从OSPF的设计规划角度,我们还有特殊区域可供我们灵活运用,下面来看看OSPF特殊区域是如何帮助我们减少LSA泛洪的。
我们拿area1做参考区域,当area1为常规区域时,区域中会有多少种LSA在泛洪呢?1类是必然有的,由于area1中存在以太网链路,因此2类LSA也有。另外其他区域的3类LSA被ABR也都注入进了本区域。再者由于area2的ASBR引入了外部路由(5类LSA),因此LSA5也会被泛洪进area1,当然4类LSA也跟着来了。那么如此一来,area1中就有1、2、3、4、5,共计5种类型的LSA,齐活了。但是仔细一想我们就发现,其实area1作为“叶”区域,没必要知道外部路由的详细情况,我只需要知道有那么一条路,让我到达域外即可,因此,第一种特殊区域:末梢区域 stub area。
实验环境介绍
本次内容讲解使用的实验环境如上:
· R1、R2、R3、R4运行OSPF;
· 设备互联地址IP如图所示;
· 所有设备配置Loopback0口,IP为x.x.x.x/32,其中x为设备编号。例如R1的Loopback0地址为1.1.1.1/32,该地址不network进OSPF,只作为设备OSPF RouterID使用;
· R4上配置Loopback1接口,IP子网为44.44.44.0/24,R4将这条直连路由import进OSPF。
R1的配置如下(省略接口Ip地址的配置):[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 1
[R1-ospf-1-area-0.0.0.1] network 10.1.12.1 0.0.0.0
R2的配置如下(省略接口Ip地址的配置):
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 1
[R2-ospf-1-area-0.0.0.1] network 10.1.12.2 0.0.0.0
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.23.2 0.0.0.0
R3的配置如下(省略接口Ip地址的配置):
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 10.1.23.3 0.0.0.0
[R3-ospf-1] area 2
[R3-ospf-1-area-0.0.0.2] network 10.1.34.3 0.0.0.0
R4的配置如下(省略接口Ip地址的配置):
[R4] acl 2000
[R4- acl-basic-2000] rule permit source 44.44.44.0 0
[R4- acl-basic-2000] quit
[R4] route-policy RP permit node 10
[R4-route-policy] if-match acl 2000
[R4-route-policy] quit
[R4] ospf 1 router-id 4.4.4.4
[R4-ospf-1] import-route direct route-policy RP
[R4-ospf-1] area 2
[R4-ospf-1-area-0.0.0.2] network 10.1.34.4 0.0.0.0
下面我们开始介绍各种特殊区域:
1.Stub area末梢区域
我们可以通过配置,可以将一个常规区域设置为stub区域。例如下图,将area1配置为stub area。Stub区域将禁止4、5类LSA进入该区域,同时该区域的ABR将会自动下发一条默认路由(3类LSA)进该区域,以确保区域内访问区域外的路由通路没有问题。这可以形象的理解为:“外面的世界再怎么精彩,你不用告诉我细节,只要让我出去就行了”。这就是stub area的设计思路。当引入大量的外部路由进OSPF,适当的规划某些区域为stub,可以起到不错的网络优化作用,大大的降低路由器需要维护的路由条目数量。
有一点值得注意,你不能将骨干区域area0配置为stub区域,同时,让一个区域被指定为stub area,区域内将不允许注入外部路由,也就是不能做重发布。
在初始情况下R1的路由表如下:
[R1] display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————
Routing Tables: Public
Destinations : 11?????? Routes : 11
Destination/Mask Proto? Pre? Cost? Flags NextHop???????? Interface
10.1.23.0/24?? OSPF 10?? 2 D?? 10.1.12.2????? GigabitEthernet0/0/0
10.1.34.0/24? OSPF? 10?? 3 D?? 10.1.12.2????? GigabitEthernet0/0/0
44.44.44.0/24? O_ASE150? 1? D?? 10.1.12.2???????? GigabitEthernet0/0/0
……
我们看到有其他区域的路由,以及外部路由44.44.44.0/24
再看一下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?????????? 1723? 36??? 80000005?????? 1
Router??? 1.1.1.1???????? 1.1.1.1??????????? 116? 36??? 80000007?????? 1
Network?? 10.1.12.1?????? 1.1.1.1??????????? 116? 32??? 80000004?????? 0
Sum-Net?? 10.1.23.0?????? 2.2.2.2?????????? 1710? 28??? 80000002?????? 1
Sum-Net?? 10.1.34.0?????? 2.2.2.2?????????? 1655? 28??? 80000002?????? 2
Sum-Asbr? 4.4.4.4???????? 2.2.2.2?????????? 1572? 28??? 80000002?????? 2
AS External Database
Type????? LinkState ID??? AdvRouter????????? Age? Len?? Sequence?? Metric
External? 44.44.44.0????? 4.4.4.4?????????? 1673? 36??? 80000002?????? 1
从上面能看到R1的LSDB里有1、2、3、4、5类LSA。
现在将area1配置为stub area:
R1的配置修改如下:
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 1
[R1-ospf-1-area-0.0.0.1] stub
[R1-ospf-1-area-0.0.0.1] network 10.1.12.1 0.0.0.0
R2的配置修改如下:
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 1
[R2-ospf-1-area-0.0.0.1]?stub
[R2-ospf-1-area-0.0.0.1] network 10.1.12.1 0.0.0.0
[R2-ospf-1-area-0.0.0.1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.23.2 0.0.0.0
需要注意的是,该命令要配置在stub区域中的所有路由器上,如果某台路由器没有配置,那么它将无法去其他stub area router建立邻接关系。
实现效果:
Area1中将不会在有4、5类LSA,也就是area2重发布进来的路由,被ABR(R2)过滤掉了,同时area1中的路由器将获取到一条ABR(R2)下发的3类LSA的默认路由。
[R1] display ip routing-table
Destination/Mask??? Proto?? Pre? Cost? Flags NextHop???????? Interface
0.0.0.0/0?? OSPF?? 10?? 2???? D? 10.1.12.2?????? GigabitEthernet0/0/0
10.1.23.0/24? OSPF?? 10?? 2??? D? 10.1.12.2?????? GigabitEthernet0/0/0
10.1.34.0/24? OSPF?? 10?? 3??? D? 10.1.12.2?????? GigabitEthernet0/0/0
我们发现之前的44.44.44.0/24这条外部路由没有了,另外多了一条OSPF默认路由,这条默认路由是由ABR R2产生的,是3类LSA描述的。这个时候R1还是能ping通44.44.44.44的。
[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??????????? 106? 36??? 80000005?????? 1
Router??? 1.1.1.1???????? 1.1.1.1??????????? 109? 36??? 80000004?????? 1
Network? 10.1.12.2?????? 2.2.2.2??????????? 106? 32??? 80000002?????? 0
Sum-Net 0.0.0.0???????? 2.2.2.2??????????? 158? 28??? 80000001?????? 1
Sum-Net? 10.1.23.0?????? 2.2.2.2??????????? 158? 28??? 80000001?????? 1
Sum-Net? 10.1.34.0?????? 2.2.2.2??????????? 158? 28??? 80000001?????? 2
再看R1的LSDB,我们发现4、5类LSA都没有了,只剩下1、2、3类LSA。
2. Totally stub area完全末梢区域
通过将区域规划为stub area,可以起到一定的网络优化作用,但是感觉上还不够彻底,除了外部路由,其他area的路由(LSAs)其实我也没必要知道太多细节,完全用一条默认路由替代也行嘛,那么你可以将area1配置为完全末梢区域(totally stub area),当一个区域被配置为完全末梢区域,这个区域将:
· 阻挡3、4、5类LSA进入本区域
· 区域的ABR自动下发一条3类LSA的默认路由进入本区域
这么一来,area1内路由器收到的LSA将进一步减少,在存储LSA及进行SPF算法运算的时候,耗费的资源自然也就减少了,另外当区域外拓扑出现变更的时候,对本区域的影响也将变为最小。
与stub区域类似,你无法将骨干区域area0配置为totally stub area,当然,如果一个区域被指定为totally stub area,你将不能在区域中的路由器上做路由重发布动作。
现在将area1配置为Totally stub area:
R1的配置修改如下:
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 1
[R1-ospf-1-area-0.0.0.1]?stub
[R1-ospf-1-area-0.0.0.1] network 10.1.12.1 0.0.0.0
R2(ABR)的配置修改如下:
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 1
[R2-ospf-1]?stub no-summary
[R2-ospf-1-area-0.0.0.1] network 10.1.12.1 0.0.0.0
[R2-ospf-1-area-0.0.0.1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.23.2 0.0.0.0
实现效果:
完成上述配置后,area1内的路由器(ABR除外)将只有本区域内的路由,同时都能获取到ABR下发的3类的默认路由。也就是说其他区域的路由以及外部注入的路由都被ABR阻挡在外,取而代之的是一条默认路由。
[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???????????? 27? 36??? 80000008?????? 1
Router??? 1.1.1.1???????? 1.1.1.1???????????? 29? 36??? 80000007?????? 1
Network?? 10.1.12.1?????? 1.1.1.1???????????? 25? 32??? 80000002?????? 0
Sum-Net?? 0.0.0.0???????? 2.2.2.2??????????? 572? 28??? 80000001?????? 1
3. Not-So-Stubby Area?非完全末梢区域(NSSA)
在前面的知识基础上,我们已经了解到,在保证网络连通性的情况下,减少LSA的泛洪以及精简路由表,我们可以将特定区域配置为末梢区域或完全末梢区域。看下面的拓扑,我们将area2配置为stub,那么,这个区域一来将阻挡来自其他区域的4、5类LSA,同时区域内的路由器禁止重发布外部路由,那么如果此时我期望这个区域保持“阻挡其他区域过来的4、5类LSA”这个特性,同时允许我在区域本地重发布路由呢?
例如,假设area2原先是作为一个末梢区域运行的,但突然有一个外部网络,需要接入到我们这个OSPF网络中,并且连接在area2中,那么这个时候,为了保证路由的可达,就必须向area2中注入外部路由了,而这又违反了stub area的规则。
这里就引入NSSA(not-so-stubby-area)的概念,中文翻译过来,可以理解为非完全末梢区域,当你将一个区域配置为NSSA,那么这个区域一来将阻挡骨干区域过来的4、5类LSA,同时允许区域本地import-route外部路由,这些外部路由以一种特殊的LSA类型—7类LSA在NSSA中泛洪,并且7类LSA不允许进入骨干区域或常规区域,NSSA的ABR会负责将7类LSA“转换”成5类LSA,从而在常规区域中进一步泛洪。上面的“允许区域本地注入”的意思是,NSSA这个区域的路由器配置重发布,如下图。
现在将area2配置为NSSA
R3的配置修改如下:
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 2
[R3-ospf-1-area-0.0.0.2]?nssa
[R3-ospf-1-area-0.0.0.2] network 10.1.34.3 0.0.0.0
[R3-ospf-1-area-0.0.0.2] area 0
[R3-ospf-1-area-0.0.0.0] network 10.1.23.3 0.0.0.0
R4(ASBR)的配置修改如下:
[R4] acl 2000
[R4- acl-basic-2000] rule permit source 44.44.44.0 0
[R4- acl-basic-2000] quit
[R4] route-policy RP permit node 10
[R4-route-policy] if-match acl 2000
[R4-route-policy] quit
[R3] ospf 1 router-id 4.4.4.4
[R3-ospf-1]?import-route direct route-policy RP
[R3-ospf-1] area 2
[R3-ospf-1-area-0.0.0.2] network 10.1.34.4 0.0.0.0
[R3-ospf-1-area-0.0.0.2]?nssa
实现效果:
将area2配置为nssa后,从骨干区域过来的4、5类LSA将无法进入NSSA,也就是说如果area1做了重发布,那么这些重发布的外部路由将无法进入NSSA(这是因为NSSA中不允许出现5类LSA),与此同时,area2允许本地的路由器做重发布动作,重发布进来的路由,以LSA7在NSSA中泛洪,大家在路由表中看到的这些外部路由,标记为“O_NSSA”,而这些7类LSA在“穿越”NSSA的ABR(R3)进入骨干区域之前,由ABR(R3)负责将7类LSA“转换”成5类LSA。最终area0及area1也都能学习到这些外部路由,只不过,他们路由表中呈现的是“O_ASE”标记。
我们在R3上验证一下:
[R3] display ip routing-table
Destination/Mask??? Proto???? Pre?? Cost?? Flags NextHop???????? Interface
10.1.12.0/24? OSPF???? 10??? 2?????? D?? 10.1.23.2??? GigabitEthernet0/0/0
44.44.44.0/24? O_NSSA? 150?? 1??????? D?? 10.1.34.4??? GigabitEthernet0/0/1
……
我们看到R3学习到了44.44.44.0/24这条外部路由,并且协议类型为“O_NSSA”表示这是一条通过LSA7计算出来的路由。
[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??? 2.2.2.2???????? 2.2.2.2??????????? 141? 36??? 80000014?????? 1
Router??? 3.3.3.3???????? 3.3.3.3??????????? 143? 36??? 80000012?????? 1
Network?? 10.1.23.2?????? 2.2.2.2??????????? 141? 32??? 80000002?????? 0
Sum-Net 10.1.34.0?????? 3.3.3.3??????????? 151? 28??? 80000001?????? 1
Sum-Net? 10.1.12.0?????? 2.2.2.2??????????? 160? 28??? 80000006?????? 1
Area: 0.0.0.2
Type????? LinkState ID??? AdvRouter????????? Age? Len?? Sequence?? Metric
Router??? 4.4.4.4???????? 4.4.4.4??????????? 106? 36??? 80000004????? 99
Router??? 3.3.3.3???????? 3.3.3.3??????????? 110? 36??? 80000003?????? 1
Network?? 10.1.34.4?????? 4.4.4.4??????????? 111? 32??? 80000001?????? 0
Sum-Net 10.1.23.0?????? 3.3.3.3??????????? 151? 28??? 80000001?????? 1
Sum-Net? 10.1.12.0?????? 3.3.3.3??????????? 144? 28??? 80000001?????? 2
NSSA??? 0.0.0.0???????? 3.3.3.3??????????? 145? 36??? 80000001?????? 1
NSSA??? 44.44.44.0????? 4.4.4.4??????????? 158? 36??? 80000001?????? 1
AS External Database
Type????? LinkState ID??? AdvRouter????????? Age? Len?? Sequence?? Metric
External? 44.44.44.0????? 3.3.3.3??????????? 106? 36??? 80000001?????? 1
我们看到R3的LSDB中,area2内有R4产生的7类LSA。同时R3自己做了7转5的动作,将7类LSA转换成了5类LSA,然后将这条44.44.44.0/24的5类LSA泛洪到骨干区域area0中。
所以在R2上,路由的类型就为O_ASE,这是因为描述44.44.44.0/24外部路由的LSA现在是5类LSA:
[R2] display ip routing-table
Destination/Mask??? Proto???? Pre? Cost??? Flags?? NextHop???????? Interface
10.1.34.0/24?????? OSPF???? 10?? 2??????? D???? 10.1.23.3?????? GigabitEthernet0/0/1
44.44.44.0/24????? O_ASE?? 150? 1??????? D???? 10.1.23.3??????? GigabitEthernet0/0/1
……
现在我们再去R4上看一下:
[R4] display ip routing-table
Destination/Mask??? Proto? Pre? Cost???? Flags NextHop???????? Interface
0.0.0.0/0?? O_NSSA 150? 1?????????? D? 10.1.34.3?????? GigabitEthernet0/0/0
10.1.12.0/24? OSPF?? 10?? 101???????? D? 10.1.34.3?????? GigabitEthernet0/0/0
10.1.23.0/24? OSPF?? 10?? 100???????? D? 10.1.34.3?????? GigabitEthernet0/0/0
R4的路由表中,有从骨干区域area0传递过来的LSA3计算出来的路由:10.1.12.0/24及10.1.23.0/24。同时也有NSSA的ABR(R3)自动下发的7类LSA的默认路由0.0.0.0/0。
那么,既然R4有了ABR下发的默认路由,实际上是能够到达R1、R2底下的网段的,其实也就不需要其他区域的路由了,因此可以在ABR(R3)上进一步做配置,过滤掉3类LSA,进一步减少NSSA内的LSA数量,R3的配置变更如下:
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 2
[R3-ospf-1-area-0.0.0.2] nssa no-summary
[R3-ospf-1-area-0.0.0.2] network 10.1.34.3 0.0.0.0
[R3-ospf-1-area-0.0.0.2] area 0
[R3-ospf-1-area-0.0.0.0] network 10.1.23.3 0.0.0.0
如此一来,R4的路由表:
[R4] display ip routing-table
Destination/Mask??? Proto? Pre? Cost???? Flags?? NextHop?????????? Interface
0.0.0.0/0?? O_NSSA? 150?? 1??????? D???? 10.1.34.3?????? GigabitEthernet0/0/0
就只有一条R3下发的7类默认路由了,当然这时候R3访问全网是能够通的。
四、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
CSDN 博客技术站
华为官方文档
什么是OSPF?为什么需要OSPF? - 华为 (huawei.com)
华三官方文档
1?OSPF
1.1? OSPF简介
OSPF(Open Shortest Path First,开放最短路径优先)是IETF(Internet Engineering Task Force,互联网工程任务组)组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2。下文中所提到的OSPF均指OSPF Version 2。
1.1.1? OSPF的特点
OSPF具有如下特点:
·?????适应范围广:支持各种规模的网络,最多可支持几百台路由器。
·?????快速收敛:在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
·?????无自环:由于OSPF根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
·?????区域划分:允许自治系统的网络被划分成区域来管理。路由器链路状态数据库的减小降低了内存的消耗和CPU的负担;区域间传送路由信息的减少降低了网络带宽的占用。
·?????等价路由:支持到同一目的地址的多条等价路由。
·?????路由分级:使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
·?????支持验证:支持基于区域和接口的报文验证,以保证报文交互和路由计算的安全性。
·?????组播发送:在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。
1.1.2? OSPF报文类型
OSPF协议报文直接封装为IP报文,协议号为89。
OSPF有五种类型的协议报文:
·?????Hello报文:周期性发送,用来发现和维持OSPF邻居关系,以及进行DR(Designated Router,指定路由器)/BDR(Backup Designated Router,备份指定路由器)的选举。
·?????DD(Database Description,数据库描述)报文:描述了本地LSDB(Link State DataBase,链路状态数据库)中每一条LSA(Link State Advertisement,链路状态通告)的摘要信息,用于两台路由器进行数据库同步。
·?????LSR(Link State Request,链路状态请求)报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。
·?????LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的LSA。
·?????LSAck(Link State Acknowledgment,链路状态确认)报文:用来对收到的LSA进行确认。
1.1.3? LSA类型
OSPF中对链路状态信息的描述都是封装在LSA中发布出去,常用的LSA有以下几种类型:
·?????Router LSA(Type-1):由每个路由器产生,描述路由器的链路状态和开销,在其始发的区域内传播。
·?????Network LSA(Type-2):由DR产生,描述本网段所有路由器的链路状态,在其始发的区域内传播。
·?????Network Summary LSA(Type-3):由ABR(Area Border Router,区域边界路由器)产生,描述区域内某个网段的路由,并通告给其他区域。
·?????ASBR Summary LSA(Type-4):由ABR产生,描述到ASBR(Autonomous System Boundary Router,自治系统边界路由器)的路由,通告给相关区域。
·?????AS External LSA(Type-5):由ASBR产生,描述到AS(Autonomous System,自治系统)外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
·?????NSSA External LSA(Type-7):由NSSA(Not-So-Stubby Area)区域内的ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
·?????Opaque LSA:用于OSPF的扩展通用机制,目前有Type-9、Type-10和Type-11三种。其中,Type-9 LSA仅在本地链路范围进行泛洪,用于支持GR(Graceful Restart,平滑重启)的Grace LSA就是Type-9的一种类型;Type-10 LSA仅在区域范围进行泛洪;Type-11 LSA可以在一个自治系统范围进行泛洪。
1.1.4? OSPF区域
1. 区域划分
随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF协议时,LSDB会占用大量的存储空间,并使得运行SPF(Shortest Path First,最短路径优先)算法的复杂度增加,导致CPU负担加重。
在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“震荡”之中,造成网络中会有大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
OSPF协议通过将自治系统划分成不同的区域来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号来标识。如图1-1所示。
图1-1 OSPF区域划分
?
区域的边界是路由器,而不是链路。一个路由器可以属于不同的区域,但是一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。划分区域后,可以在区域边界路由器上进行路由聚合,以减少通告到其他区域的LSA数量,还可以将网络拓扑变化带来的影响最小化。
2. 骨干区域(Backbone Area)
OSPF划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号是0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:
·?????所有非骨干区域必须与骨干区域保持连通;
·?????骨干区域自身也必须保持连通。
在实际应用中,可能会因为各方面条件的限制,无法满足上面的要求。这时可以通过配置OSPF虚连接予以解决。
3. 虚连接(Virtual Link)
虚连接是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。它的两端必须是ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)。
在图1-2中,Area2与骨干区域之间没有直接相连的物理链路,但可以在ABR上配置虚连接,使Area2通过一条逻辑链路与骨干区域保持连通。
?
虚连接的另外一个应用是提供冗余的备份链路,当骨干区域因链路故障不能保持连通时,通过虚连接仍然可以保证骨干区域在逻辑上的连通性。如图1-3所示。
?
虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,在这个连接上,和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。
两台ABR之间直接传递OSPF报文信息,它们之间的OSPF路由器只是起到一个转发报文的作用。由于协议报文的目的地址不是中间这些路由器,所以这些报文对于它们而言是透明的,只是当作普通的IP报文来转发。
4. Stub区域和Totally Stub区域
Stub区域是一些特定的区域,该区域的ABR会将区域间的路由信息传递到本区域,但不会引入自治系统外部路由,区域中路由器的路由表规模以及LSA数量都会大大减少。为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。
为了进一步减少Stub区域中路由器的路由表规模以及LSA数量,可以将区域配置为Totally Stub(完全Stub)区域,该区域的ABR不会将区域间的路由信息和自治系统外部路由信息传递到本区域。为保证到本自治系统的其他区域和自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。
5. NSSA区域和Totally NSSA区域
NSSA(Not-So-Stubby Area)区域是Stub区域的变形,与Stub区域的区别在于NSSA区域允许引入自治系统外部路由,由ASBR发布Type-7 LSA通告给本区域。当Type-7 LSA到达NSSA的ABR时,由ABR将Type-7 LSA转换成Type-5 LSA,传播到其他区域。
可以将区域配置为Totally NSSA(完全NSSA)区域,该区域的ABR不会将区域间的路由信息传递到本区域。为保证到本自治系统的其他区域的路由依旧可达,该区域的ABR将生成一条缺省路由Type-3 LSA,发布给本区域中的其他非ABR路由器。
如图1-4所示,运行OSPF协议的自治系统包括3个区域:区域0、区域1和区域2,另外两个自治系统运行RIP协议。区域1被定义为NSSA区域,区域1接收的RIP路由传播到NSSA ASBR后,由NSSA ASBR产生Type-7 LSA在区域1内传播,当Type-7 LSA到达NSSA ABR后,转换成Type-5 LSA传播到区域0和区域2。
另一方面,运行RIP的自治系统的RIP路由通过区域2的ASBR产生Type-5 LSA在OSPF自治系统中传播。但由于区域1是NSSA区域,所以Type-5 LSA不会到达区域1。
?
1.1.5? 路由器类型
OSPF路由器根据在AS中的不同位置,可以分为以下四类:
1. 区域内路由器(Internal Router)
该类路由器的所有接口都属于同一个OSPF区域。
2. 区域边界路由器ABR
该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
3. 骨干路由器(Backbone Router)
该类路由器至少有一个接口属于骨干区域。因此,所有的ABR和位于Area0的内部路由器都是骨干路由器。
4. 自治系统边界路由器ASBR
与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它有可能是区域内路由器,也有可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
图1-5 OSPF路由器的类型
?
1.1.6? 路由类型
OSPF将路由分为四类,按照优先级从高到低的顺序依次为:
·?????区域内路由(Intra Area)
·?????区域间路由(Inter Area)
·?????第一类外部路由(Type1 External):这类路由的可信程度较高,并且和OSPF自身路由的开销具有可比性,所以到第一类外部路由的开销等于本路由器到相应的ASBR的开销与ASBR到该路由目的地址的开销之和。
·?????第二类外部路由(Type2 External):这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。所以计算路由开销时将主要考虑前者,即到第二类外部路由的开销等于ASBR到该路由目的地址的开销。如果计算出开销值相等的两条路由,再考虑本路由器到相应的ASBR的开销。
区域内和区域间路由描述的是AS内部的网络结构,外部路由则描述了应该如何选择到AS以外目的地址的路由。
1.1.7? 路由器ID
路由器ID——即Router ID,用来在一个自治系统中唯一地标识一台路由器,一台路由器如果要运行OSPF协议,则必须存在Router ID。Router ID的获取方式有以下两种:
1. 手工指定Router ID
用户可以在创建OSPF进程的时候指定Router ID,配置时,必须保证自治系统中任意两台路由器的ID都不相同。通常的做法是将路由器的ID配置为与该路由器某个接口的IP地址一致。
2. 使用全局Router ID
如果在创建OSPF进程的时候没有指定Router ID,则缺省使用全局Router ID。建议用户在创建OSPF进程的时候手工指定Router ID,或者选择自动获取Router ID。
1.1.8? OSPF路由的计算过程
同一个区域内,OSPF路由的计算过程可简单描述如下:
·?????每台OSPF路由器根据自己周围的网络拓扑结构生成LSA,并通过更新报文将LSA发送给网络中的其它OSPF路由器。
·?????每台OSPF路由器都会收集其它路由器通告的LSA,所有的LSA放在一起便组成了LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。
·?????OSPF路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的。
·?????每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
1.1.9? OSPF的网络类型
OSPF根据链路层协议类型将网络分为下列四种类型:
·?????广播(Broadcast)类型:当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中,通常以组播形式(OSPF路由器的预留IP组播地址是224.0.0.5;OSPF DR/BDR的预留IP组播地址是224.0.0.6)发送Hello报文、LSU报文和LSAck报文;以单播形式发送DD报文和LSR报文。
·?????NBMA(Non-Broadcast Multi-Access,非广播多路访问)类型:当链路层协议是帧中继、ATM或X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。
·?????P2MP(Point-to-MultiPoint,点到多点)类型:没有一种链路层协议会被缺省的认为是P2MP类型。P2MP必须是由其他的网络类型强制更改的,常用做法是将NBMA网络改为P2MP网络。在该类型的网络中,缺省情况下,以组播形式(224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。
·?????P2P(Point-to-Point,点到点)类型:当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。
NBMA与P2MP网络之间的区别如下:
·?????NBMA网络是全连通的;P2MP网络并不需要一定是全连通的。
·?????NBMA网络中需要选举DR与BDR;P2MP网络中没有DR与BDR。
·?????NBMA网络采用单播发送报文,需要手工配置邻居;P2MP网络采用组播方式发送报文,通过配置也可以采用单播发送报文。
1.1.10? DR/BDR
1. DR/BDR简介
在广播网和NBMA网络中,任意两台路由器之间都要交换路由信息。如果网络中有n台路由器,则需要建立n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF提出了DR的概念,所有路由器只将信息发送给DR,由DR将网络链路状态发送出去。
另外,OSPF提出了BDR的概念。BDR是对DR的一个备份,在选举DR的同时也选举BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为新的DR。
OSPF网络中,既不是DR也不是BDR的路由器为DR Other。DR Other仅与DR和BDR建立邻接关系,DR Other之间不交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量,同时减少网络流量,节约了带宽资源。
如图1-6所示,进行DR/BDR选举后,5台路由器之间只需要建立7个邻接关系就可以了。
图1-6 DR和BDR示意图
?
在OSPF中,邻居(Neighbor)和邻接(Adjacency)是两个不同的概念。路由器启动后,会通过接口向外发送Hello报文,收到Hello报文的路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。只有当双方成功交换DD报文,交换LSA并达到LSDB同步之后,才形成邻接关系。
?
2. DR/BDR选举过程
DR/BDR是由同一网段中所有的路由器根据路由器优先级和Router ID通过Hello报文选举出来的,只有优先级大于0的路由器才具有选举资格。
进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。
需要注意的是:
·?????只有在广播或NBMA网络中才会选举DR;在P2P或P2MP网络中不需要选举DR。
·?????DR是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。
·?????DR/BDR选举完毕后,即使网络中加入一台具有更高优先级的路由器,也不会重新进行选举,替换该网段中已经存在的DR/BDR成为新的DR/BDR。DR并不一定就是路由器优先级最高的路由器接口;同理,BDR也并不一定就是路由器优先级次高的路由器接口。
1.1.11? 协议规范
与OSPF相关的协议规范有:
·?????RFC 1245:OSPF protocol analysis
·?????RFC 1246:Experience with the OSPF protocol
·?????RFC 1370:Applicability Statement for OSPF
·?????RFC 1765:OSPF Database Overflow
·?????RFC 1793:Extending OSPF to Support Demand Circuits
·?????RFC 2154:OSPF with Digital Signatures
·?????RFC 2328:OSPF Version 2
·?????RFC 3101:OSPF Not-So-Stubby Area (NSSA) Option
·?????RFC 3166:Request to Move RFC 1403 to Historic Status
·?????RFC 3509:Alternative Implementations of OSPF Area Border Routers
·?????RFC 4167:Graceful OSPF Restart Implementation Report
·?????RFC 4750:OSPF Version 2 Management Information Base
·?????RFC 4811:OSPF Out-of-Band LSDB Resynchronization
·?????RFC 4812:OSPF Restart Signaling
·?????RFC 5088:OSPF Protocol Extensions for Path Computation Element (PCE) Discovery
·?????RFC 5250:The OSPF Opaque LSA Option
·?????RFC 5613:OSPF Link-Local Signaling
·?????RFC 5642:Dynamic Hostname Exchange Mechanism for OSPF
·?????RFC 5709:OSPFv2 HMAC-SHA Cryptographic Authentication
·?????RFC 6571:Loop-Free Alternate (LFA) Applicability in Service Provider (SP) Networks
·?????RFC 6860:Hiding Transit-Only Networks in OSPF
·?????RFC 6987:OSPF Stub Router Advertisement
1.2? OSPF配置限制和指导
无论是哪种类型的路由器,都必须先使能OSPF,否则OSPF协议将无法正常运行。在进行各项配置的时候应该先做好网络规划,错误的配置可能会导致相邻路由器之间无法相互传递信息,甚至导致路由信息的阻塞或者产生路由环路。
1.3? OSPF配置任务简介
OSPF配置任务如下:
(1)?????配置OSPF基本功能
??????启动OSPF进程配置OSPF基本功能
??????配置OSPF区域
??????使能OSPF功能
(2)?????(可选)配置OSPF特殊区域
??????配置Stub区域
??????配置NSSA区域
??????配置虚连接
(3)?????(可选)配置OSPF的网络类型
??????配置OSPF接口网络类型为广播
??????配置OSPF接口网络类型为NBMA
??????配置OSPF接口网络类型为P2MP
??????配置OSPF接口网络类型为P2P
(4)?????(可选)配置OSPF的路由信息控制
??????配置OSPF区域间路由聚合
??????配置对引入的外部路由信息进行路由聚合
??????配置OSPF对通过接收到的LSA计算出来的路由信息进行过滤
??????配置过滤Type-3 LSA
??????配置OSPF接口的开销值
??????配置OSPF协议的优先级
??????配置NULL0路由
??????配置OSPF引入外部路由
??????配置OSPF引入缺省路由
??????配置发布一条主机路由
(5)?????(可选)配置OSPF定时器
??????配置OSPF报文定时器
??????配置接口传送LSA的延迟时间
??????配置OSPF路由计算的时间间隔
??????配置LSA重复到达的最小时间间隔
??????配置LSA重新生成的时间间隔
??????配置OSPF尝试退出overflow状态的定时器时间间隔
??????配置接口发送LSU报文的时间间隔和一次发送LSU报文的最大个数
(6)?????(可选)配置OSPF报文相关功能
??????禁止接口收发OSPF报文
??????配置DD报文中的MTU
??????配置OSPF发送协议报文的DSCP优先级
(7)?????(可选)控制LSA的生成、发布与接收
??????配置LSDB中External LSA的最大数量
??????过滤接口出方向的LSA
??????过滤发送给指定邻居的LSA
(8)?????(可选)加快OSPF路由收敛速度
??????配置ISPF
??????配置前缀抑制
??????配置OSPF的前缀按优先权收敛功能
??????配置PIC
(9)?????(可选)配置OSPF高级功能
??????配置Stub路由器
??????配置兼容RFC 1583的外部路由选择规则
(10)?????(可选)提高OSPF网络的可靠性
??????配置OSPF GR
??????配置OSPF NSR
??????配置OSPF与BFD联动
??????配置OSPF快速重路由
(11)?????(可选)配置OSPF安全功能
??????配置OSPF验证
??????配置OSPF GTSM功能
(12)?????(可选)配置OSPF日志和告警功能
??????配置邻居状态变化的输出开关
??????配置OSPF的日志功能
??????配置OSPF网管功能
1.4? 配置OSPF基本功能
1.4.1? 启动OSPF进程
system-view
(2)?????(可选)配置全局Router ID。
router id?router-id
缺省情况下,未配置全局Router ID。
未配置全局路由器ID时,按照下面的规则进行选择:
??????如果存在配置IP地址的Loopback接口,则选择Loopback接口地址中最大的作为Router ID。
??????如果没有配置IP地址的Loopback接口,则从其他接口的IP地址中选择最大的作为Router ID(不考虑接口的up/down状态)。
(3)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
缺省情况下,系统没有运行OSPF。
(4)?????(可选)配置OSPF进程描述。
description?text
缺省情况下,未配置进程描述。
建议用户为每个OSPF进程配置进程描述信息,帮助识别进程的用途,以便于记忆和管理。
1.4.2? 配置OSPF区域
(1)?????进入系统视图。
system-view
(2)?????(可选)配置全局Router ID。
router id?router-id
缺省情况下,未配置全局Router ID。
(3)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
缺省情况下,系统没有运行OSPF。
(4)?????(可选)配置OSPF进程描述。
description?text
缺省情况下,未配置进程描述。
建议用户为每个OSPF进程配置进程描述信息,帮助识别进程的用途,以便于记忆和管理。
(5)?????创建OSPF区域,并进入OSPF区域。
area?area-id
(6)?????(可选)配置区域描述。
description?text
缺省情况下,未配置区域描述。
建议用户为每个区域配置区域描述信息,帮助识别区域的用途,以便于记忆和管理。
仅支持在OSPF区域视图下配置区域描述。
1.4.3? 使能OSPF功能
1. 功能简介
要在路由器上使能OSPF功能,必须先创建OSPF进程、指定该进程关联的区域以及区域包括的网段;对于当前路由器来说,如果某个路由器的接口IP地址落在某个区域的网段内,则该接口属于这个区域并使能了OSPF功能,OSPF将把这个接口的直连路由宣告出去。
OSPF支持多进程,即可以在一台路由器上通过为不同的OSPF进程指定不同的进程号来启动多个OSPF进程。OSPF进程号是本地概念,不影响与其它路由器之间的报文交换。因此,不同的路由器之间,即使进程号不同也可以进行报文交换。
2. 配置限制和指导
可以在指定接口上使能OSPF,或者在指定网段上使能OSPF。在指定接口上使能OSPF的优先级高于在指定网段上使能OSPF。
在接口上使能OSPF时,如果不存在进程和区域,则创建对应的进程和区域;在接口上关闭OSPF时,不删除已经创建的进程和区域。
3. 在指定网段上使能OSPF
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置区域所包含的网段并在指定网段的接口上使能OSPF。
network?ip-address wildcard-mask
缺省情况下,接口不属于任何区域且OSPF功能处于关闭状态。
一个网段只能属于一个区域。
4. 在指定接口上使能OSPF
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置接口使能OSPF。
ospf?process-id?area?area-id?[?exclude-subip?]
缺省情况下,未配置接口使能OSPF。
1.5? 配置OSPF特殊区域
1.5.1? 功能简介
网络管理员对整个网络划分区域完毕后,可以根据组网需要进一步将区域配置成Stub区域或NSSA区域。
当非骨干区域不能与骨干区域保持连通,或者骨干区域因为各方面条件的限制无法保持连通时,可以通过配置OSPF虚连接予以解决。
1.5.2? 配置Stub区域
1. 功能简介
对于位于AS边缘的一些非骨干区域,我们可以在该区域的所有路由器上配置stub命令,把该区域配置为Stub区域。这样,描述自治系统外部路由的Type-5 LSA不会在Stub区域里泛洪,减小了路由表的规模。ABR生成一条缺省路由,所有到达自治系统外部的报文都交给ABR进行转发。
如果想进一步减少Stub区域路由表规模以及路由信息传递的数量,那么在ABR上配置stub命令时指定no-summary参数,可以将该区域配置为Totally Stub区域。这样,自治系统外部路由和区域间的路由信息都不会传递到本区域,所有目的地是自治系统外和区域外的报文都交给ABR进行转发。
Stub区域和Totally Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
2. 配置限制和指导
骨干区域不能配置成Stub区域或Totally Stub区域。
如果要将一个区域配置成Stub区域,则该区域中的所有路由器必须都要配置stub命令。
如果要将一个区域配置成Totally Stub区域,该区域中的所有路由器必须配置stub命令,该区域的ABR路由器需要配置stub no-summary命令。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置当前区域为Stub区域。
stub?[?default-route-advertise-always?|?no-summary?]?*
缺省情况下,没有区域被设置为Stub区域。
(5)?????(可选)配置ABR发送到Stub区域缺省路由的开销。
default-cost?cost-value
缺省情况下,ABR发送到Stub区域缺省路由的开销为1。
本命令只有在Stub区域和Totally Stub区域的ABR上配置才能生效。
1.5.3? 配置NSSA区域
1. 功能简介
Stub区域不能引入外部路由,为了在允许将自治系统外部路由通告到OSPF路由域内部的同时,保持其余部分的Stub区域的特征,网络管理员可以将区域配置为NSSA区域。NSSA区域也是位于AS边缘的非骨干区域。
配置nssa命令时指定no-summary参数可以将该区域配置为Totally NSSA区域,该区域的ABR不会将区域间的路由信息传递到本区域。
2. 配置限制和指导
骨干区域不能配置成NSSA区域或Totally NSSA区域。
如果要将一个区域配置成NSSA区域,则该区域中的所有路由器必须都要配置nssa命令。
如果要将一个区域配置成Totally NSSA区域,该区域中的所有路由器必须配置nssa命令,该区域的ABR路由器需要配置nssa no-summary命令。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置当前区域为NSSA区域。
nssa?[?default-route-advertise?[?cost?cost-value?|?nssa-only?|?route-policy?route-policy-name?|?type?type?]?*?|?no-import-route?|?no-summary?|?suppress-fa?|?[?[?[?translate-always?]?[?translate-ignore-checking-backbone?]?]?|?translate-never?]?|?translator-stability-interval?value?]?*
缺省情况下,没有区域被设置为NSSA区域。
(5)?????(可选)配置发送到NSSA区域缺省路由的开销。
default-cost?cost-value
缺省情况下,发送到NSSA区域的缺省路由的开销为1。
本命令只有在NSSA区域和Totally NSSA区域的ABR/ASBR上配置才能生效。
1.5.4? 配置虚连接
1. 功能简介
在划分区域之后,非骨干区域之间的OSPF路由更新是通过骨干区域来完成交换的。对此,OSPF要求所有非骨干区域必须与骨干区域保持连通,并且骨干区域自身也要保持连通。
但在实际应用中,可能会因为各方面条件的限制,无法满足这个要求。这时可以通过在ABR上配置OSPF虚连接予以解决。
2. 配置限制和指导
虚连接不能穿过Stub区域和Totally Stub区域;虚连接不能穿过NSSA区域和Totally NSSA区域。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????创建并配置虚连接。
vlink-peer?router-id?[?dead?seconds?|?hello?seconds?|?{?{?hmac-md5?|?md5?}?key-id?{?cipher?|?plain?}?string?|?simple?{?cipher?|?plain?}?string?}?|?retransmit?seconds?|?trans-delay?seconds?]?*
为使虚连接生效,在虚连接的两端都需配置此命令,并且两端配置的hello、dead参数必须一致。
本命令仅支持在OSPF区域视图下配置。
1.6? 配置OSPF的网络类型
1.6.1? 配置限制和指导
OSPF的网络类型有四种:广播、NBMA、P2MP和P2P。用户可以根据需要更改接口的网络类型,例如:
·?????当广播网络中有部分路由器不支持组播时,可以将网络类型更改为NBMA。
·?????如果一网段内只有两台路由器运行OSPF协议,也可将接口类型配置为P2P,节省网络开销。
如果接口配置为广播、NBMA或者P2MP网络类型,只有双方接口在同一网段才能建立邻居关系。
1.6.2? 配置OSPF接口网络类型为广播
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置OSPF接口网络类型为广播。
ospf network-type broadcast
缺省情况下,接口的网络类型为广播类型。
(4)?????(可选)配置OSPF接口的路由器优先级。
ospf dr-priority?priority
缺省情况下,接口的路由器优先级为1。
1.6.3? 配置OSPF接口网络类型为NBMA
1. 配置限制和指导
把接口类型配置为NBMA后,由于无法通过广播Hello报文的形式动态发现相邻路由器,必须手工为接口指定相邻接口的IP地址、该相邻接口是否有选举权等(dr-priority参数的值仅表示路由器是否具有DR选举权,为0表示不具有DR选举权,大于0时表示具有DR选举权)。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置OSPF接口的网络类型为NBMA。
ospf network-type nbma
缺省情况下,接口的网络类型为广播类型。
(4)?????(可选)配置OSPF接口的路由器优先级。
ospf dr-priority?priority
缺省情况下,接口的路由器优先级为1。
本命令设置的优先级用于实际的DR选举。
(5)?????退回系统视图。
quit
(6)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(7)?????配置NBMA网络的邻居。
peer?ip-address?[?dr-priority?priority?]
缺省情况下,未配置邻居。
如果在配置邻居时将优先级指定为0,则本地路由器认为该邻居不具备选举权,不向该邻居发送Hello报文。本地路由器是DR或BDR的情况除外。
1.6.4? 配置OSPF接口网络类型为P2MP
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置OSPF接口的网络类型为P2MP。
ospf network-type p2mp?[?unicast?]
缺省情况下,接口的网络类型为广播类型。
(4)?????退回系统视图。
quit
(5)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(6)?????配置P2MP单播网络的邻居。
peer?ip-address?[?cost?cost-value?]
缺省情况下,未配置邻居。
如果接口类型为P2MP单播,必须配置本命令。
1.6.5? 配置OSPF接口网络类型为P2P
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置OSPF接口的网络类型为P2P。
ospf network-type?p2p?[?peer-address-check?]
缺省情况下,接口的网络类型为广播类型。
1.7? 配置OSPF的路由信息控制
通过本节的配置,可以控制OSPF的路由信息的发布与接收,并引入路由信息。
1.7.1? 配置OSPF区域间路由聚合
1. 功能简介
OSPF区域间路由聚合是指ABR将具有相同前缀的路由信息聚合,只发布一条路由到其它区域。
AS被划分成不同的区域后,每一个区域通过OSPF区域边界路由器(ABR)相连,区域间可以通过路由聚合来减少路由信息,减小路由表的规模,提高路由器的运算速度。
ABR在计算出一个区域的区域内路由之后,根据聚合相关设置,将其中多条OSPF路由聚合成一条发送到区域之外。例如,某个区域内有三条区域内路由19.1.1.0/24,19.1.2.0/24,19.1.3.0/24,如果在ABR上配置了路由聚合,将三条路由聚合成一条19.1.0.0/16,则ABR就只生成一条聚合后的Type-3 LSA,并发布给其它区域的路由器,这样既可以减少其它区域中LSDB的规模,也减小了因为网络拓扑变化带来的影响。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置ABR路由聚合。
abr-summary?ip-address?{?mask-length?|?mask?}?[?advertise?|?not-advertise?]?[?cost?cost-value?]
缺省情况下,ABR不对路由进行聚合。
1.7.2? 配置对引入的外部路由信息进行路由聚合
1. 功能简介
ASBR引入外部路由后,每一条路由都会放在单独的一条Type-5 LSA中向外宣告;通过配置路由聚合,路由器只把聚合后的路由放在Type-5 LSA中向外宣告,减少了LSDB中LSA的数量。
在ASBR上配置路由聚合后,将对聚合地址范围内的Type-5 LSA进行聚合;如果ASBR在NSSA区域里面,将对聚合地址范围内的Type-7 LSA进行聚合。
2. 配置限制和指导
如果本地路由器同时是ASBR和ABR,并且是NSSA区域的转换路由器,将对由Type-7 LSA转化成的Type-5 LSA进行聚合处理;如果不是NSSA区域的转换路由器,则不进行聚合处理。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置ASBR路由聚合。
asbr-summary?ip-address?{?mask-length?|?mask?}?[?cost?cost-value?|?not-advertise?|?nssa-only?|?tag?tag?]?*
缺省情况下,ASBR不对路由进行聚合。
1.7.3? 配置OSPF对通过接收到的LSA计算出来的路由信息进行过滤
1. 功能简介
OSPF是基于链路状态的动态路由协议,路由信息是根据接收到的LSA计算出来的,可以对通过接收到的LSA计算出来的OSPF路由信息进行过滤。
一共有四种过滤方式:
·?????基于要加入到路由表的路由信息的目的地址进行过滤,可以通过配置访问控制列表或IP地址前缀列表来指定过滤条件;
·?????基于要加入到路由表的路由信息的下一跳进行过滤,可以通过在命令中配置gateway参数来指定过滤条件;
·?????基于要加入到路由表的路由信息的目的地址和下一跳进行过滤,可以通过配置访问控制列表或IP地址前缀列表指定过滤目的地址的条件,同时配置gateway参数来指定过滤下一跳的条件;
·?????基于路由策略对要加入到路由表的路由信息进行过滤,可以通过在命令中配置route-policy参数来指定过滤条件。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF对通过接收到的LSA计算出来的路由信息进行过滤。
filter-policy?{?ipv4-acl-number?[?gateway?prefix-list-name?]?|?gateway?prefix-list-name?|?prefix-list?prefix-list-name?[?gateway?prefix-list-name?]?|?route-policy?route-policy-name?}?import
缺省情况下,OSPF不对通过接收到的LSA计算出来的路由信息进行过滤。
1.7.4? 配置过滤Type-3 LSA
1. 功能简介
通过在ABR上配置Type-3 LSA过滤,可以对进入ABR所在区域或ABR向其它区域发布的Type-3 LSA进行过滤。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置对Type-3 LSA进行过滤。
filter?{?ipv4-acl-number?|?prefix-list?prefix-list-name?|?route-policy?route-policy-name?}?{?export?|?import?}
缺省情况下,不对Type-3 LSA进行过滤。
1.7.5? 配置OSPF接口的开销值
1. 功能简介
OSPF有两种方式来配置接口的开销值:
·?????在接口视图下直接配置开销值;
·?????配置接口的带宽参考值,OSPF根据带宽参考值自动计算接口的开销值,计算公式为:接口开销=带宽参考值÷接口期望带宽(接口期望带宽通过命令bandwidth进行配置,具体情况请参见接口分册命令参考中的介绍)。当计算出来的开销值大于65535时,开销取最大值65535;当计算出来的开销值小于1时,开销取最小值1。
2. 配置接口的开销值
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????设置OSPF接口的开销值。
ospf cost?cost-value
缺省情况下,接口按照当前的带宽自动计算接口运行OSPF协议所需的开销。对于Loopback接口,缺省值为0。
3. 配置带宽参考值
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置带宽参考值。
bandwidth-reference?value
缺省情况下,带宽参考值为100Mbps。
1.7.6? 配置OSPF协议的优先级
1. 功能简介
由于路由器上可能同时运行多个动态路由协议,就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置一个优先级,在不同协议发现同一条路由时,优先级高的路由将被优先选择。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF协议的路由优先级。
preference?[?ase?]?{?preference?|?route-policy?route-policy-name?}?*
缺省情况下,OSPF协议对自治系统内部路由的优先级为10,对自治系统外部路由的优先级为150。
1.7.7? 配置NULL0路由
1. 功能简介
本命令用来配置是否产生NULL0路由以及产生NULL0路由的优先级。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置NULL0路由以及NULL0路由的优先级。
discard-route?{?external?{?preference?|?suppression?}?|?internal?{?preference?|?suppression?}?}?*
缺省情况下,产生引入聚合NULL0路由和区域间聚合NULL0路由,且NULL0路由优先级为255。
1.7.8? 配置OSPF引入外部路由
1. 功能简介
如果在路由器上不仅运行OSPF,还运行着其它路由协议,可以配置OSPF引入其它协议生成的路由,将这些路由信息通过Type5 LSA或Type7 LSA向外宣告。
OSPF还可以对引入的路由进行过滤,只将满足过滤条件的外部路由转换为Type5 LSA或Type7 LSA发布出去。
2. 配置限制和指导
只能引入路由表中状态为active的路由,是否为active状态可以通过display ip routing-table?protocol命令来查看。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF引入外部路由。
import-route?protocol?[?process-id?|?all-processes?]?[?allow-direct?|?cost?cost-value?|?nssa-only?|?route-policy?route-policy-name?|?tag?tag?|?type?type?]?*
缺省情况下,不引入外部路由。
(4)?????(可选)配置对引入的路由进行过滤。
filter-policy?{?ipv4-acl-number?|?prefix-list?prefix-list-name?}?export?[?protocol?[?process-id?]?]
缺省情况下,不对引入的路由信息进行过滤。
(5)?????配置路由引入时的参数缺省值(开销、标记、类型)。
default?{?cost?cost-value?|?tag?tag?|?type?type?}?*
缺省情况下,OSPF引入的路由的度量值为1,引入的路由的标记为1,引入的路由类型为2。
1.7.9? 配置OSPF引入缺省路由
1. 功能简介
OSPF不能通过import-route命令从其它协议引入缺省路由,如果想把缺省路由引入到OSPF路由区域,必须执行本配置。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF引入缺省路由。
default-route-advertise?[ [always?|?permit-calculate-other?]?|?cost?cost-value?|?route-policy?route-policy-name?|?type?type?]?*
缺省情况下,不引入缺省路由。
(4)?????配置路由引入时的参数缺省值(开销、标记、类型)。
default?{?cost?cost-value?|?tag?tag?|?type?type?}?*
缺省情况下,OSPF引入的路由的度量值为1,引入的路由的标记为1,引入的路由类型为2。
1.7.10? 配置发布一条主机路由
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置并发布一条主机路由。
host-advertise?ip-address cost
缺省情况下,OSPF不发布所包含网段之外的主机路由。
1.8? 配置OSPF定时器
1.8.1? 功能简介
通过改变OSPF的报文定时器,可以调整OSPF网络的收敛速度以及协议报文带来的网络负荷。在一些低速链路上,需要考虑接口传送LSA的延迟时间。
1.8.2? 配置OSPF报文定时器
1. 功能简介
用户可以在接口上配置下列OSPF报文定时器:
·?????Hello定时器:接口向邻居发送Hello报文的时间间隔,OSPF邻居之间的Hello定时器的值要保持一致。
·?????Poll定时器:在NBMA网络中,路由器向状态为down的邻居路由器发送轮询Hello报文的时间间隔。
·?????邻居失效时间:在邻居失效时间内,如果接口还没有收到邻居发送的Hello报文,路由器就会宣告该邻居无效。
·?????接口重传LSA的时间间隔:路由器向它的邻居通告一条LSA后,需要对方进行确认。若在重传间隔时间内没有收到对方的确认报文,就会向邻居重传这条LSA。
2. 配置限制和指导
Hello报文中包含Hello定时器和邻居失效时间,对于不同的网络类型,Hello定时器和邻居失效时间的缺省值不同。修改网络类型时,Hello定时器和邻居失效时间将恢复为对应网络类型下的缺省值。请确保邻居路由器两端的Hello定时器和邻居失效时间的值保持一致,否则将影响OSPF邻居关系的建立。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置Hello定时器。
ospf timer hello?seconds
缺省情况下,P2P、Broadcast类型接口发送Hello报文的时间间隔为10秒,P2MP、NBMA类型接口发送Hello报文的时间间隔为30秒。
(4)?????配置Poll定时器。
ospf timer poll?seconds
缺省情况下,发送轮询Hello报文的时间间隔为120秒。
轮询Hello报文的时间间隔至少应为Hello时间间隔的4倍。
(5)?????配置邻居失效时间。
ospf timer dead?seconds
缺省情况下,P2P、Broadcast类型接口的OSPF邻居失效时间为40秒,P2MP、NBMA类型接口的OSPF邻居失效时间为120秒。
邻居失效时间应至少为Hello时间间隔的4倍。
(6)?????配置接口重传LSA的时间间隔。
ospf timer retransmit?seconds
缺省情况下,时间间隔为5秒。
相邻路由器重传LSA时间间隔的值不要设置得太小,否则将会引起不必要的重传。通常应该大于一个报文在两台路由器之间传送一个来回的时间。
1.8.3? 配置接口传送LSA的延迟时间
1. 功能简介
考虑到OSPF报文在链路上传送时也需要花费时间,所以LSA的老化时间(age)在传送之前要增加一定的延迟时间,在低速链路上需要对该项配置进行重点考虑。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置接口传送LSA的延迟时间。
ospf trans-delay?seconds
缺省情况下,接口传送LSA的延迟时间为1秒。
1.8.4? 配置OSPF路由计算的时间间隔
1. 功能简介
当OSPF的LSDB发生改变时,需要重新计算最短路径。如果网络频繁变化,且每次变化都立即计算最短路径,将会占用大量系统资源,并影响路由器的效率。通过调节路由计算的时间间隔,可以抑制由于网络频繁变化带来的影响。
本命令在网络变化不频繁的情况下将连续路由计算的时间间隔缩小到minimum-interval,而在网络变化频繁的情况下可以进行相应惩罚,将等待时间按照配置的惩罚增量延长,增加incremental-interval×2n-2(n为连续触发路由计算的次数),最大不超过maximum-interval。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF路由计算的时间间隔。
spf-schedule-interval?maximum-interval?[?minimum-interval?[?incremental-interval?]?]
缺省情况下,OSPF路由计算的最大时间间隔为5秒,最小时间间隔为50毫秒,时间间隔惩罚增量为200毫秒。
1.8.5? 配置LSA重复到达的最小时间间隔
1. 功能简介
如果在重复到达的最小时间间隔内连续收到一条LSA类型、LS ID、生成路由器ID均相同的LSA则直接丢弃,这样就可以抑制网络频繁变化可能导致的占用过多带宽资源和路由器资源。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置LSA重复到达的最小时间间隔。
lsa-arrival-interval?interval
缺省情况下,OSPF LSA重复到达的最小时间间隔为1000毫秒。
1.8.6? 配置LSA重新生成的时间间隔
1. 功能简介
通过调节LSA重新生成的时间间隔,可以抑制网络频繁变化可能导致的带宽资源和路由器资源被过多占用的问题。
本命令在网络变化不频繁的情况下将LSA重新生成时间间隔缩小到minimum-interval,而在网络变化频繁的情况下可以进行相应惩罚,增加incremental-interval×2n-2(n为连续触发路由计算的次数),将等待时间按照配置的惩罚增量延长,最大不超过maximum-interval。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置LSA重新生成的时间间隔。
lsa-generation-interval?maximum-interval?[?minimum-interval?[?incremental-interval?]?]
缺省情况下,最大时间间隔为5秒,最小时间间隔为50毫秒,惩罚增量为200毫秒。
1.8.7? 配置OSPF尝试退出overflow状态的定时器时间间隔
1. 功能简介
网络中出现过多LSA,会占用大量系统资源。当设置的LSDB中External LSA的最大数量达到上限时,LSDB会进入overflow状态,在overflow状态中,不再接收External LSA,同时删除自己生成的External LSA,对于已经收到的External LSA则不会删除。这样就可以减少LSA从而节省系统资源。
通过配置可以调整OSPF退出overflow状态的时间。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF尝试退出overflow状态的定时器时间间隔。
lsdb-overflow-interval?interval
缺省情况下,OSPF尝试退出overflow定时器间隔是300秒,配置为0时,表示不退出Overflow状态。
1.8.8? 配置接口发送LSU报文的时间间隔和一次发送LSU报文的最大个数
1. 功能简介
如果路由器路由表里的路由条目很多,在与邻居进行LSDB同步时,可能需要发送大量LSU,有可能会对当前设备和网络带宽带来影响;因此,路由器将LSU报文分为多个批次进行发送,并且对OSPF接口每次允许发送的LSU报文的最大个数做出限制。
用户可根据需要配置OSPF接口发送LSU报文的时间间隔以及接口一次发送LSU报文的最大个数。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置接口发送LSU报文的时间间隔和一次发送LSU报文的最大个数。
transmit-pacing?interval?interval?count?count
缺省情况下,OSPF接口发送LSU报文的时间间隔为20毫秒,一次最多发送3个LSU报文。
1.9? 配置OSPF报文相关功能
1.9.1? 禁止接口收发OSPF报文
1. 功能简介
如果要使OSPF路由信息不被某一网络中的路由器获得,可以禁止接口收发OSPF报文。
将运行OSPF协议的接口指定为Silent状态后,该接口的直连路由仍可以由同一路由器的其它接口通过Router LSA发布出去,但OSPF报文将被阻塞,接口上无法建立邻居关系。这样可以增强OSPF的组网适应能力,减少系统资源的消耗。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????禁止接口收发OSPF报文。
silent-interface?{?interface-type interface-number?|?all?}
缺省情况下,允许接口收发OSPF报文。
不同的进程可以对同一接口禁止收发OSPF报文,但本命令只对本进程已经使能的OSPF接口起作用,对其它进程的接口不起作用。
1.9.2? 配置DD报文中的MTU
1. 功能简介
一般情况下,接口发送DD报文时不使用接口的实际MTU值,而是用0代替。进行此配置后,将使用接口的实际MTU值填写DD报文Interface MTU字段。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置DD报文中MTU域的值为发送该报文接口的MTU值。
ospf mtu-enable
缺省情况下,接口发送的DD报文中MTU域的值为0。
1.9.3? 配置OSPF发送协议报文的DSCP优先级
1. 功能简介
DSCP优先级用来体现报文自身的优先等级,决定报文传输的优先程度。通过本配置可以指定OSPF发送协议报文的DSCP优先级。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF发送协议报文的DSCP优先级。
dscp?dscp-value
缺省情况下,OSPF发送协议报文的DSCP优先级值为48。
1.10? 控制LSA的生成、发布与接收
1.10.1? 配置LSDB中External LSA的最大数量
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置LSDB中External LSA的最大数量。
lsdb-overflow-limit?number
缺省情况下,不对LSDB中External LSA的最大条目数进行限制。
1.10.2? 过滤接口出方向的LSA
1. 功能简介
通过该功能,不希望让邻居接收到的LSA可在本端接口出方向上被过滤掉,从而减小邻居LSDB的规模,并节省带宽。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置过滤接口出方向的LSA。
ospf database-filter?{?all?|?{?ase?[?acl?ipv4-acl-number?]?|?nssa?[?acl?ipv4-acl-number?]?|?summary?[?acl?ipv4-acl-number?]?}?*?}
缺省情况下,不对接口出方向的LSA进行过滤。
1.10.3? 过滤发送给指定邻居的LSA
1. 功能简介
在P2MP网络中,一台路由器可以有多个接口的网络类型为P2MP的OSPF邻居。当两台路由器之间存在多条P2MP链路时,不希望让某个指定邻居收到的LSA,通过该功能可在本地被过滤掉。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置过滤发送给接口的网络类型为P2MP的邻居的LSA。
database-filter peer?ip-address?{?all?|?{?ase?[?acl?ipv4-acl-number?]?|?nssa?[?acl?ipv4-acl-number?]?|?summary?[?acl?ipv4-acl-number?]?}?*?}
缺省情况下,不对发送给接口的网络类型为P2MP的邻居的LSA进行过滤。
1.11? 加快OSPF路由收敛速度
1.11.1? 配置ISPF
1. 功能简介
ISPF(Incremental Shortest Path First,增量最短路径优先)是对OSPF中最短路径树的增量计算,当网络的拓扑结构发生变化,即影响到最短路径树的结构时,只对受影响的部分节点进行重新计算拓扑结构,只对最短路径树中受影响的部分进行修正,而不需要重建整棵最短路径树。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????开启增量SPF计算功能。
ispf enable
缺省情况下,增量SPF计算功能处于使能状态。
1.11.2? 配置前缀抑制
1. 功能简介
OSPF使能网段时会将接口上匹配该网段的所有网段路由与主机路由都通过LSA发布,但有些时候主机路由或网段路由是不希望被发布的。通过前缀抑制配置,可以减少LSA中携带不需要的前缀,即不发布某些网段路由和主机路由,从而提高网络安全性,加快路由收敛。
当使能前缀抑制时,具体情况如下:
·?????P2P或P2MP类型网络:Type-1 LSA中不发布接口的主地址,即Type-1 LSA中链路类型为3的Stub链路被抑制,不生成接口路由,但其他路由信息可以正常计算,不会影响流量转发。
·?????广播类型或者NBMA网络:DR发布的Type-2 LSA的掩码字段会填成32位,即不生成网段路由,但其他路由信息可以正常计算,不会影响流量转发。另外,如果没有邻居,发布的Type-1 LSA中也不发布接口的主地址,即Type-1 LSA中链路类型为3的Stub链路被抑制。
2. 配置限制和指导
如果需要抑制前缀发布,建议整个OSPF网络都配置本命令。
3. 配置全局前缀抑制
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置前缀抑制功能。
prefix-suppression
缺省情况下,不抑制OSPF进程进行前缀发布。
不能抑制从地址、LoopBack接口以及处于抑制状态的接口对应的前缀。
4. 配置接口前缀抑制
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置接口的前缀抑制功能。
ospf prefix-suppression?[?disable?]
缺省情况下,不抑制接口进行前缀发布。
不能抑制从地址对应的前缀。
1.11.3? 配置OSPF的前缀按优先权收敛功能
1. 功能简介
通过策略指定优先权,不同前缀按优先权顺序下发,由高到低分为4个优先权(Critical、High、Medium和Low),如果一条路由符合多个收敛优先权的匹配规则,则这些收敛优先权中最高者当选为路由的收敛优先权。
OSPF路由的32位主机路由为Medium优先权,其它为Low优先权。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能OSPF的前缀按优先权快速收敛功能。
prefix-priority route-policy?route-policy-name
缺省情况下,OSPF的前缀按优先权快速收敛功能处于关闭状态。
1.11.4? 配置PIC
1. 功能简介
PIC(Prefix Independent Convergence,前缀无关收敛),即收敛时间与前缀数量无关,该功能可以加快收敛速度。传统的路由计算快速收敛都与前缀数量相关,收敛时间与前缀数量成正比。
2. 配置限制和指导
PIC和OSPF快速重路由功能同时配置时,OSPF快速重路由功能生效。
目前只支持区域间路由以及外部路由的PIC功能。
3. 使能PIC功能
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能PIC功能。
pic?[?additional-path-always?]
缺省情况下,前缀无关收敛功能处于使能状态。
4. 配置PIC支持BFD检测功能(Ctrl方式)
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type?interface-number
(3)?????使能OSPF协议中主用链路的BFD(Ctrl方式)检测功能。
ospf primary-path-detect bfd ctrl
缺省情况下,OSPF协议中主用链路的BFD(Ctrl方式)检测功能处于关闭状态。
配置本功能后,可以加快OSPF协议的收敛速度。使用control报文双向检测方式时,需要建立OSPF邻居的两端设备均支持BFD配置。
5. 配置PIC支持BFD检测功能(Echo方式)
(1)?????进入系统视图。
system-view
(2)?????配置BFD Echo报文源地址。
bfd echo-source-ip?ip-address
缺省情况下,未配置BFD Echo报文源地址。
echo报文的源IP地址用户可以任意指定。建议配置echo报文的源IP地址不属于该设备任何一个接口所在网段。
本命令的详细情况请参见“可靠性命令参考”中的“BFD”。
(3)?????进入接口视图。
interface?interface-type?interface-number
(4)?????使能OSPF协议中主用链路的BFD(Echo方式)检测功能。
ospf primary-path-detect bfd echo
缺省情况下,OSPF协议中主用链路的BFD(Echo方式)检测功能处于关闭状态。
配置本功能后,可以加快OSPF协议的收敛速度。使用echo报文单跳检测方式时,仅需要一端设备支持BFD配置。
1.12? 配置OSPF高级功能
1.12.1? 配置Stub路由器
1. 功能简介
Stub路由器用来控制流量,它告知其他OSPF路由器不要使用这个Stub路由器来转发数据,但可以拥有一个到Stub路由器的路由。
通过将当前路由器配置为Stub路由器,在该路由器发布的Router LSA中,当链路类型取值为3表示连接到Stub网络时,链路度量值不变;当链路类型为1、2、4分别表示通过P2P链路与另一路由器相连、连接到传送网络、虚连接时,链路度量值将设置为最大值65535。通过增加include-stub参数可以将路由器发布的Router LSA中,链路类型为3的Stub链路度量值设置为最大值65535。这样其邻居计算出这条路由的开销就会很大,如果邻居上有到这个目的地址开销更小的路由,则数据不会通过这个Stub路由器转发。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置当前路由器为Stub路由器。
stub-router?[?external-lsa?[?max-metric-value?]?|?include-stub?|?on-startup?seconds?|?summary-lsa?[?max-metric-value?]?]?*
缺省情况下,当前路由器没有被配置为Stub路由器。
Stub路由器与Stub区域无关。
1.12.2? 配置兼容RFC 1583的外部路由选择规则
1. 功能简介
当有多条路径可以到达同一个外部路由时,在选择最优路由的问题上,RFC 2328中定义的选路规则与RFC 1583的有所不同,进行此配置可以兼容RFC 1583中定义的规则。
具体的选路规则如下:
(1)?????当RFC 2328兼容RFC 1583时,所有到达ASBR的路由优先级相同。当RFC 2328不兼容RFC 1583时,非骨干区的区域内路由优先级最高,区域间路由与骨干区区域内路由优先级相同,优选非骨干区的区域内路由,尽量减少骨干区的负担;
(2)?????若存在多条优先级相同的路由时,按开销值优选,优选开销值小的路由;
(3)?????若存在多条开销值相同路由时,按路由来源区域的区域ID选择,优选区域ID大的路由。
2. 配置限制和指导
为了避免路由环路,同一路由域内的路由器建议统一配置相同选择规则。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置兼容RFC 1583的外部路由选择规则。
rfc1583 compatible
缺省情况下,兼容RFC 1583的路由选择优先规则的功能处于开启状态。
1.13? 配置OSPF GR
1.13.1? 功能简介
GR(Graceful Restart,平滑重启)是一种通过备份OSPF配置信息,在协议重启或主备倒换时OSPF进行平滑重启,从邻居那里获得邻居关系,并对LSDB进行同步,从而保证转发业务不中断的机制。
GR有两个角色:
·?????GR Restarter:发生协议重启或主备倒换事件且具有GR能力的设备。
·?????GR Helper:和GR Restarter具有邻居关系,协助完成GR流程的设备。
目前有两种方式实现OSPF GR技术:
·?????一种是基于IETF标准,GR Restarter通过向GR Helper发送一种称为Grace LSA的9类Opaque LSA来控制GR的交互过程。
·?????另外一种是非IETF标准,GR Restarter与GR Helper之间是通过相互发送携带LLS与OOB扩展信息的OSPF报文来完成GR的交互过程。
一台设备可以同时充当GR Restarter和GR Helper。
1.13.2? 配置限制和指导
设备充当GR Restarter后不能再配置OSPF NSR功能。
1.13.3? 配置GR Restarter
1. 配置IETF标准GR Restarter
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能Opaque LSA发布接收能力。
opaque-capability enable
缺省情况下,OSPF的Opaque LSA发布接收能力处于开启状态。
(4)?????使能OSPF协议的IETF标准GR能力。
graceful-restart ietf?[?global?|?planned-only?]?*
缺省情况下,OSPF协议的IETF标准GR能力处于关闭状态。
(5)?????(可选)配置OSPF协议的GR重启间隔时间。
graceful-restart interval?interval
缺省情况下,OSPF协议的GR重启间隔时间为120秒。
2. 配置非IETF标准GR Restarter
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能OSPF本地链路信令能力。
enable link-local-signaling
缺省情况下,OSPF本地链路信令能力处于关闭状态。
(4)?????使能OSPF带外同步能力。
enable out-of-band-resynchronization
缺省情况下,OSPF带外同步能力处于关闭状态。
(5)?????使能OSPF协议的非IETF标准GR能力。
graceful-restart?[?nonstandard?]?[?global?|?planned-only?]?*
缺省情况下,OSPF协议的非IETF标准GR能力处于关闭状态。
(6)?????(可选)配置OSPF协议的GR重启间隔时间。
graceful-restart interval?interval
缺省情况下,OSPF协议的GR重启间隔时间为120秒。
1.13.4? 配置GR Helper
1. 配置IETF标准GR Helper
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能Opaque LSA发布接收能力。
opaque-capability enable
缺省情况下,OSPF的Opaque LSA发布接收能力处于开启状态。
(4)?????使能GR Helper能力。
graceful-restart helper enable?[?planned-only?]
缺省情况下,OSPF的GR Helper能力处于开启状态。
(5)?????(可选)配置GR Helper 严格检查LSA能力。
graceful-restart helper strict-lsa-checking
缺省情况下,OSPF协议的GR Helper严格LSA检查能力处于关闭状态。
执行本配置后,当检查到GR Helper设备的LSA发生变化时,Helper设备退出GR Helper模式。
2. 配置非IETF标准GR Helper
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能OSPF本地链路信令能力。
enable link-local-signaling
缺省情况下,OSPF本地链路信令能力处于关闭状态。
(4)?????使能OSPF带外同步能力。
enable out-of-band-resynchronization
缺省情况下,OSPF带外同步能力处于关闭状态。
(5)?????使能GR Helper能力。
graceful-restart helper enable
缺省情况下,OSPF的GR Helper能力处于开启状态。
(6)?????(可选)配置GR Helper 严格检查LSA能力。
graceful-restart helper strict-lsa-checking
缺省情况下,OSPF协议的GR Helper严格LSA检查能力处于关闭状态。
执行本配置后,当检查到GR Helper设备的LSA发生变化时,Helper设备退出GR Helper模式。
1.13.5? 以GR方式重启OSPF进程
1. 功能简介
设备进行主备倒换或者进行如下操作均可以以GR方式重启OSPF进程。
2. 配置步骤
请在用户视图下执行本命令,以GR方式重启OSPF进程。
reset ospf?[?process-id?]?process graceful-restart
1.14? 配置OSPF NSR
1. 功能简介
NSR(Nonstop Routing,不间断路由)通过将OSPF链路状态信息从主进程备份到备进程,使设备在发生主备倒换时可以自行完成链路状态的恢复和路由的重新生成,邻接关系不会发生中断,从而避免了主备倒换对转发业务的影响。
GR特性需要周边设备配合才能完成路由信息的恢复,在网络应用中有一定的限制。NSR特性不需要周边设备的配合,网络应用更加广泛。
2. 配置限制和指导
设备配置了GR NSR功能后不能再充当GR Restarter。
3. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????使能OSPF NSR功能。
non-stop-routing
缺省情况下,OSPF NSR功能处于关闭状态。
各个进程的NSR功能是相互独立的,只对本进程生效。如果存在多个OSPF进程,建议在各个进程下使能OSPF NSR功能。
1.15? 配置OSPF与BFD联动
1.15.1? 功能简介
BFD(Bidirectional Forwarding Detection,双向转发检测)能够为OSPF邻居之间的链路提供快速检测功能。当邻居之间的链路出现故障时,加快OSPF协议的收敛速度。关于BFD的介绍和基本功能配置,请参见“可靠性配置指导”中的“BFD”。
OSPF使用BFD来进行快速故障检测时,提供两种检测方式:
·?????control报文双向检测:需要建立OSPF邻居的两端设备均支持BFD配置。
·?????echo报文单跳检测:仅需要一端设备支持BFD配置。
1.15.2? control报文双向检测
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type?interface-number
(3)?????使能OSPF的BFD功能。
ospf bfd enable
缺省情况下,OSPF的BFD功能处于关闭状态。
创建BFD会话的通信双方必须处于特定区域的同一网段。
1.15.3? echo报文单跳检测
(1)?????进入系统视图。
system-view
(2)?????配置echo报文源地址。
bfd echo-source-ip?ip-address
缺省情况下,未配置echo报文源地址。
echo报文的源IP地址用户可以任意指定。建议配置echo报文的源IP地址不属于该设备任何一个接口所在网段。
本命令的详细情况请参见“可靠性命令参考”中的“BFD”。
(3)?????进入接口视图。
interface?interface-type interface-number
(4)?????使能OSPF的BFD功能。
ospf bfd enable echo
缺省情况下,OSPF的BFD功能处于关闭状态。
1.16? 配置OSPF快速重路由
1.16.1? 功能简介
当OSPF网络中的链路或某台路由器发生故障时,需要通过故障链路或故障路由器传输才能到达目的地的报文将会丢失,数据流量将会被中断,直到OSPF根据新的拓扑网络路由收敛完毕后,被中断的流量才能恢复正常的传输。
为了尽可能缩短网络故障导致的流量中断时间,网络管理员可以根据需要配置OSPF快速重路由功能。
图1-7 OSPF快速重路由功能示意图
?
如图1-7所示,通过在Router B上使能快速重路由功能,OSPF将为路由计算或指定备份下一跳,当Router B检测到网络故障时,OSPF会使用事先获取的备份下一跳替换失效下一跳,通过备份下一跳来指导报文的转发,从而大大缩短了流量中断时间。在使用备份下一跳指导报文转发的同时,OSPF会根据变化后的网络拓扑重新计算最短路径,网络收敛完毕后,使用新计算出来的最优路由来指导报文转发。
网络管理员可以配置给所有OSPF路由通过LFA(Loop Free Alternate)算法选取备份下一跳,也可以在路由策略中指定备份下一跳,为符合过滤条件的路由指定备份下一跳。
1.16.2? 配置限制和指导
OSPF快速重路由功能和PIC同时配置时,OSPF快速重路由功能生效。
1.16.3? 配置通过LFA算法选取备份下一跳信息
1. 配置限制和指导
OSPF快速重路由功能(通过LFA算法选取备份下一跳信息)不能与vlink-peer命令同时使用。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type?interface-number
(3)?????(可选)配置接口参与LFA计算。
ospf fast-reroute lfa-backup
缺省情况下,接口参与LFA计算,能够被选为备份接口。
(4)?????退回系统视图。
quit
(5)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(6)?????配置OSPF快速重路由功能(通过LFA算法选取备份下一跳信息)。
fast-reroute lfa?[?abr-only?]
缺省情况下,OSPF快速重路由功能处于关闭状态。
abr-only表示仅选取到ABR设备的路由作为备份下一跳。
1.16.4? 配置通过路由策略指定备份下一跳
1. 功能简介
网络管理员可以通过apply fast-reroute backup-interface命令在路由策略中指定备份下一跳,为符合过滤条件的路由指定备份下一跳,关于apply fast-reroute backup-interface命令以及路由策略的相关配置,请参见“三层技术-IP路由配置指导”中的“路由策略”。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF快速重路由功能(通过路由策略指定备份下一跳)。
fast-reroute route-policy?route-policy-name
缺省情况下,OSPF快速重路由功能处于关闭状态。
1.16.5? 配置OSPF快速重路由支持BFD检测功能(Ctrl方式)
1. 功能简介
OSPF协议的快速重路由特性中,主用链路缺省不使用BFD进行链路故障检测。配置本功能后,将使用BFD进行检测,可以加快OSPF协议的收敛速度。使用control报文双向检测方式时,需要建立OSPF邻居的两端设备均支持BFD配置。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type?interface-number
(3)?????使能OSPF协议中主用链路的BFD(Ctrl方式)检测功能。
ospf primary-path-detect bfd ctrl
缺省情况下,OSPF协议中主用链路的BFD检测功能(Ctrl方式)处于关闭状态。
1.16.6? 配置OSPF快速重路由支持BFD检测功能(Echo方式)
1. 功能简介
OSPF协议的快速重路由特性中,主用链路缺省不使用BFD进行链路故障检测。配置本功能后,将使用BFD进行检测,可以加快OSPF协议的收敛速度。使用echo报文单跳检测方式时,仅需要一端设备支持BFD配置。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????配置BFD Echo报文源地址。
bfd echo-source-ip?ip-address
缺省情况下,未配置BFD Echo报文源地址。
echo报文的源IP地址用户可以任意指定。建议配置echo报文的源IP地址不属于该设备任何一个接口所在网段。
本命令的详细情况请参见“可靠性命令参考”中的“BFD”。
(3)?????进入接口视图。
interface?interface-type?interface-number
(4)?????使能OSPF协议中主用链路的BFD(Echo方式)检测功能。
ospf primary-path-detect bfd echo
缺省情况下,OSPF协议中主用链路的BFD(Echo方式)检测功能处于关闭状态。
1.17? 配置OSPF验证
1.17.1? 功能简介
从安全性角度来考虑,为了避免路由信息外泄或者OSPF路由器受到恶意攻击,OSPF提供报文验证功能。
OSPF路由器建立邻居关系时,在发送的报文中会携带配置好的口令,接收报文时进行验证,只有通过验证的报文才能接收,否则将不会接收报文,不能正常建立邻居。
如果区域验证和接口验证都进行了配置,以接口验证的配置为准。
1.17.2? 配置限制和指导
对于keychain认证算法和key的标识符的范围,OSPF的支持情况如下:
·?????OSPF仅支持MD5、HMAC-MD5和HMAC-SM3认证算法。
·?????OSPF仅支持标识符取值范围为0~255的key。
1.17.3? 配置区域验证
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????配置OSPF区域的验证模式。请选择其中一项进行配置。
??????配置OSPF区域使用HMAC-MD5/MD5验证模式。
authentication-mode?{?hmac-md5?|?md5?}?key-id?{?cipher?|?plain?}?string
??????配置OSPF区域使用简单验证模式。
authentication-mode simple?{?cipher?|?plain?}?string
缺省情况下,未配置区域验证模式。
一个区域中所有路由器的验证模式和验证密钥必须一致。
1.17.4? 配置接口验证
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置OSPF接口的验证模式。请选择其中一项进行配置。
??????配置OSPF区域使用HMAC-MD5/MD5验证模式。
ospf authentication-mode?{?hmac-md5?|?md5?}?key-id?{?cipher?|?plain?}?string
??????配置OSPF区域使用简单验证模式。
ospf authentication-mode simple?{?cipher?|?plain?}?string
缺省情况下,接口不对OSPF报文进行验证。
邻居路由器两端接口的验证模式和验证密钥必须一致。
1.18? 配置OSPF GTSM功能
1.18.1? 功能简介
GTSM(Generalized TTL Security Mechanism,通用TTL安全保护机制)是一种简单易行的、对基于IP协议的上层业务进行保护的安全机制。开启OSPF报文的GTSM功能后,当设备收到来自OSPF普通邻居或虚连接邻居的报文时,会判断报文的TTL是否在255-“hop-count”+1到255之间。如果在,就上送报文;如果不在,则直接丢弃报文。以使设备避免受到CPU利用(CPU-utilization)等类型的攻击(如CPU过载),增强系统的安全性。
开启GTSM功能的方式有两种:一种是在OSPF区域视图下开启,另一种是在接口视图下开启。在OSPF区域视图下开启GTSM功能会对该区域中所有使能OSPF的接口生效;接口视图下开启GTSM功能只对当前接口生效。在接口视图下配置的hops参数的优先级高于在OSPF区域视图下配置的hops参数。
1.18.2? 配置限制和指导
开启OSPF GTSM功能时,要求本设备和邻居设备上同时配置本特性,指定的hop-count值可以不同,只要能够满足合法性检查即可。
1.18.3? 配置区域GTSM功能
1. 配置限制和指导
该命令对区域中所有使能OSPF的接口都会生效,并且只会对来自OSPF普通邻居和虚连接邻居的报文进行安全检测。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????进入OSPF区域视图。
area?area-id
(4)?????开启区域的OSPF GTSM功能。
ttl-security?[?hops?hop-count?]
缺省情况下,区域的OSPF GTSM功能处于关闭状态。
1.18.4? 配置接口GTSM功能
1. 配置限制和指导
该命令只对当前接口生效,并且只会对来自OSPF普通邻居和虚连接邻居的报文进行安全检测。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入接口视图。
interface?interface-type interface-number
(3)?????配置开启接口的OSPF GTSM功能。
ospf ttl-security?[?hops?hop-count?|?disable?]
缺省情况下,接口的OSPF GTSM功能处于关闭状态。
1.19? 配置OSPF日志和告警功能
1.19.1? 配置邻居状态变化的输出开关
1. 功能简介
打开邻居状态变化的输出开关后,OSPF邻居状态变化时会生成日志信息发送到设备的信息中心,通过设置信息中心的参数,最终决定日志信息的输出规则(即是否允许输出以及输出方向)。(有关信息中心参数的配置请参见“网络管理和监控配置指导”中的“信息中心”。)
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????打开邻居状态变化的输出开关。
log-peer-change
缺省情况下,邻居状态变化的输出开关处于打开状态。
1.19.2? 配置OSPF的日志功能
1. 功能简介
OSPF的日志信息包括路由计算、邻居、路由、LSA老化、生成和接收LSA的日志信息。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(3)?????配置OSPF的日志信息个数。
event-log?{?lsa-flush?|?peer?|?spf?}?size?count
缺省情况下,路由计算、邻居和LSA老化的日志信息个数为10。
1.19.3? 配置OSPF网管功能
1. 功能简介
配置OSPF进程绑定MIB功能后,可以通过网管软件对指定的OSPF进程进行管理。
开启OSPF模块的告警功能后,该模块会生成告警信息,用于报告该模块的重要事件。生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。(有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。)
通过调整OSPF在指定时间间隔内允许输出的告警信息条数,可以避免网络出现大量告警信息时对资源的消耗。
2. 配置步骤
(1)?????进入系统视图。
system-view
(2)?????配置OSPF进程绑定公有MIB。
ospf mib-binding?process-id
缺省情况下,MIB绑定在进程号最小的OSPF进程上。
(3)?????开启OSPF的告警功能。
snmp-agent?trap?enable ospf?[?authentication-failure?|?bad-packet?|?config-error?|?grhelper-status-change?|?grrestarter-status-change?|?if-state-change?|?lsa-maxage?|?lsa-originate?|?lsdb-approaching-overflow?|?lsdb-overflow?|?neighbor-state-change?|?nssatranslator-status-change?|?retransmit?|?virt-authentication-failure?|?virt-bad-packet?|?virt-config-error?|?virt-retransmit?|?virtgrhelper-status-change?|?virtif-state-change?|?virtneighbor-state-change?]?*
缺省情况下,OSPF的告警功能处于开启状态。
(4)?????进入OSPF视图。
ospf?[?process-id?|?router-id?router-id?]?*
(5)?????配置OSPF在指定时间间隔内允许输出的告警信息条数。
snmp trap rate-limit interval?trap-interval?count?trap-number
缺省情况下,OSPF在10秒内允许输出7条告警信息。
1.20? OSPF显示和维护
在完成上述配置后,在任意视图下执行display命令可以显示配置后OSPF的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除OSPF的统计信息、重启OSPF进程或重新向OSPF引入外部路由。
表1-1 OSPF显示和维护
操作 | 命令 |
显示OSPF的ABR聚合信息 | display ospf?[?process-id?]?[?area?area-id?]?abr-summary?[?ip-address?{?mask-length?|?mask?}?]?[?verbose?] |
显示区域中FRR备份下一跳候选列表 | display ospf?[?process-id?]?[?area?area-id?]?fast-reroute lfa-candidate |
显示OSPF区域中的拓扑信息 | display?ospf?[?process-id?]?[?area?area-id?]?spf-tree?[?verbose?] |
显示OSPF的进程信息 | display?ospf?[?process-id?]?[?verbose?] |
显示OSPF ABR及ASBR信息 | display?ospf?[?process-id?]?abr-asbr?[?verbose?] |
显示OSPF的ASBR聚合信息 | display ospf?[?process-id?]?asbr-summary?[?ip-address?{?mask-length?|?mask?}?] |
显示OSPF的日志信息 | display ospf?[?process-id?]?event-log?{?lsa-flush?|?peer?|?spf?} |
显示OSPF进程的GR状态信息 | display ospf?[?process-id?]?graceful-restart?[?verbose?] |
显示OSPF接口信息 | display ospf?[?process-id?]?interface?[?interface-type interface-number?|?verbose?] |
显示OSPF的LSDB信息 | display ospf?[?process-id?]?[?area?area-id?]?lsdb?{?asbr?|?network?|?nssa?|?opaque-area?|?opaque-link?|?router?|?summary?}?[?link-state-id?]?[?originate-router?advertising-router-id?|?self-originate?] display ospf?[?process-id?]?lsdb?[?brief?|?originate-router?advertising-router-id?|?self-originate?] display ospf?[?process-id?]?lsdb?{?ase?|?opaque-as ase?} [?link-state-id?]?[?originate-router?advertising-router-id?|?self-originate?] |
显示进程中的下一跳信息 | display ospf?[?process-id?]?nexthop |
显示OSPF的NSR阶段信息 | display ospf?[?process-id?]?non-stop-routing status |
显示OSPF邻居的信息 | display ospf?[?process-id?]?peer?[?verbose?]?[?interface-type interface-number?]?[?neighbor-id?] |
显示OSPF各区域邻居的统计信息 | display?ospf?[?process-id?]?peer?statistics |
显示OSPF请求列表 | display ospf?[?process-id?]?request-queue?[?interface-type interface-number?]?[?neighbor-id?] |
显示OSPF重传列表 | display ospf?[?process-id?]?retrans-queue?[?interface-type interface-number?]?[?neighbor-id?] |
显示OSPF路由表的信息 | display ospf?[?process-id?]?routing?[?ip-address?{?mask-length?|?mask?}?]?[?interface?interface-type interface-number?]?[?nexthop?nexthop-address?]?[?verbose?] |
显示OSPF的统计信息 | display ospf?[?process-id?]?statistics?[?error?|?packet?[?interface-type?interface-number?]?] |
显示OSPF虚连接信息 | display?ospf?[?process-id?]?vlink |
显示全局Router ID | display router id |
清除OSPF的日志信息 | reset ospf?[?process-id?]?event-log?[?lsa-flush?|?peer?|?spf?] |
重启OSPF进程 | reset?ospf?[?process-id?]?process?[?graceful-restart?] |
重新向OSPF引入外部路由 | reset?ospf?[?process-id?]?redistribution |
清除OSPF的统计信息 | reset ospf?[?process-id?]?statistics |
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!