边界网关协议 - BGP【高级】
目录
BGP的选路
BGP的属性
BGP对等体组
BGP团体属性(community)
BGP路由聚合
BGP路由反射器
BGP联盟
BGP防环机制总结
BGP的选路
BGP的13条路由选路原则
-
首先丢弃下一跳(NEXT_HOP)不可达的路由。
-
优选Preferred-value值最大的路由。
-
默认为0。
-
Preferred-value:首选项。
-
属性值:默认为0,取值范围是 0~65535,取值越大,优先级越高。
-
注意:该属性是H3C和华为的私有属性。
-
-
优选本地优先级(LOCAL_PREF)最高的路由。
-
依次选择network命令生成的路由、import-route命令引入的路由、聚合路由。
-
优选AS路径(AS_PATH)最短的路由。
-
依次选择ORIGIN属性为IGP、EGP、Incomplete的路由。
-
优选MED值(开销)最低的路由。
-
依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由。
-
优选下一跳度量值最低的路由。
-
度量值:一般指通过IGP协议到达下一跳地址的度量值。
-
-
优选CLUSTER_LIST长度最短的路由。
-
优选ORIGINATOR_ID最小的路由。
-
优选Router ID最小的路由器发布的路由。
-
优选IP地址最小的对等体发布的路由。
从上到下优先级下降。
BGP路由表
BGP负载分担时的选路
BGP本身一定能选出唯一的一条到达指定网段的最优路由,所以本身没有负载分担一说。但是,可以手工配置,通过手动配置路由策略可以允许BGP实现负载分担。
BGP的负载分担与IGP的负载分担有所不同
-
IGP的负载分担是通过协议自身定义的路由算法,对到达同一目的地的不同路由,将度量值相等的路由进行负载分担。
-
BGP由于本身没有路由计算的算法,但BGP有丰富的选路规则,可以对路由进行一定的选择后,有条件的进行负载分担。
BGP路由的发布策略
-
在BGP协议中,路由器只会将最优路径发布给自己的对等体。如果使用了active-route-advertise命令,则发布IP路由表中的最优路由。反之,则发布BGP路由表中的最优路由。
-
只将自己使用的路由发布给对等体(最优)。
-
从EBGP对等体获得的路由会向它所有的BGP对等体发布。
-
从IBGP获得的路由不向它的IBGP对等体发布(IBGP水平分割)。
-
从IBGP获得的路由发布给它的EBGP对等体。
-
BGP连接一旦建立,BGP发言者将会将所有满足上述条件的路由发布给自己的对等体。之后,只在发生路由变化时才会向对等体发布新的更新路由。
BGP路由过滤
-
通过路由策略。
-
通过地址前缀列表。
-
通过filter-policy。
BGP的属性
属性就是描述一个对象特征的一些信息。
公认属性
运行BGP协议的所有路由器都必须可以识别的属性。
公认必遵属性
-
运行BGP协议的路由器发布的路由中必须携带的属性,也是所有运行BGP协议的路由器必须识别的属性。包括AS_path、next-hop、origin。
-
AS_path
-
AS路径属性,记录路由传递过程中经过的AS编号。一条路由每从一个AS传出,传出路由器会把该AS的编号按照从右至左的顺序依次记录在AS_PATH属性中。
-
主要是用于防止环路。
-
还可以用于路由优选,AS_path属性越短,代表该路由需要跨越的AS区域越少,路由越优。
-
在需要增加AS_path长度用来控制路由选路时,建议增加真实经过的AS区域的编号,防止因AS_path的防环机制导致路由无法学习。
-
-
next-hop
-
如果一个路由器同时拥有EBGP和IBGP邻居时,需要注意:
-
路由器发布路由给EBGP邻居时,下一跳变更为指定EBGP邻居地址。
-
路由器发布路由给IBGP邻居时,下一跳不变(仍保持为指定的上一个AS的EBGP邻居地址)。
-
对IBGP邻居发布的路由通告命令更改下一跳为本机。
-
-
-
origin
-
路由来源属性,描述一条BGP路由的来源。
-
三种来源
-
IGP,来源为network宣告、聚合的路由。显示为“i”。
-
EGP,来源为引入的EGP协议路由。显示为“e”(一般见不到,因为目前EGP协议已经基本淘汰了)。
-
incomplete,未完成,来源于引入IGP协议或者静态路由。显示为“?”。
-
优先顺序为:IGP > EGP > incomplete
-
-
公认可选属性
-
所有路由器都识别,但不是必须携带的属性。包括local-perference、Atomic-aggregate。
-
local-perference
-
本地优先级,在同一个AS内的路由器可以看到该属性,表明了BGP路由器的优先级。
-
默认值为100,值越大,优先级越高。
-
-
Atomic-aggregate
-
自动聚合。
-
可选属性
可选传递属性
-
路由器可以不识别该属性,但是会继续向下传递该属性。包括aggregate、community属性。
-
aggregate
-
手动聚合。
-
-
community
-
团体属性。
-
可选非传递属性
-
路由器可以不识别该种属性,也不用向下传递。包括 clustor_list、originator_id、MED属性。
-
clustor_list
-
集群列表。
-
-
originator_id
-
集群ID。
-
-
MED
-
多出口鉴别器,当一个AS有多个入口点时,用于判断流量进入AS时的最优路径。
-
相当于开销值,越小越优先。
-
注意
-
MED值会传递到IBGP和EBGP邻居,但不会传递至下一个AS。若一条路由的MED属性是本机赋予的,该属性将会传递给本机的IBGP和EBGP邻居;若一条路由的MED属性不是本机赋予的(本机收到其他路由器传递的带有MED属性的路由),该路由的MED属性会传递给IBGP邻居;路由由本机发布或是通过策略修改了MED值的情况,都属于该MED属性由本机赋予。
-
默认情况下,路由器只会对属于同一个AS的EBGP邻居传递的路由中携带的MED值进行对比。
-
-
使用属性控制选路建议
-
如果希望影响下游所有路由器的路由选择,建议使用AS-PATH。
-
如果只希望影响本AS内部的路由器选择,建议使用Local-preference。
-
如果希望只影响下游某一个AS的路由器选择,建议使用MED。
-
如果希望只影响某一台路由器的路由选择,建议使用preferred-value。
BGP对等体组
一些具有某些相同属性的对等体的集合,具有简化配置的作用。可以解决BGP对等体多,配置繁琐等问题。
-
根据对等体所在的AS,可以将对等体组分为IBGP对等体组和EBGP对等体组。
-
IBGP对等体组,指的是在一个AS内的路由器和其多个IBGP对等体形成的对等体组。
-
EBGP对等体组,指的是AS内的路由器和其属于同一其它AS的多个EBGP对等体形成的对等体组。
-
-
在创建对等体组时,创建对等体组的路由器需要与其他所有需要加入到对等体组的路由器建立对等体(邻居)关系,而其他路由器间不用建立关系,只需要与创建对等体组的路由器建立关系。创建完成后,会形成类似全连接的状态。这样的机制也大大简化了配置。
BGP团体属性(community)
相当于路由标记,是一组具有相同特征的目的地的集合,可以针对特定的路由设置特定的团体属性值。同样可以解决BGP对等体多,配置繁琐等问题。
-
格式为xx:x。
-
相当于一个标签。通过识别标签来控制流量。
-
公认的团体属性
-
Internet
-
默认值,可以被通告给所有BGP路由器。
-
-
no-advertise
-
路由信息无法发送给自己的IBGP对等体或EBGP对等体。
-
-
no-export
-
路由信息可以发送给自己的BGP对等体,但对方收到后不能发送出自己所属的AS(子AS)。但可以发送给自己的联邦EBGP对等体(在同一个AS内的其他联盟中的与自己建立对等体关系的路由器)。
-
-
no-export-subconfed
-
路由信息可以发送给自己的BGP对等体,但对方收到后不能发送出自己所属的AS(子AS)。且不可以发送给自己的联邦EBGP对等体。
-
-
BGP路由聚合
可以减少路由表规模,用来解决BGP路由器中路由条目过多、路由表过大的问题。
-
自动聚合(Atomic-aggregate)
-
只对引入的IGP路由有效。
-
只能将路由明细按照主类进行聚合,且之后只学习聚合后的路由,容易造成路由黑洞。
-
只能在始发路由器(产生想要聚合的路由条目的路由器)上配置。
-
华为设备默认关闭该功能。
-
-
手动聚合(aggregate)
-
可以实现精确汇总。
-
可以在任何路由器上配置。
-
需手动抑制明细路由。
-
BGP路由反射器
BGP路由反射器可以将学习到的IBGP邻居的路由反射给其他IBGP邻居。可以用来代替IBGP全连接,从而解决IBGP全连接导致的资源浪费问题(所有邻居间都会传递路由信息,不仅占用链路资源,还会增加路由器的负担)。还能减少邻居数量,解决IBGP水平分割带来的无法传递路由的限制。
-
角色
-
路由反射群
-
AS内由多个路由器组成的集合,群内的反射器将收到的路由反射给同一个反射群中的客户机。而不在反射群中的路由器则不会收到反射器的路由。
-
路由反射器(router-reflect)
-
RR,反射群内承担反射器职责的路由器。
-
配置时还需要指定客户机。
-
-
客户机
-
反射群内除反射器外的其他路由器。
-
不用做任何配置,其并不知晓网络中存在路由反射器。
-
-
非客户机
-
对于一个反射群的路由器来说,在同一个AS内的非本反射群的路由器。
-
-
-
反射规则
-
从非反射客户端接收的路由,仅反射给客户端。
-
客户端收到的路由,反射给其他除始发路由器外的所有客户端和非客户端。
-
从EBGP接收到的路由,反射给所有客户端和非客户端。
-
注意,在反射群中,所有客户端只需要与反射器建立IBGP邻居关系。
-
-
反射器环路分析及其解决方案
-
一个反射群中如果只存在一个反射器,若反射器出现故障,会照成整个网络瘫痪。故,我们还可以设置反射器的备份,备份的反射器同样需要与客户机建立关系,而且备份反射器与主反射器间同样需要建立关系。此时环路产生(客户机将路由传递给主反射器,主反射器会反射给备反射器,备反射器继续反射给客户机)。
-
-
环路产生的原因为反射器导致IBGP水平分割失效。
-
解决方案(两个属性)
-
cluster_list(集群列表)
-
类似于AS_PATH,AS_PATH中有AS编号;而集群列表中有cluster id(集群ID),集群ID默认为路由器的router id,可手动修改。
-
同一个反射群内反射器的cluster id必须相同。
-
路由传递时,路由器会将经过的反射器的集群ID依次记录在集群列表中。当反射器收到BGP路由时,如果本机的集群ID出现在集群列表中,则丢弃该路由。
-
还可参与选路,集群列表短的优先。
-
缺点:不能解决两个反射群中的两个反射器相连造成的环路(环路原因与上面的原因相似)。
-
-
originator_ID(起源ID)
-
可解决两个反射群中的两个反射器相连造成的环路。
-
由路由反射器反射一条路由时产生,会在反射出去的路由中增加该属性,值为产生该路由的路由器的router id。
-
运行BGP协议的路由器收到一条携带originator_ID属性的IBGP路由时,比较该值与自身router id。相同则会忽略该条路由的更新。
-
该属性也可以用于选路,originator_ID短的优先。
-
-
-
-
注意
-
反射的路由无法通过路由策略更改任何路由属性。
-
BGP联盟
联盟将一个AS自治系统划分为若干个子自治系统(使用私有AS编号),每个自治系统内部的IBGP对等体建立全连接关系,子自治系统间建立联盟内部EBGP连接关系。该方案同样可以解决IBGP全连接导致的资源浪费问题。
-
子AS使用私有AS编号。
-
其他AS的边界路由器仍然和本AS内的路由器建立EBGP邻居关系,无视子AS的影响。
-
跨越子AS的路由器仍需要更改下一跳为本机。
-
每个联盟里有一台路由器和其他联盟中的一个路由器建立EBGP邻居关系(互称为联邦EBGP对等体)。
BGP防环机制总结
-
AS_PATH属性
-
一条路由每从一个AS传出,传出路由器会把该AS的编号按照从右至左的顺序依次记录在AS_PATH属性中。当一个路由器从其他AS收到一条路由通告时,会检查本路由器的AS编号是否出现在该路由条目的AS_PATH属性中。如果出现,则该条路由条目不学习。
-
使用在EBGP对等体间。也可以叫做EBGP水平分割。
-
-
IBGP水平分割
-
当一个路由器从自己的IBGP对等体学习到某条BGP路由时,将不再将此条路由通告给自己的任何IBGP对等体。
-
该机制可能造成一些路由器无法学习到去往其他AS的路由。
-
-
cluster_list
-
用于防止一个反射群中的多个反射器间形成环路。
-
-
originator_ID
-
用于防止多个反射群间形成环路。
-