文档名称 文档密级
2012-12-31 第 1 页, 共 40 页
路由协议 FAQ
Prepared by
整理
Date
日期
2012-12-28
Reviewed by
评审人
Date
日期
Approved by
批准
Date
日期
Authorized by
签发
Date
日期
Huawei Technologies Co., Ltd. 华为技术有限公司
文档名称 文档密级
2012-12-31 第 2 页, 共 40 页
1 OSPF专题
1.1 OSPF Router-ID的作用,选举规则?
OSPF的Router-ID是一台路由器在自治系统中的唯一标识。OSPF的router-id可以手工指定,手工指定的router-id具有最高的优先级。命令如下:
[Router]OSPF 100 router-id 1.1.1.1
如果没有通过手工指定router-id,系统会从当前接口的IP地址中自动选取一个作为路由器的router-id。其选择顺序是:优先从Loopback地址中选择最大的IP地址作为路由器的ID号,如果没有配臵Loopback接口,则在接口地址中选取最大的IP地址作为路由器的ID号。
为了保证router-id的稳定性,一旦通过选举产生了router-id,即使有更优的地址出现(更大的loopback或物理接口地址)、删除OSPF进程后再重新配臵OSPF进程、reset OSPF progress都不会重新选举router-id,除非作为原有router-id的IP地址本身被删除或IP地址所在接口(逻辑接口、子接口)被删除,并且reset OSPF progress。
1.2 OSPF特殊区域中的默认路由下发规则?
Stub区域:由于Stub区域不允许携带OSPF自治系统外部路由的4类和5类LSA泛洪到该区域(Stub区域不能有ASBR),所以Stub区域除了ABR外其他路由器都没有OSPF自治系统外部路由,为了解决该区域的路由器访问OSPF自治系统外部网络的需求,Stub区域的ABR会自动产生一条Link-id为0.0.0.0,掩码为0.0.0.0的summary LSA(3类),并在通告到整个Stub区域。
Totally stub区域:Totally Stub区域和Stub区域的不同在于Totally Stub区域除了不允许携带OSPF自治系统外部路由的4类和5类LSA防洪到该区域,也不允许携带OSPF其他区域路由的3类LSA泛洪到Totally Stub区域.为了解决Totally stub区域内的路由器访问OSPF其他区域或访问OSPF自治系统外部网络的需求,Totally Stub区域的ABR会自动产生一条Link id为0.0.0.0 网络掩码为0.0.0.0的Summary LSA(3类),并且通告到整个Totally stub区域。
NSSA区域:NSSA区域和Stub区域相比的不同在于,NSSA区域允许有ASBR路由器,NSSA区域过滤的是通过OSPF骨干区域学到的4类和5类LSA,不包括NSSA区域的ASBR学到的7类LSA.
文档名称 文档密级
2012-12-31 第 3 页, 共 40 页
NSSA区域的ABR会自动产生一条Link-id为0.0.0.0,掩码为0.0.0.0的summary LSA(3类),并在通告到整个NSSA区域,该缺省路由将作为NSSA区域所有路由器的网络出口。
Totally NSSA区域:Totally NSSA区域和NSSA区域不同之处在于,Totally NSSA不允许携带OSPF区域间的路由。
Totally NSSA区域的ABR也会自动下发一条Link-id为0.0.0.0,掩码为0.0.0.0的summary LSA(3类),并通告到整个Totally NSSA区域,该缺省路由将作为该区域所有路由器的网络出口。
1.3 OSPF特殊区域中如果存在两个ABR,那么这两个ABR都下发缺省路由,不是会形成环路吗?
不会形成环路,当特殊区域中的ABR接收到同一区域ABR发来的带有默认路由的SLA时,它只会将其放入LSDB(LSA Database)里,但不会用其计算路由,从而避免环路。
如果OSPF路由器已经发布了含缺省路由的LSA,就不会再学习其它路由器发布的相同类型的缺省路由LSA(路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA)。
1.4 如果在一个NSSA区域有两个ABR,他们都会将Type7 LSA转换成Type5 LSA吗?
不会的,RFC3101中规定,当NSSA区域有多个ABR时,只有Router ID最大的ABR负责将Type7 LSA转换成Type5 LSA。
1.5 OSPF有哪些种路由过滤方式,这些方式的区别是什么?
OSPF的路由过滤方式很多,主要有filter-policy、filter、route-policy。
这几种路由过滤方式的区别主要体现在两点:
1、 Filter-policy和filter仅能实现路由的过滤,route-policy不仅可以实现路由过滤,还能实现给路由添加或修改标签,添加或修改优先级等等。
2、 OSPF的路由过滤有两种实现方式,一种是对路由表的过滤,这种方式仅对配臵过滤的路由器起作用,不会阻止LSA的产生和泛洪,所以也不会影响其他路由
文档名称 文档密级
2012-12-31 第 4 页, 共 40 页
器产生路由,Filter-policy import OSPF 属于这种方式。第二种方式是阻止LSA的产生,本机以及同区域或同自治系统的其他路由器产生相应的路由,除了filter-policy import OSPF 都属于第二种方式。
1.6 Virtual-link和sham-link的区别是什么?
Virtual-link是为了解决OSPF的不规则区域问题而产生的,正常情况下OSPF的所有非骨干区域都要直接和骨干区域(area0)相连,如果由于前期规划问题等原因导致某个非骨干区域必须通过另一个非骨干区域来连接骨干区域的话,就要用到virtual-link。如下图所示:为了让Area2能够和骨干区域相连,需要在R3和R2之间建立一条virtual-link。
OSPF的×××配臵下,PE2通过从远端PE1通过Mbgp学到的路由引入到OSPF后只能还原成3类/5类/7类LSA,如果CE之间存在后门链路,,作为公网mpls链路的备份。则在CE上通过后门链路学到的路由是区域内路由,由于从MBGP学到的路由,这样就导致了数据只能通过后门链路而不会优选MPLS链路,未解决此问题产生了sham-link,sham-link的主要作用是可以还原1类和2类LSA.
文档名称 文档密级
2012-12-31 第 5 页, 共 40 页
1.7 OSPF几种常用LSA的作用?
Router LSA(type 1):
每一台路由器都会产生Router LSA,router lsa描述了该路由器的所有链路和接口,并指明了他们的状态和每条链路出方向的cost,以及该链路上所有已知的OSPF邻居。Router LSA只在区域内部进行泛洪。
Network LSA(type 2):
Network LSA由DR产生,用来描述一个MA(multiple access)网络中所有路由器,Network LSA列出了MA网络中与本路由器相连的所有路由器,包括DR本身。
Network summary LSA(type 3):
此类型LSA由ABR生成,用来通告区域间的路由,传播范围是除了Totally stub和Totally NSSA区域以外的OSPF区域。
ASBR Summary LSA(type 4):
由ABR产生,用来通告ASBR的位臵,传播范围是除了ASBR所在区域以及stub、totally stub、NSSA、totally NSSA区域以外的整个OSPF区域。之所以需要四类LSA是因为5类LSA在传播过程中,通告者字段始终是ASBR,所以除了本区域以外的路由器,其他区域的路由器都不知道通告者的位臵。而三类LSA在传播过程中遇到ABR,通告者字段就会自动修改
文档名称 文档密级
2012-12-31 第 6 页, 共 40 页
为ABR的router-id,所以每个区域都知道通告者的位臵。四类LSA在传播过程中遇到ABR,通告者字段就会自动修改为ABR的router-id。
Autonomous system external LSA(type 5):
由ASBR产生,用来通告到达OSPF自治系统外部目的地址或者缺省路由的LSA,传播范围是整个OSPF区域。
NSSA EXTERNAL LSA(TYPE 7):
由ASBR产生,用来通告到达OSPF自治系统外部目的地址或缺省路由的LSA,只在NSSA区域内泛洪。之所以有7类LSA是因为NSSA区域就是用来过滤远端学到的4类和5类LSA的,但是本地产生或学到的外部路由不应该被过滤,所以起了一个产生了7类LSA。
1.8 Stub区域和NSSA区域的区别?
简单的讲就是Stub区域不能包含ASBR,NSSA区域可以包含ASBR.
1.9 OSPF支持多进程,那么交换机的一个接口也可以属于不同的OSPF进程吗?
不能。OSPF支持多进程是指在同一台交换机上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立,不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交
互。但是交换机的一个接口只能属于某一个OSPF进程。
1.10 OSPF在建立或维持OSPF邻居或邻接关系之前,需要准备哪些参数?
运行OSPF协议的接口编号、发送Hello和Dead报文的时间间隔、OSPF的最大重传次数、重传LSA的时间间隔以及泛洪更新LSA的时间间隔。
1.11 OSPF协议路由的计算有那些过程?
OSPF 协议路由的计算过程可简单描述如下:
a) 每台OSPF 设备根据自己周围的网络拓扑结构生成链路状态通告LSA(Link State Advertisement),并通过更新报文将LSA 发送给网络中的其它OSPF 设备。
文档名称 文档密级
2012-12-31 第 7 页, 共 40 页
b) 每台OSPF 设备都会收集其它路由器发来的LSA,所有的LSA 放在一起便组成了链路状态数据库LSDB(Link State Database)。
c) OSPF 设备将LSDB 转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。
d) 每台OSPF设备根据有向图,使用SPF 算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
1.12 ABR和ASBR有什么区别?
ABR可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
ASBR是与其他AS 交换路由信息设备,它可能是区域内路由器,也可能是ABR。只要一台OSPF 设备引入了外部路由的信息,它就成为ASBR。
1.13 OSPF定义了哪几种网络类型?
OSPF定义了四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。
点到点网络是指只把两台路由器直接相连的网络。
广播型网络是指支持两台以上路由器,并且具有广播能力的网络。
非广播多路访问(NBMA网络)。在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配臵。NBMA方式要求网络中的路由器组成全连接。
点到多点网络是将整个非广播网络看成是一组点到点网络。每个路由器的邻居可以使用底层协议例如反向地址解析协议(Inverse ARP)来发现。对于不能组成全连接的网络应当使用点到多点方式。点到多点网络类型不是一种默认的网络类型。
1.14 邻居和邻接关系的区别?
OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方一致就会形成邻居关系。
形成邻居关系的双方不一定都能形成邻接关系。只有当双方成功交换DD 报文,并交换
文档名称 文档密级
2012-12-31 第 8 页, 共 40 页
LSA 之后,才形成真正意义上的邻接关系。
1.15 在所有类型的OSPF网络中都会产生DR和BDR吗?
不是所有网络类型都会产生DR和BDR,只有广播型网络和NBMA网络中才有DR和BDR。
1.16 OSPF每种报文类型各自实现什么功能?
OSPF共有五种报文类型。
Hello报文用于发现和维护邻居关系,在广播型网络和NBMA网络上Hello报文也用来选举DR和BDR。
Database Description报文通过携带LSA头部信息描述链路状态摘要信息。
Link State Request报文用于发送下载LSA的请求信息,这些被请求的LSA是通过接收DD报文发现的,但是本路由器上没有的。
Link State Update报文通过发送详细的LSA来同步链路状态数据库。
Link State Ack报文通过泛洪确认信息确保路由信息的交换过程是可靠的。
除了Hello报文以外,其他所有报文只在建立邻接关系的路由器之间发送。
1.17 OSPF 路由器分为几种类型?
OSPF路由器根据在AS中的不同位臵,可以分为四类。
区域内路由器IR(Internal Routers):该类路由器的所有接口都属于同一个OSPF区域。
区域边界路由器ABR(Area Border Routers):该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
骨干路由器BR(Backbone Routers):该类路由器至少有一个接口属于骨干区域。因此,所有的ABR和位于Area0的内部路由器都是骨干路由器。
自治系统边界路由器ASBR(AS Boundary Routers):与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。
文档名称 文档密级
2012-12-31 第 9 页, 共 40 页
1.18 OSPF路由分为几种类型?
OSPF将路由分为4级,按优先顺序来说分别是:
区域内路由(Intra Area):缺省情况下路由的协议优先级为10,描述的是AS内部同一个区域网络结构。
区域间路由(Inter Area):缺省情况下路由的协议优先级为10,描述的是AS内部不同区域的网络结构。
第一类外部路由(Type1 External):缺省情况下路由的协议优先级为150,描述应该如何选择到AS以外目的地址的路由。第一类外部路由的开销=本路由器到相应的ASBR的开销+ASBR到该路由目的地址的开销。
第二类外部路由(Type2 External):缺省情况下路由的协议优先级为150,描述应该如何选择到AS以外目的地址的路由。第二类外部路由的开销=ASBR到该路由目的地址的开销。
1.19 OSPF GR
Graceful Restart指的是平缓重启路由器的一种功能,可以保证流量转发不中断,网络不会因为路由器的短时间重启而引起路由震荡。
路由器若不以Graceful Restart方式重启OSPF协议,与它邻接的路由器就会把它从邻居列表中删除,并通知给其他路由器,导致重新计算SPF。如果协议重启的时间很短,就会引起路由震荡。
为了避免不必要的SPF计算,当路由器以Graceful Restart方式重启OSPF协议时,会通知与它邻接的路由器它只是关闭几秒钟,马上就会恢复正常。这样,邻接路由器就不会将进行GR操作的路由器从邻居列表中删除,其他路由器也不会知道有路由器重启,这样就避免了因邻居关系改变而导致的路由震荡。
1.20 OSPF路由聚合分为哪两类?
OSPF有两类聚合:ABR聚合和ASBR聚合
ABR聚合:ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区
文档名称 文档密级
2012-12-31 第 10 页, 共 40 页
域中存在一些连续的网段,则可以使用abr-summary命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,这样可减少其它区域中LSDB的规模。
ASBR聚合:配臵引入路由聚合后,如果本地路由器是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配臵了NSSA区域时,将对引入的聚合地址范围内的Type7 LSA进行聚合。
1.21 区域内泛洪的LSA和区域间泛洪的LSA有什么区别?
区域内的LSA是描述的是区域内路由器端口链路状态的集合,区域间的LSA描述的是区域内各网段的精简路由信息,而不是详细的链路状态信息。
1.22 OSPF协议报文不转发是怎样实现的?
OSPF协议报文是封装在IP报文里面的,把IP报文中的TTL值设臵为1,可实现OSPF协议报文不转发。
1.23 OSPF中DR和BDR的作用是什么?
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了指定路由器DR(Designated Router),所有路由器都只将信息发送给DR,由DR将网络链路状态广播出去。
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,并与新的DR同步。这需要较长的时间。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router)的概念。
BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的。当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
文档名称 文档密级
2012-12-31 第 11 页, 共 40 页
1.24 OSPF为什么要划分区域?
在比较大的网络中OSPF的LSA非常庞大,占用大量的存储空间。OSPF是链路状态协议,所以路由器存储的是LSA而不仅仅是路由信息。划分区域后,每个分区内的路由器所需要存储的LSA的数量会大大的减少。
链路状态算法比距离矢量算法复杂的多,在比较大的网络中计算最小生成树耗时大,CPU的负担很重。划分区域后,区域内还是采用链路状态算法,但是区域之间采用的则是距离矢量算法。
在比较大的网络中网络拓扑结构经常发生变化,使得网络经常处于“动荡”之中。网络比较大的时候,网络中拓扑发生变化的概率也会比较大,每次网络拓扑发生变化的时候,都要重新计算最小生成树。划分区域后,ABR相当于一个“大坝”,把不同区域的“动荡”隔离开来。
1.25 OSPF区域间采用的距离矢量算法,通过什么方法解决了以区域为单位的环路问题?
不同的区域都必须与骨干区域相连,并且只能和骨干区域交互路由信息,可以解决这种环路问题。
2 ISIS专题
2.1 与OSPF对应,ISIS中是否也有router-id?ISIS中如果修改了loopback接口地址是否一定要修改ISIS中的system-id?
ISIS中也有router-id的概念,只是在ISIS中不叫router-id,而是称为system-id。如下所示:isis 100
Network-entity 49.0000.0010.0100.1001.00
在上面这个ISIS定义中,system-id就是0010.0100.1001(即network-entity中倒数7个字节中的前6个字节)。system-id可以根据loopback地址手工配臵(举例中就是用1.1.1.1这个IP地址生成的),也可以用MAC地址手工配臵,只要能保证system-id在整个ISIS系统内唯一就可以。所以修改了loopback地址也不一定非要修改系统标示符。为了安
文档名称 文档密级
2012-12-31 第 12 页, 共 40 页
全起见,建议system-id与本路由器loopback地址或MAC地址保持一致,以防止产生冲突。
2.2 如何选择ISIS网络的system-id?
1. 使用loopback地址配臵system-id。如loopback地址为192.168.3.25
2. 使用以太网口的MAC地址,如MAC地址为0011-1130-4422。
0011.1130.4422:system-id
通常推荐使用loopback接口IP地址来生成system-id。
2.3 ISIS支持的网络类型有哪些?
ISIS支持P-2-P网络和广播网络,IS-IS协议不能真正支持NBMA网络,但可以将NBMA链路配臵成子接口来支持。子接口类型为:P-2-P或者广播网络。
2.4 ISIS协议运行在数据链路层,因此Isis邻居关系的形成与IP无关,但为什么当对端和本端接口IP地址不在同一网段时不能形成邻居关系?
ISIS邻居关系的形成与IP无关,但ARP为保证邻居的可达性,如果不是unnumber地址,本端接口会检查对端的路由,如果对端路由与本段不在同一网段,那么两端不能形成邻居关系.
文档名称 文档密级
2012-12-31 第 13 页, 共 40 页
2.5 IS、ES和DIS之间的区别?
IS(Intermediate System)中间系统:具有数据包转发能力的网络节点,类似于IP中的路由器。
ES(End System)端系统:没有路由能力或数据包转发能力的网络节点,类似于IP中的主机。
DIS(Designated Intermediate System)指定中间系统:在ISIS广播网络类型中,需要选举一个指定的中间系统,周期性的向其他路由器进行LSDB数据库的泛洪。功能类似于OSPF中的DR(Designated Router)。但是在OSPF中还有备份BDR(Backup Designated Router)的概念,ISIS中没有备份的DIS概念。
2.6 ISIS路由协议采用几层的结构?
ISIS路由协议采用两层结构:Level-1的普通区域和Level-2的骨干区域。
Level-1的普通区域中所有的路由器必须有相同的区域地址,相互间形成Level-1的邻居关系,整个区域中只有Level-1层次上的链路数据库LSDB,没有Level-2骨干区域的路由信息。类似于OSPF中的Total Stubby区域。
Level-2的骨干区域由所有的Level-2路由器和L1/L2路由器组成。该区域中路由器间形成Level-2的邻居关系,拥有Level-2层次上的链路数据库LSDB和Level-1层次上的路由信息。
L1/L2路由器可以同时和L1层次的路由器形成Level-1的邻居关系,与L2层次的路由器形成Level-2的邻居关系。所以L1/L2路由器拥有Level-1的链路状态数据库LSDB和Level-2的链路状态数据库LSDB,在区域的边界完成把Level-1路由信息通告到Level-2骨干区域中。
2.7 ISIS协议中,指定路由器(DIS)是如何选举的?
ISIS 协议中,DIS 的选举是自动进行的。选举的依据是同一网络中各接口的优先权,如果最高的优先权的接口不止一个则从这些优先权相同的接口中找MAC 地址最大的。DIS 的选举是在IS 自身进行的,网络中的各个IS 根据所在网络的接口上的邻居信息来进行选举。由于整个网络中的邻居信息是一致的,所以各自进行的选举结果是相同的。
只有在广播网络类型上才会选举DIS,在Point-to-Point的网络类型不需要DIS 的选举。
文档名称 文档密级
2012-12-31 第 14 页, 共 40 页
不同层次有不同层次的DIS。
IS-IS中不存在备份DIS,当一个DIS不能工作时,直接选举另一个。
DIS发送的Hello报文的时间间隔为普通路由器的1/3,这样便于其他路由器快速检测到DIS的失效,同时快速选举新的DIS接替。
DIS路由器不具有终生制,一旦网络中新增加的路由器DIS的优先级高于当前的DIS的优先级或当前的DIS发生故障,网络中将重新选举新的DIS,网络的稳定性较差。
2.8 ISIS中路由渗透的作用是什么?
通常情况下,IS-IS的区域也称为Level-1区域,区域内的路由通过Level-1的路由器进行管理。所有的Level-2路由器构成一个Level-2区域。因此,一个IS-IS的路由域可以包含多个Level-1区域,但只有一个Level-2区域。Level-1区域必须且只能与Level-2区域相连,不同的Level-1区域之间并不相连。Level-1区域内的路由信息通过Level-1-2路由器通报给Level-2区域,因此,Level-2路由器知道整个IS-IS路由域的路由信息。但是,在缺省情况下,Level-2路由器并不将自己知道的其他Level-1区域以及Level-2区域的路由信息通报给Level-1区域。这样,Level-1路由器将不了解本区域以外的路由信息,可能导致对本区域之外的目的地址无法选择最佳的路由。为解决上述问题,IS-IS提供了路由渗透功能,使Level-2路由器可以将己知的其他Level-1区域以及Level-2区域的路由信息通报给指定的Level-1区域。
3 BGP专题
3.1 BGP有哪几种拓扑结构?
BGP有三种基本的网络拓扑结构:
单口AS (stub AS):一个AS通过单一出口点到达其域外的网络;
多归路非过渡AS (multihomed AS):一个AS有多于一个到达外部网络的出口点但它不允许业务量通过它过渡;
过渡AS (transit AS):一个AS有多于一个到达外部网络的出口点并且它允许被其他AS用于过渡业务量;
文档名称 文档密级
2012-12-31 第 15 页, 共 40 页
从BGP的观点上来看整个Internet的拓扑就是由一系列单口AS多归路非过渡AS和过渡AS组成的连通图。每个AS用AS号码来识别两个AS之间的连接形成一个路径,BGP保证无循环域间选路路径信息的汇集形成一棵路径树,这棵路径树就是到达特定目的地的路由。
3.2 BGP的Router_ID如何配臵?如何自动选择?
全局Router ID可以在全局模式下通过配臵命令router id来配臵,如果没有通过命令指定,系统会从当前接口的IP地址中自动选取一个作为路由器的ID号。其选择顺序是:优先从Loopback地址中选择最大的IP地址作为路由器的ID号,如果没有配臵Loopback接口,则选取接口中最大的IP地址作为路由器的ID号。只有在路由器的Router ID所在接口被删除或去除手工配臵的Router ID的情况下才会重新选择路由器的Router ID。为了增加网络的可靠性,建议将Router ID手工配臵为Loopback接口的IP地址。
BGP的Router ID可以在启动BGP进程后通过BGP全局模式下的配臵命令router-id来指定,若未配臵则采用全局Router ID值。通过BGP的配臵命令修改Router-ID会导致已经建立的BGP peer会全部重启,如:
bgp 100
router-id 1.1.1.1
3.3 BGP的选路规则
BGP的选路规则如下:
优选协议首选值(PrefVal)最高的路由;
优选本地优先级(Local_Pref)最高的路由;
优选聚合路由(聚合路由优先级高于非聚合路由);
本地手动聚合路由的优先级高于本地自动聚合的路由;
本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由;
优选AS路径(AS_Path)最短的路由;
文档名称 文档密级
2012-12-31 第 16 页, 共 40 页
比较Origin属性,依次选择Origin类型为IGP、EGP、Incomplete的路由;
优选MED值最低的路由;
优选从EBGP学来的路由(EBGP路由优先级高于IBGP路由);
优选AS内部IGP的Metric最低的路由。如果配臵了负载分担,并且有多条As_Path完全相同的外部路由,则根据配臵的路由条数选择多条路由进行负载分担;
优选Cluster_List最短的路由;
优选Originator_ID最小的路由;
优选Router ID最小的路由器发布的路由;
比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由。
3.4 BGP路由的基本使用原则有哪些?
BGP路由往往很多,但是并不是都会进行转发处理,大概有如下几条规则:
1) 多条路径时,BGP Speaker只选最优的给自己使用,当然也可以设臵负载分担,负载分担请见BGP ECMP FAQ;
2) BGP Speaker只把自己使用的路由通告给相邻体,也就是说本地BGP路由表里面不是最优的路由不会再进行转发处理等操作;
3) BGP Speaker从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP),当然路由不会再从原路发送回去;
4) BGP Speaker从IBGP获得的路由不向它的IBGP相邻体通告(反射可以解决这个问题);
5) BGP Speaker从IBGP获得的路由默认会向它所有EBGP相邻体通告;若配臵了同步,是否通告给它的EBGP相邻体要依IGP和BGP同步的情况来决定;
3.5 BGP路由协议是如何避免路由环路的?
BGP不同于其他IGP协议,其路由都包含了丰富的路由属性,并通过路由属性来对路由进行过滤,其中一个属性为AS_PATH,该属性为该路由经过的所有AS的序列,这样对于收
文档名称 文档密级
2012-12-31 第 17 页, 共 40 页
到的路由,通过对AS_PATH进行检查,如果发现自身的AS号已经出现在AS_PATH属性中,那么就表示自身发布的路由又重新回到自己所处的AS中,已经出现了路由环路,这时就会丢弃接收到的路由,从而避免继续对外发布路由,导致环路产生。
当然还可以参考上面的BGP使用原则,比如BGP从IBGP收到的路由不继续往IBGP邻居发送,这也是协议上避免环路的一种方法。
正常情况下BGP会丢弃AS_PATH中包含自身AS号的路由。对于特定情况下导致的AS号重复的合理环境,可以通过如下命令来进行控制“peer { group-name | peer-ipv4-address } allow-as-loop [ number ]”,其中number取值范围为<1-10>,默认值为1,即允许接收路由的AS_PATH中包含一个自身AS号。当然,在向EBGP邻居发布时,也还要在AS_PATH最后再加上自身的AS号。
3.6 有哪些原因会导致BGP连接建立不起来?
最常见原因如下:
1) 两边BGP peer地址无法ping通,一般是底层原因或者缺少可达的路由,可以使用扩展的ping命令检查TCP连接是否正常,由于一台路由器可能有多个接口能够到达对端,应使用ping -a ip-address命令指定发送ping包的源IP地址。
2) 对等体IP地址和AS配臵错误,常为大意所致;
3) OPEN报文协商失败,OPEN报文需要协商BGP版本、Holdtime、RouterID以及可选项参数(包括各种能力参数)等;一般情况为无法正确识别参数所导致,特别是友商的互通过程中(当收到不支持的能力参数时候,V5会主动断开连接,这种实现是按标准RFC实现的,但是有新的草案准备完善此项功能);
4) BGP的MD5验证配臵错误;
5) BGP的Router-ID冲突;
6) 联盟与非联盟之间的BGP连接配臵错误;
7) 比较少见的如BGP的Marker值出现错误;
8) 还有一些比较特殊的情况,见下文;
3.7 有哪些排错手段针对BGP连接建立不起来的情况?
最常见方法如下:
文档名称 文档密级
2012-12-31 第 18 页, 共 40 页
1) 首先打开调试开关deb bgp X.X.X.X all开关,确认状态机在哪一步错现错误;
2) 如果BGP状态始终在active状态徘徊,表示TCP建立不起来,首先排除底层不通和路由不可达的情况;
3) 如果BGP状态始终在active状态徘徊,其次排除BGP的MD5验证问题;
4) 如果BGP状态始终在active状态徘徊,最后特殊配臵问题,比如IBGP的connect-interface或者EBGP peer的ebgp-max-hop等,见下文;
5) 如果是Open报文协商错误,通过调试开关,V5能够很方便的查看到具体的错误类别和信息,然后根据错误提示采取具体措施;
3.8 BGP Open报文中有哪些能力参数?
BGP的能力参数类型有两种,即多协议能力和路由刷新能力;针对地址族的定义就比较多了,不同厂商实现也不一样。比如根据最新RFC4761,针对VPLS的能力已经定义为25/65(L2vpn也是25/65)。具体情况见下表,
CODE
AFI
SAFI
IPv4 Unicast
Multiprotocol(1)
1
1
IPv4 Multicast
Multiprotocol(1)
1
2
IPv4 ×××V4
Multiprotocol(1)
128
L2vpn
Multiprotocol(1)
196
128
Ipv6 Unicast
Multiprotocol(1)
2
1
IPv6 Multicast
Multiprotocol(1)
2
2
VPLS(H3C)
Multiprotocol(1)
155
128
VPLS(RFC4761)
Multiprotocol(1)
25
65
ORF(Cisco)
Multiprotocol(1)
130
7
Refresh
Route Refresh(2)
-
-
文档名称 文档密级
2012-12-31 第 19 页, 共 40 页
3.9 使用Loopback口为什么无法建立IBGP邻居?
IBGP PEER使用loopback口无法建立,通常是因为BGP连接建立首先要建立起两个peer之间的TCP连接,而TCP连接的源地址缺省是路由器相应的出接口的IP地址,所以必须要指定TCP连接的源地址为相应的loopback接口地址,连接才能建立起来,peer X.X.X.X connect-interface命令的功能就是用于指定BGP会话建立TCP连接使用的接口。
3.10 直连EBGP使用Loopback口为什么无法建立连接?
很简单,上面的例子是IBGP邻居关系的建立,如果使用Loopback口建立的是EBGP连接,需要配臵ebgp-max-hop,因为两个loopback口不是直连接口。
一般情况下不推荐使用loopback建立EBGP邻居,而一般是使用物理接口地址建立,比如在L3vpn的各种跨域环境中。
3.11 为什么非直连EBGP邻居无法建立?
如果是EBGP邻居,双方路由可达,且EBGP连接在物理上不是直连的,请检查是否配臵了peer的ebgp-max-hop。默认情况下,EBGP使用直连口建邻居,如果不是直连,必须配臵peer的ebgp-max-hop值,默认是64。
3.12 有哪些原因会导致BGP连接建立成功后再down掉?
最常见原因如下:
1) BGP连接建立好后,在协商后的holdtime时间内收不到keepalive报文,导致错误代码为4/0的错误;
2) 收到非法的Update报文导致BGP为了安全考虑自动中断连接,并打印错误信息;
3) MTU问题,路由器会因为一些固定口的芯片限制或者人为的MTU设臵,导致经过多次封装后的BGP报文被丢弃;
4) MTU和QoS设臵不当可能导致大的Update报文被丢弃,由于TCP的重传机制,当发送多个大的Update报文时,可能产生大量等待重传的
文档名称 文档密级
2012-12-31 第 20 页, 共 40 页
Update报文,从而抑制了keepalive报文的正常发送,当连续收不到keepalive报文时,BGP认为邻居已经Down。
5) 网络拥塞问题:网络拥塞可能导致Keepalive报文收发失常,邻居状态不断改变;另外,如果到达邻居的路由是通过IGP(如OSPF)发现的,网络拥塞可能导致该路由丢失,从而使邻居间的连接中断。
6) 设臵原因,导致TCP179端口号不可再用;
当然了,BGP所支持的操作非常多,还有很多主动的原因导致BGP会话重新启动:
1) 对端关闭会话,比如对peer配臵ignore命令;
2) 如果配臵了路由数目限制(peer X.X.X.X route-limit),超过指定数目后也会down掉;不同机型其最大值也不一样。
3) 远端AS改变;
4) 修改路由反射器客户机配臵;
5) 修改对等体/组的某些策略或者能力;
6) 配臵和反配臵BGP的Router ID;
7) 由联盟改为非联盟,或反之;confederation nonstandard也可导致;
3.13 为什么使用network命令无法将本地路由通过BGP发布出去?
比如本地存在直连路由或者IGP协议路由172.16.1.0/24,BGP视图下使用network 172.16.1.0命令,目的是准备把这条路由传递到BGP路由表中,但是查看BGP路由没有这条路由。
使用BGP的network命令发布路由,前缀和掩码必须完全匹配才能正常发布。172.16.0.0是一个B类网段地址,如果没有mask参数的话,缺省使用16位自然掩码,而上述路由的掩码是24位,所以必须在mask参数中配臵24位地址掩码才能正常发布路由。
BGP配臵模式下的network命令可以带mask参数,也可以不带。不带mask参数的情况下缺省使用路由的自然掩码。在全局路由表中必须具有前缀和掩码都相同的路由,才能正常发布。
3.14 Peer Ignore命令有什么作用
Peer ignore命令用来人为地停止指定对等体/对等体组的激活会话,并且清除所有相关路由信息,禁止与指定对等体/对等体组建立会话,BGP邻居将一直抑制在idle的状态,会话一直处于无法建立的状态。如果该命令用来对于一个对等体组,这就意味着大量与对端的
文档名称 文档密级
2012-12-31 第 21 页, 共 40 页
会话突然终止。缺省情况下,允许与BGP对等体/对等体组建立会话。在配臵peer ignore命令之后,我司display bgp peer的具体显示如下:
4.4.4.4 4 100 0 0 0 0 02:35:59 Idle(Admin)
3.15 BGP如何发布默认路由?
BGP可以通过peer default-route-advertise和default-route import来控制缺省路由发布。Peer default-route-advertise不需要本地存在缺省路由而直接向peer发布缺省路由,而default-route import仅仅表示允许引入本地缺省路由,意思是必须通过import方式引入存在本地路由表里面的IGP默认路由,然后再配臵default-route import才能使默认路由正确引入。
3.16 为什么从直连EBGP邻居向IBGP邻居发布路由时,路由会失效?
在BGP中,向IBGP和EBGP邻居发送路由时,下一跳的处理是不同的。向EBGP邻居(即在AS间传播)发送路由时,next-hop均改为该路由器的出口IP地址(当下一跳修改前后的地址符合第三方下一跳时,不做修改);向IBGP邻居(即在AS内传播)发送路由时,next-hop是不变的。
由于BGP向其他IBGP邻居转发来自EBGP路由时不修改下一跳,这样的话若IBGP邻居所处的设备没有到该下一跳地址的路由,会导致该IBGP收到这条转发自IBGP邻居的EBGP邻居的路由后下一跳不可达,导致路由失效。
解决方案有多种:可以配臵next-hop-local,这样收到EBGP路由再往IBGP邻居发送的时候会强制更改下一跳为自己的出接口地址;自治域内所有的设备都配臵IBGP邻居且要全链接,通过bgp把下一跳也学过去;通过IGP协议来保证自治域内的所有设备能够知道下一跳的接口地址。
3.17 为什么相同路由比较的时候没有选择MED值小的路由?
三台AS号不一致的MSR之间分别建立了EBGP邻居关系,其中RTC同时收到RTA和RTB发来的因特网路由。根据RTC的要求,RTA将自己发送给RTC的路由设臵MED值为50,而RTB将自己发送给RTC的MED设臵为100。RTC希望选择MED值小的路由作为最佳路由,从而对
文档名称 文档密级
2012-12-31 第 22 页, 共 40 页
相同目的地来说,把通过RTA的链路作为主链路,而把通过RTB的链路作为备份链路。当时在RTC上面没有把RTA发送过来的路由选为最优,为什么?
MSR路由器的BGP在路由优选过程中考虑若干因素,包括本地优先级、AS路径长度、起点类型、MED值等。在前几项都相同的情况下,应选择MED值小的路由作为最佳路由。需要注意的是,MED值只在同一AS传来的路由之间才具备可比性。为了能够在不同AS传来的相同路由之间比较MED值,从而选择MED小的路由作为最佳路由,需要在BGP、BGP ×××视图下配臵命令compare-different-as-med。
3.18 为什么OSPF的路由引入到BGP中后cost(MED)需要加1?
在RFC4577(OSPF as the Provider/Customer Edge Protocol for BGP/MPLS IP Virtual Private Networks)中有这么一段描述:
MED (Multi_EXIT_DISC attribute). By default, this SHOULD be set to the value of the OSPF distance associated with the route, plus 1.
即OSPF路由被引入到BGP中后MED值需要加1。
3.19 OSPF下MCE能力对BGP MED的影响!
命令行vpn-instance-capability simple的作用并不是使能vpn能力,而是使能了多实例CE的能力。
比如不配臵vpn-instance-capability时候,引入到BGP多实例进程中的路由会携带下面类似属性Ext-Community :<OSPF Domain Id: 0.0.0.0:0>, <OSPF AreaNum: 0.0.0.0 RouteType:
5 Option: 1>, <OSPF Router Id: 10.10.1.1:0:0>,<RT: 1:1>,上述扩展团体属性是bgp携带发给对端PE设备的,用来让对端PE上的OSPF进程还原LSA的依据;此时候设备就作为普通的PE,pe上bgp引入OSPF路由时,med的值等于OSPF路由的cost加1;
[MSR50-40-bgp-vpn-a]dis bgp vpn vpn vpn-a routing-table 172.32.0.0
BGP local router ID : 104.104.104.104
Local AS number : 100
Paths: 1 available, 1 best
文档名称 文档密级
2012-12-31 第 23 页, 共 40 页
BGP routing table entry information of 172.32.0.0/16:
Imported route.
From : 0.0.0.0 (0.0.0.0)
Original nexthop: 10.10.1.2
Ext-Community :<OSPF Domain Id: 0.0.0.0:0>, <OSPF AreaNum: 0.0.0.0 RouteType:
5 Option: 1>, <OSPF Router Id: 10.10.1.1:0:0>, <RT: 1:1>
AS-path : (null)
Origin : incomplete
Attribute value : MED 2, pref-val 0, pre 150
State : valid, local, best,
Not advertised to any peers yet
当配臵了vpn-instance-capability simple后,本地路由器就不是PE了,而成了MCE,这样所以bgp引入OSPF路由时,本地OSPF就不会组装这些属性值给bgp了,只是作为普通的引入,处理,BGP路由只会携带扩展团体属性<RT: 1:1>,而引入的OSPF路由的其他扩展团体属性则会丢失;
而这个时候bgp引入OSPF路由时,med的值等于OSPF路由的cost
[MSR50-40-OSPF-1000]
#
OSPF 1000 vpn-instance vpn-a
vpn-instance-capability simple
area 0.0.0.0
network 10.10.1.0 0.0.0.255
#
return
[MSR50-40-OSPF-1000]dis bgp vpn vpn vpn-a routing-table
Total Number of Routes: 3
BGP Local router ID is 104.104.104.104
Status codes: * - valid, > - best, d - damped,
文档名称 文档密级
2012-12-31 第 24 页, 共 40 页
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 16.16.16.16/32 0.0.0.0 1 0 ?
*> 50.1.1.0/24 0.0.0.0 1 0 ?
*> 172.32.0.0 0.0.0.0 1 0 ?
[MSR50-40-OSPF-1000]dis OSPF routing
OSPF Process 1000 with Router ID 10.10.1.1 Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
10.10.1.0/24 10 Transit 10.10.1.1 16.16.16.16 0.0.0.0
Routing for ASEs
Destination Cost Type Tag NextHop AdvRouter
172.32.0.0/16 1 Type2 1 10.10.1.2 16.16.16.16
50.1.1.0/24 1 Type2 1 10.10.1.2 16.16.16.16
16.16.16.16/32 1 Type2 1 10.10.1.2 16.16.16.16
Total Nets: 4
Intra Area: 1 Inter Area: 0 ASE: 3 NSSA: 0
3.20 如何实现BGP多进程和网络迁移?
众所周知,一个路由器只支持一个BGP进程,有着唯一的AS号,但是在某些特殊情况下比如网络迁移更换as号的时候为了保证网络切换的顺利,需要一些特性来支持,具体可
文档名称 文档密级
2012-12-31 第 25 页, 共 40 页
以参看《BGP Support for Dual AS Configuration for Network AS Migrations》,
请见URL:http://tech/article.php/4728。V5通过fake-as命令为指定PEER设臵一个假AS号来实现,该特性只针对EBGP PEER有效。该命令用来支持BGP邻居可以配臵不同于当前由使能BGP协议时指定的自治系统号(等同于Cisco的local-as命令),配臵peer { group-name | peer-ipv4-address } fake-as [ number ]命令后,该peer和本地建peer关系时,要用fake-as号来代替本地的实际as号。示例说明一下,本地RTX(本地地址57.0.0.1)的BGP配臵如下:
bgp 100
router-id 1.1.1.1
undo synchronization
peer 57.0.0.2 as-number 57
peer 57.0.0.2 fake-as 88
那么RTX在向57.0.0.2建立连接时的本地AS将是88,而不是100。与此同时,RTY(本地地址57.0.0.2)配臵peer 57.0.0.1时对应的AS号也应该为88,而不是100。相关BGP配臵如下:
bgp 57
peer 57.0.0.1 as-number 88
undo synchronization
实际应用中,该命令通常和peer { group-name | peer-ipv4-address } substitute-as 结合使用。
3.21 什么是BGP的同步原则?
同步的目的是为了防止在某种情况下转发“黑洞”的出现,起用同步功能后BGP Speaker 在接收到IBGP邻居发过来的路由后都会查看该路由是否已经在IGP路由表中,如果IGP路由表中有这条路由,BGP路由表才会将这条路由臵为有效;如果IGP路由表中没有该路由则BGP表中的该条路由是无效的。如果关闭同步功能,在收到IBGP邻居发来的路由更新后不检查IGP表是否有该路由,而直接将该路由臵为有效,这样的话在以下拓扑中就会出项问题:
文档名称 文档密级
2012-12-31 第26 页, 共40 页
172.16.1.0/24
AS100
AS200
RTA AS300
RTB
RTC
RTD
RTE
EBGP
IBGP
EBGP
在上图中,RTC没有运行BGP,RTD关闭了同步功能。172.16.1.0/24从RTA 始发,传
播方向为:RTA---------------RTB---------------RTD----------------RTE
RTB、RTD、RTE收到该路由后将其臵为有效,这时如果RTE要转发一个目的ip为
172.16.1.10的报文的话,将会通过如下步骤转发:
step1:RTE将目的ip为172.16.1.10的报文发给RTD;
step2:RTD接到此报文后将向RTB转发此报文(RTB已使用next-hop-local),但由于
RTD与RTB的IBGP连接为逻辑连接,因此去RTB的实际下一跳是RTC,于是又将此报文转发给
RTC;
step3:RTC收到此报文后查找路由表,但没有找到匹配项,因为RTC没有运行BGP,
不知道172.16.1.10的下一跳,所以此目的ip为172.16.1.10的报文在RTC处就被丢弃了!
在上图中,RTB、RTC、RTD的IGP路由表中没有172.16.1.0/24的路由,如果开启同步
功能的话,RTB向RTD通告该路由时RTD不会将此路由臵为有效,RTD也不会向RTE通告该路
由,也就避免了上述问题的发生。
在实际环境中AS转接路径中的所有路由器都运行BGP,也就不会出现上述问题,因此
可以将同步功能关闭。
在具体实现上,v3不支持同步,而v5可以支持同步,默认为不同步。
3.22 V5 如何实现路由聚合?
V5有两种聚合方式,如下:
1) 自动聚合功能:通过summary automatic 命令在BGP/BGP ××× 视图下配
臵,默认不使能;自动聚合只聚合通过import-route 命令引入的各协议路由
(对从邻居收到的BGP 路由不生效),且不对缺省路由进行聚合,同时对参
与聚合的IGP 引入的子网路由会自动进行抑制,从而减少路由选择信息的的
文档名称 文档密级
2012-12-31 第 27 页, 共 40 页
数量。这种方法比较死板,而且是按照自然掩码进行聚合,有的时候不能满足需要。
2) 手工聚合:通过aggregate在BGP/BGP ×××视图下配臵,该命令携带的参数比较多,而且聚合时候灵活多边,可以与路由策略巧妙结合在一起以达到精确控制的目的,具体使用方法可以参看《MSR路由器BGP聚合路由测试经验小结》,URL为:http://tech/article.php/5211。
需要注意的是aggregate命令参数的使用比较复杂,对于其实现方法是和Cisco存在一定差别的,可以参考文档对比了解一下;
aggregate在手工聚合时候,如果不设臵掩码,会以自然掩码进行聚合,这一点尤其要注意。
3.23 BGP通过哪些改变来支持IPv6?
根据RFC2858,BGP4+增加2个新属性MP_REACH_NLRI、MP_UNREACH_NLRI用以支持BGP4+,在update报文中只有next-hop、aggregator、NLRI三个字段与IPv4有关;继承了BGP的属性以及各种应用规则。这方面文档比较多,可以参看《BGP4多协议扩展协议详解_RFC2858》,url为:http://tech/article.php/1982;
具体V5的实现以及BGP和BGP4+的一些实现差异,可以参看如下文档《MSR路由器-BGP4+介绍》,URL为:http://tech/article.php/5028,详细介绍了MP报文。
3.24 目前BGP4+的实现是否和BGP完全一致?
目前V5的实现相比V3有了很大的改进,同时增加了对BGP4+的支持;重点的特性目前只支持团体和反射、单播,不支持路由聚合、×××V4等重要功能;
BGP4+就是基于IPv6地址族的BGP实现,这实际上可以理解为Multi-protocol Extensions for BGP-4(RFC2238)针对IPv6的应用。但是因为下一跳长度等发生变化,单纯的IP地址变化无法满足实际需求。为此,在UPDATE报文中增加了两项optional non-transitive的路由属性对对应地址族下的路由进行控制,分别是Multi-protocol Reachable NLRI - MP_REACH_NLRI (Type Code 14,十六进制:0x0E)和Multi-protocol Unreachable NLRI - MP_UNREACH_NLRI (Type Code 15,十六进制:0x0F)。其中
文档名称 文档密级
2012-12-31 第 28 页, 共 40 页
MP_REACH_NLRI用来发布路由,MP_UNREACH_NLRI用来撤销路由。
3.25 BGP可利用等价路由进行迭代?
比如现在有两条缺省路由,一条出接口NULL0,一条是迭代到GE0/1.1上的。BGP路由在迭代时候如何处理?为什么使用dis ipv6 relay-tunnel查看时候,自发现基于Null0的统计了迭代次数?
在V5实际处理中,BGP路由都是迭代到缺省路由上了,而不是直接迭代到GE0/1.1上。只不过有两条等价的缺省路由,所以生成了学过来的每条BGP路由,都多产生一条Derived路由,从而形成等价路由。但实质是迭代到::/上了,所以看到的迭代次数 55::/64仅1次(ipv6 route-static :: 0 55::1 迭代的),::/ 10000次(所有的BGP路由)
3.26 V5路由策略支持哪些过滤规则?
V5支持丰富的路由策略来控制路由的接受和发送,针对bgp对等体或者对等体组有如下方式:
1) as-path-acl,AS路径过滤控制列表;
2) ip-prefix,IP前缀列表(支持IPv6,即ipv6-prefix);
3) route-policy,路由策略;
4) filter-policy(advanced acl),路由应用过滤策略;
其中route-policy又支持多种控制规则,比如:
1) if-match as-path,匹配AS路径列表;
2) if-match community,匹配团体属性列表;
3) if-match extcommunity,匹配扩展团体属性列表;
4) if-match cost,匹配路由MED;
5) if-match interface,BGP不支持这种过滤方式;
6) if-match mpls-label,BGP支持,通过BGP分配标签可以代替IGP+LDP模式,在L3vpn的c2c以及跨域中得到大量应用;
7) if-match acl(advanced acl),匹配访问控制列表;
8) if-match ip/IPv6,匹配下一跳,可以指定acl或者地址前缀列表;
文档名称 文档密级
2012-12-31 第 29 页, 共 40 页
9) if-match ip-prefix,匹配地址前缀列表,同样也支持IPv6。
3.27 路由策略的基本匹配规则有哪些?
BGP号称路由中的王者,有很大一部分功劳归功于路由策略,可以说是其左右臂膀之一。针对路由策略的使用,各个厂商有其各自的规则。V5的路由策略配臵和使用都相对比较复杂,但只要掌握以下几条基本原则,相关的问题就会迎刃而解。
1) 一个Route-policy的所有NODE之间是"或"的关系
2) 一个NODE内部所有"if-match"之间是"与"的关系
3) 一个"if-match"内部的所有参数之间是"或"的关系
简单来说,一个Route-policy可以由多个节点(node)构成,每个节点是进行匹配测试的一个单元,节点间依据顺序号(node-number)进行匹配。每个节点可以由一组if-match和apply子句组成。if-match子句定义匹配规则,匹配对象是路由信息的一些属性。同一节点中的不同if-match子句是“与”的关系,只有满足节点内所有if-match子句指定的匹配条件,才能通过该节点的匹配测试。apply子句指定动作,也就是在通过节点的匹配测试后所执行的动作——对路由信息的一些属性进行设臵。
一个Route-policy的不同节点间是“或”的关系,系统依次检查Route-policy的各个节点,如果通过了Route-policy的某一节点,就意味着通过该Route-policy的匹配测试(不进入下一个节点的测试)。
而对于某些if-match子句,后面可以跟多个同类的并列参数,这些参数之间是“或”的关系,即满足其中一个参数的值,就满足了该if-match子句。
例如下面的配臵:
route-policy 1 permit node 1
if-match cost 20
if-match route-type internal external-type1
route-policy 1 permit node 2
if-match cost 30
在route-policy 1中配臵了两个节点node 1和node 2,而在不同的node中配臵了不同的if-match子句。
文档名称 文档密级
2012-12-31 第 30 页, 共 40 页
很容易可以看出,满足node 1的条件是cost为20并且路由类型为OSPF内部或者外部type1路由。即对于if-match route-type internal external-type1来说,由于internal和external-type1是同一个if-match子句中多个并列参数,所以它们之间是“或”的关系,只要类型为internal或者external-type1的路由均算满足该if-match子句。
而对于node 1来说,它存在多个并列的if-match子句,它们之间是“与”的关系,所以必须同时满足
if-match cost 20
if-match route-type internal external-type1
这两个条件才算正在通过node 1的测试。
而对于node 2而言,只有没有通过node 1检测的情况下才会发挥作用,否则通过了node 1的检测就不再进入node 2的检测了。
注:如果node中的if-match条件匹配成功且if-match的条件是DENY,则不论node配臵的是permit和deny继续匹配下一个node;如果所有的node都没有匹配成功,则按照DENY处理。
对于不存在的路由策略默认通过!
3.28 匹配了前缀列表,但是还是没有对端发送过来的路由,why?
R1上配臵如下:
Peer X.X.X.X ip-prefix 1 import
ip ip-prefix 1 index 20 permit 10.0.0.0 16
很显然,配臵的前缀列表是错误的,应该是permit 10.0.0.0 8,当进行前缀控制列表匹配的应该要注意淹没和规则的逻辑。
文档名称 文档密级
2012-12-31 第 31 页, 共 40 页
3.29 为什么给等体配臵路由策略apply community后,对端收到的路由属性里却没有任何团体属性?
R2上配臵如下:
Peer X.X.X.X route-policy 1 export
Route-policy : 1
permit : 0
apply community 1 2 3
apply extcommunity rt 0.0.0.0:0
R1收到路由后不会具备团体属性和扩展团体属性,为什么了?BGP默认是不发送团体属性和扩展团体属性(当然vpnv4默认发送扩展团体属性)的,所以要想将这类属性发送出去必须针对指定的对等体或者对等体组设臵命令:
Peer X.X.X.X advertise-community,发送团体属性;
Peer X.X.X.X advertise-ext-community,发送扩展团体属性,两者没有耦合关系。
3.30 如何使用正规则表达式通过AS-path进行路由控制?
使用as-path控制列表来进行路由控制是比较复杂且难以记忆的控制方法,主要是正规则表达式的使用,这方面可以参考鉴定中心的经典输出文档《常用BGP正则表达式应用》,
URL为:http://tech/article.php/2038
3.31 为什么BGP不支持路由策略中的if-match interface策略?
很显然,在BGP里面是没有路由信息接口这个概念,V5也不支持;if-match interface命令用来配臵路由信息的出接口的匹配条件,所以BGP在路由策略检查的时候不会去检查if-match interface策略,而是直接默认通过这个检查。
文档名称 文档密级
2012-12-31 第 32 页, 共 40 页
3.32 为什么路由策略要对路由进行两次检查?
打开RM的policy调试开关可以看到,每更改一次策略,RM都要对单条路由进行两次路由策略检查,为什么了?
V5为了减少内存使用量,目前是这么实现,更改策略后第一次过策略决定此路由是否匹配策略,而第二次过策略决定通过策略后路由的具体属性以便组包发送,这样实现在过第一次策略后不用保存通过策略的具体属性,减少了内存使用量,当然了,这必然会牺牲一部分效率。期待以后有更加合理的实现方法吧!
3.33 应用策略为路由添加了团体属性,可发布路由时却没有携带?
在默认情况下,向peer发布团体属性、扩展团体属性的能力是关闭的。需要使用时应该使用如下命令使能该能力:
“peer { group-name | peer-ipv4-address } advertise-community ”、
“peer { group-name | peer-ipv4-address } advertise-ext-community ”。
3.34 反射有什么特点?如何配臵BGP反射?
在一个AS内,IBGP必须要求在逻辑上是全连接的,但随着网络拓扑的日益复杂,IBGP的全网连接开销很大,为了解决这个问题,引入了反射机制。路由反射器概念的基本思路是:指定一个集中路由器作为内部对话的焦点。多个BGP路由器可以与一个中心点对等化,然后多个路由反射器再进行对等化。
路由反射器的特点:
1. 简单易理解
2. 移植方便(不用更改现有网络拓扑结构)
3. 兼容性好(不用所有的路由器都支持反射机制,反射器对于客户来说是透明的)
请注意,反射器反射路由时,不应该修改NEXT-HOP,AS_PATH,MED以及LOCAL_PRE属性。同时在反射器上应用的路由策略修改属性后,新的属性也不会应用到反射路由上。
V5反射器支持普通BGP、×××V4、BGP ×××,在指定视图下进行如下配臵:
reflector cluster-id 4294967295 //反射器ID
peer 104.104.104.104 reflect-client //指定IBGP peer作为反射器客户端
文档名称 文档密级
2012-12-31 第 33 页, 共 40 页
reflect between-clients //默认已经配臵,反配臵则取消反射功能
3.35 什么是冗余反射器和嵌套反射器?
反射的配臵相当灵活,除了普通的配臵方案外,为了加强反射技术的健壮性和灵活性,还可以配臵冗余反射器和嵌套反射器:
由于AS域内逻辑结构的改变,反射器成为路由发布的瓶颈,一旦反射器出问题,那么整个域内的路由传递就会受到很大的影响,在这种情况下,可以通过配臵冗余反射器来解决,即:一个群内存在一个以上的反射器,各反射器CLUSER_ID是一样的,都与客户进行全连接,当一台反射器出问题时,另一台反射器仍能正常工作,相当于备份功能。冗余反射的概念可以进一步参考下文。
除此以外,还可以配臵嵌套反射器,即在一个群内嵌套配臵一个反射群,反射群与该群的CLUTER_ID是不同的。嵌套反射器在×××V4用的比较多,比如MPLS L3vpn环境中,通过多级反射来分担PE的压力。
为了避免路由环路,引用了originator-id属性和cluster-list属性,originator-id属性是由反射器产生的,它的值是始发这条路由的邻居的router-id;cluster-list也是由反射器产生的,反射器如果发现update报文中有了cluster-list属性,就把自己的cluster-id添加到后面;如果没有,就创建一个cluster-list属性,把自己的cluster-id放到上面,再向其他邻居发布;如果发现与本地雷同,则会丢弃该路由以避免环路。cluster-id的值可以在反射器上配臵,如果没有配臵,缺省使用反射器的router-id。
文档名称 文档密级
2012-12-31 第 34 页, 共 40 页
3.36 为什么收到携带含有与本地Router ID相同的originator-id属性路由后会丢失?
R1和R2为RR,R3和R4为RRC,R4发布一条路由,R2收到了,但是R1和R3都没有收到。
发射路由在发送过程中会携带一个originator-id属性和一个cluster-list属性。其中originator-id的值是始发路由器的ID,cluster-list的值为沿途反射器的cluster-id。当客户机收到反射路由后会检查路由的这两个属性,如果在收到的路由中的originator-id属性中发现了自己的Router ID,就会拒绝该路由。这里原因为R1和R4的BGP进程具备相同的ID。
3.37 为什么收到携带含有与本地cluster-id相同的cluster-list属性路由后会丢失?
R1和R2为RR,R3和R4为RRC,R4发布一条路由,R2和R1都收到了,但是R3没有收到。
发射路由在发送过程中会携带一个originator-id属性和一个cluster-list属性。其中originator-id的值是始发路由器的ID,cluster-list的值为沿途反射器的cluster-id。当客户机收到反射路由后会检查路由的这两个属性,如果在收到的路由中的cluster-list属性中发现了自己的cluster-id,就会拒绝该路由。所以原因为R1和R2设臵了相同的cluster-id,R1收到
文档名称 文档密级
2012-12-31 第 35 页, 共 40 页
R2反射过来的路由后,会将路由丢弃而不会转发到R3。
如果R1和R2具备相同的cluster-id,而R3还要收到R4路由的话,可以用到前面提到的冗余反射概念,将R3也连到R2上,这样R1和R2都是RR而且具备相同的cluster-id,形成冗余反射环境,R4的路由会直接发射到R3上。
3.38 路由反射遵循哪些原则?
反射器的IBGP邻居有两类:客户和非客户邻居,反射器同客户一起形成一个群,群内的客户不应再与群外的BGP邻居形成IBGP连接。一个AS内所有的路由反射器和非客户机构成全闭合网。
1) 反射器从非客户收到的路由发向所有客户;
2) 由客户收到的路由会发向所有客户以及非客户(包括发送者本身);
3) 由EBGP邻居收到的路由发向所有客户以及非客户。
3.39 反射路由的属性不应该被改变!
被反射的路由其属性不应该被改变,比如在测试中经常忽略的联盟属性等都不应该被反射器改变。
配臵BGP路由反射,可以减少IBGP连接,反射到客户端的路由要在CLUSTER_LIST由属性中添加自身的cluster-id,但cluster-id的配臵也不是必需的。当BGP配臵reflector cluster-id后,即采用所配臵值,当没有配臵该值时,BGP将把local router id添加到对应CLUSTER_LIST路由属性中。
3.40 如何配臵联盟以及联盟的作用?
在RFC3065中定义:“This document describes an extension to BGP which may be used to create a confederation of autonomous systems that is represented as a single autonomous system to BGP peers external to the confederation, thereby removing the "full mesh" requirement. The intention of this extension is to aid in policy administration and reduce the management complexity of maintaining a large autonomous system.”可见联盟同反射类似,都是为了解决大规模网络中IBGP全网
文档名称 文档密级
2012-12-31 第 36 页, 共 40 页
连接的问题。联盟的概念基于一个AS可以被分为多个子AS,子AS内使用IBGP全闭合网,子AS之间以及联盟本身与外部AS之间使用特殊的EBGP连接。虽然子AS之间的路由经EBGP交换,所有的IBGP规则仍然适用,因此对于AS外的路由器来看一个联盟就象一个单一的AS。EBGP下个中继、量度值和本地优先值仍然在内传送。
参与联盟的路由器一般遵循如下配臵:
confederation id 6500 //大AS号,一个联盟内一致,不能与本地AS号相同
confederation peer-as 600 //本地相连子AS的AS号
3.41 联盟新增的两个属性?
Currently, BGP specifies that the AS_PATH attribute is a well-known mandatory attribute that is composed of a sequence of AS path segments. Each AS path segment is represented by a triple <path segment type, path segment length, path segment value>. In [1], the path segment type is a 1-octet long field with the two following values defined:
Value Segment Type
1 AS_SET: unordered set of ASs a route in the UPDATE message has traversed
2 AS_SEQUENCE: ordered set of ASs a route in the UPDATE message has traversed
在RFC3065中新增加了两个为联盟定制的属性,即:
3 AS_CONFED_SEQUENCE: ordered set of Member AS Numbers in the local confederation that the UPDATE message has traversed
4 AS_CONFED_SET: unordered set of Member AS Numbers in the local confederation that the UPDATE message has traversed
增加这两种属性是为了防止联盟内部的环路。
3.42 AS-PATH参数在联盟中如何进行传递?
对于AS_CONFED_SEQUENCE和AS_CONFED_SET,联盟内处理方式大致与
文档名称 文档密级
2012-12-31 第 37 页, 共 40 页
AS_SEQUENCE和AS_SET相同,同时:
1) 当路由在联盟内子自治系统间传递时,不应修改AS_PATH属性。
2) 当路由在联盟内子自治系统间传递时:
a) 若第一个AS_PATH是AS_CONFED_SEQUENCE,BGP将自己的子自治系统AS号加在最左端。
b) 否则,创建一个AS_CONFED_SEQUENCE,包含自己的子自治系统AS号。
3) 当向联盟外EBGP传递路由时:
a) 若第一个AS_PATH是AS_CONFED_SEQUENCE,将后续的AS_CONFED_SEQUENCE和AS_CONFED_SET删除,至b)。
b) 若第一个AS_PATH是AS_SEQUENCE,则将联盟AS加在最左端。
c) 若第一个AS_PATH是AS_SET,增加一个AS_SEQUENCE,将联盟AS加在最左端。
4) 对于本地初始路由的传播:
a) 向本自治系统内IBGP发送,空的AS_PATH属性。
b) 向联盟内,本自治系统外EBGP发送,带有AS_CONFED_SEQUENCE属性。
c) 向联盟外EBGP发送,带有AS_SEQ属性。
3.43 V5的confederation nonstandard命令有什么用处?
RFC1965中规定:AS-PATH Segment Type 3是AS_CONFED_SET属性,Type 4是AS_CONFED_SEQUENCE属性。而过去Cisco把Type 3作为AS_CONFED_SEQUENCE属性,Type 4不使用。这样导致Cisco路由器的BGP update报文中,联盟的AS-PATH属性的格式和RFC不一致,导致互通过程我司不能识别合法的带有联盟的AS-PATH属性的BGP报文。
过去为了达到互通的问题,需要配臵confederation nonstandard命令以兼容Cisco的处理。不过现在与Cisco ISR的12.3系列路由器互通不存在类似问题。
3.44 为什么目的网段相同的BGP路由在设臵balance以后还是无法形成等价路由?
很遗憾,V5等价BGP路由的实现有着较多的限制,具体如下:
1) 参与BGP负载分担特性的路由必须为有效路由
2) 参与负载分担的BGP路由ORIGIN,LOCAL-PREFERENCE,MED以及AS-PATH路径属性必须相同。BGP根据路由来源分为IBGP学到的路由,EBGP
文档名称 文档密级
2012-12-31 第 38 页, 共 40 页
学到的路由,NETWORK命令引入路由,IMPORT-ROUTE命令引入路由,自动聚合路由以及手动聚合路由。不同起源之间的路由不形成负载分担;
3) 来源不同的BGP路由之间不形成负载分担;
4) 标签路由与非标签路由之间不形成负载分担。标签路由是指遵循RFC3107的BGP公网带标签路由;
5) 反射路由和非反射路由之间不形成负载分担;
6) 下一跳相同的BGP路由不形成负载分担;
7) 转发路由时,多条等价路由只随机选取一条路由并向外发送;
在保证如上规则后,还需要在BGP视图或者BGP ×××视图配臵等价负载分担命令balance,默认不进行负载分担,MSR的最大等价路由数目为8条。
3.45 等价BGP路由下一跳设臵
IBGP负载分担路由在配臵反射的情况下向IBGP邻居转发等价路由时,不改变下一跳,下一跳为选中的等价路由初始下一跳;其他情况下,下一跳为形成负载分担的BGP本地地址
3.46 如何通过BGP实现负载分担?
BGP默认不形成等价路由。当存在等价路由后,在BGP或者BGP vpn视图下设臵balance命令,可以使能等价路由功能。等价路由的形成具有很多限制,可以参考7.1节。
理论上对等体之间建立多个peer可以很容易形成等价路由,但是要注意这样带来的环路影响。同时通过引入IGP路由在自治域间形成等价路由也是比较常见的方式。比如在Multihomed AS拓扑中常会用到负载分担特性,当然这种简单的负载分担是不区分流量和业务,而是统一分配。
还有一种负载分担方法即根据不同业务和流量进行整体上的负载分担。如下图所示,针对不同业务X和Y的路由设臵不同优先级,导致业务X的流量从link1通过,业务Y的流量从link2通过。
文档名称 文档密级
2012-12-31 第 39 页, 共 40 页
3.47 如何通过BGP实现链路备份?
对于来自域见的路由,在进入本地AS系统后常会通过设臵边界路由器的本地优先级,导致路由在进行选择的时候存在主备,而边界路由器之间存在备份,在全连接中经常用到这种备份方法。如下图所示,customer的路由通过两条路径发送到ISP后在两台边缘路由器上会形成两条路由,但是由于优先级的不同在传递到最上面的ISP路由器后会进行优选导致有主备之分。
文档名称 文档密级
2012-12-31 第 40 页, 共 40 页
3.48 流量如何通过等价路由进行转发?
MSR路由器在通过等价路由转发的时候,是逐包而不是逐流进行转发的,通过轮循出接口进行转发;当流量停止后再次转发时,会根据最后一次转发使用的路由的下一条路由进行转发。
3.49 BGP协议中包含哪些消息?它们是如何应用的?
BGP协议中包含的消息有open、update、keepalive、notification。
通过TCP建立BGP连接时,发送OPEN消息。
连接建立后,如果有路由需要发送或路由变化时,发送UPDATE消息通告对端路由信息。
稳定后此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对端。