BGP 思维导图

1.基础

一、BGP产生背景

BGP(边界网关协议):是一种用于自治系统间的动态路由协议,是一种外部网关协议。

自治系统AS:一组被进行统一管理,运行同一个IGP协议的路由器组成的网络范围。通常使用相同的路由策略。比如:通过写路由策略让某些流量走特定的线路。控制对邻居AS的路由的接收和发布。

自治系统编号:2字节AS编号:取值范围0-65535,其中0和65535保留;公有AS:1-64511;私有AS:64512-65535;4字节AS编号:2的32次方的编号数量。

二、路由协议的分类

IGP:RIP、OSPF、IS-IS

EGP:BGP

三、BGP协议特性

1、BGP 只负责把路由从一个AS传到另一个AS;从其他AS传递过来的路由在本AS内部的扩散依靠IGP;

2、BGP是路径矢量协议,一跳是一个自治系统;当一条路由传入某个AS,该路由的下一跳会变为上个AS的出接口的IP地址;当一条路由在某个AS内部的路由器之间传递时,下一跳不变。

3、AS防环机制:路径矢量路由协议,从设计上避免了环路的发生(AS_PATH防环机制);当一条路由每从一个AS传出,会把该AS的编号按照从右至左的顺序依次记录在AS_PATH属性中;一个路由器从其他AS收到一条路由通告,会检查本路由器的AS标号是否出现在该路由条目的AS_PATH属性中,如果出现了则该条目不学习;

4、BGP基于TCP协议传输,端口号179:必须手动配置邻居;

5、BGP在第一次网络收敛的时候发送完整的路由表,后续只发送增量更新;

6、BGP有多种属性可以控制路由选择。

7、支持路由聚合;

8、路由过滤和路由策略;

四、BGP基本术语

1、BGP Speaker:

运行BGP协议的路由器称为BGP发言者

BGP Peer:相互之间存在TCP连接、相互交换路由信息的BGP发言者之间互称为BGP对等体

2、BGP对等体:

BGP邻居可以直连,也可以非直连

(1)EBGP对等体:跨AS之间的邻居,一般情况下EBGP对等体是物理上直连的。

BGP发言者从EBGP对等体获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)

(2)IBGP对等体:同一个AS内部的邻居

五、BGP规划问题(规划不当容易产生路由黑洞)

路由黑洞产生原因:由于IBGP邻居之间有 没有运行BGP协议的路由器,无法获得BGP的路由;从而导致的数据包进入路由器被丢弃。

路由黑洞解决方法:

(1)BGP引入IGP

(2)在黑洞路由器上配置目的网段的静态路由

(3)IBGP全连接

IBGP防环机制:IBGP水平分割:从IBGP邻居学习到的路由不会传递给其他IBGP邻居

注:要是邻居太多,手工配置邻居,会导致工作量比较大

(4)BGP路由反射器(无视IBGP的防环机制,可以减少邻居关系的数量)

(5)BGP联盟(可以减少邻居关系的数量,IBGP水平分割限制)

六、BGP环路问题(水平分割)

1、EBGP水平分割(AS_PATH)

通过AS_PATH属性防环,在学习到的路由中,若有本地AS号,则拒绝学习,防止环路

2、IBGP水平分割

当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体。

七、BGP消息种类(数据包可抓包看)

(1)BGP头部信息:

标记:该字段被保留下来用于解决协议兼容性问题,没有其他含义

长度:指示BGP报文的长度(字节数)

类型:该字段指示了BGP报文的类型,就是前面提到的BGP5种数据包类

(2)数据包种类
open:

用于建立BGP对等体之间的连接关系,正常收发一次即可;携带route-id;

Hold time:

保持时间,该字段表示路由器在收到Keepalive消息或者Update消息之前等待的最长时间,默认180s,如果邻居双方的保持时间不一致,将以较短的时间作为双方可接收的保持时间。

可选参数长度:指示了BGP报文中可选参数的长度

可选参数:Open包中包含多个可选参数,主要用于宣告及协商BGP对等体的某些能力特征。

Keepalive:

周期性的向BGP对等体发出Keepalive(周期保活)消息,用于保持连接的有效性,在默认情况下每60秒发送一条Keepalive消息,或者以已协商一致的保持时间的1/3为周期发送Keepalive消息。默认60s,超时180s。

Update

携带的是路由更新(删减、增加)信息

Unfeasible routes length:标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。

  1. Withdrawn Routes:包含要撤销的路由列表
  2. Total Path Attribute Length:标明Path Attributes的长度。其值为零时,表示没有路由及其路由属性要通告。
  3. Path Attributes:路径属性:包含要更新的路由属性列表
  4. Network Layer Reachability Information(NLRI):包含要更新的地址前缀列表
notfication:

当BGP检测到错误状态时,就向对等体发出notfication消息,之后BGP连接会立即被关闭(邻居关系结束了)

router-refresh

用于在改变路由策略后,要求对等体重新发送指定地址族的完整路由表信息;只有支持路由刷新能力的路由器才会响应router-refresh报文。

地址族:典例:BGP版本不同,进入的地址族不同

BGP----v4----IPV4网络

BGP4+----IPV6网络

MP-BGP----MPLS VPN----扩展版本的BGP

组播版本的BGP

注:不管啥版本,都在同一个BGP进程中做配置,只是建立的邻居关系的方式不同而已。

八、BGP状态机

Idle:空闲状态,停留30秒,初始化开始准备TCP连接并监视远程对等体,启动BGP时,同时建立邻居关系。

connect:TCP连接中状态,本端为TCP被动连接方,若连接建立失败则进入Active状态,反复尝试连接;

Active:活跃状态,本端为TCP主动连接方,TCP连接没建立成功,反复尝试连接;

open-sent:开始发送状态,成功建立TCP连接,发出open报文,open报文中携带参数协商对等体的建立,正在等待接受对方open报文;

open-confirm:开始确认状态,收到open报文,发出Keepalive报文,等待第一个Keepalive报文;

established:已连接状态,收到Keepalive报文,最终成功建立邻居;

九、BGP邻居建立条件

IBGP:

物理口建邻:建议使用直连接口地址(物理地址)来指定IBGP邻居;

环回口建邻:

  1. 对方接口要有IP地址,TCP可达(需要具有到达对方IP地址的路由),建议使用环回口地址来指定IBGP邻居;

  2. 更新源地址必须和指定的邻居地址一致,需要修改更新源为环回;

  3. R1-bgp\]peer 2.2.2.2 connect-interface LoopBack 0IBGP邻居关系不需要直连;

物理口建邻:建议使用直连接口地址(物理地址)来指定EBGP邻居;

环回口建邻:

  1. 对方接口要有IP地址,TCP可达,

  2. 可通过修改EBGP最大跳数来使EBGP非直连;

  3. 更新源地址必须和指定的邻居地址一致;

注: 默认IBGP邻居间数据包的TTL值为255,EBGP邻居间TTL为1;故一旦使用环回建立ebgp邻居关系,必须修改TTL值,否则无法建立TCP三次连接

注:当一个路由器既有EBGP邻居,又有IBGP邻居的时候,需要对IBGP邻居修改下一跳本机,否则会造成BGP的路由信息传递失败。

十、BGP基本配置

1、启动BGP并创建BGP连接

huawei\]bgp 'as-number' 启动BGP \[huawei-bgp\]router-id 'router-id' 配置router-id;(可选配置) \[huawei-bgp\]peer 'ip-address' as-number 'as-unmber' 指定BGP对等体及AS号; \[huawei-bgp\] address-family ipv4 unicast 创建BGP地址族,并进入相应地址族视图。(华三) \[huawei-bgp-ipv4\] peer ip-address enable 使能本地路由器与指定对等体交换路由信息的能力 ##### 2、优化BGP连接: \[huawei-bgp\]peer 'ip-address' connect-interface 'interface' 指定建立TCP连接使用的源接口; \[huawei-bgp\]peer 'ip-address ebgp-max-hop 'hop-count' 指定EBGP对等体最大跳数;默认跳数是1,配置允许同非直接相连网络上的邻居建立EBGP连接 ##### 3、配置BGP生成路由 将本地路由发布到BGP路由表中:\[Router-bgp\] network ip-address \[ mask \| mask-length \] \[route-policy route-policy-name

引入其它路由协议的路由:[Router-bgp] import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] ]

4、查看命令:

router\]display bgp peer \[router\]display bgp routing-table ## 2. BGP选路 #### 一、BGP路由选路原则(13条) 1、首先丢弃下一跳(NEXT_HOP)不可达的路由; 2、优选Preferred-value值最大的路由;默认为0;Preferred-value:定义:首选项。 属性值:默认为0,取值范围是 0\~65535,取值越大,优先级越高。 注意:H3C和华为的私有属性, 3、优选本地优先级(LOCAL_PREF)最高的路由; 4、依次选择network命令生成的路由、import-route命令引入的路由、聚合路由; 5、优选AS路径(AS_PATH)最短的路由; 6、依次选择ORIGIN属性为IGP、EGP、Incomplete的路由; 7、优选MED值最低的路由; 8、依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由; 9、优选下一跳度量值最低的路由;度量值:一般指通过IGP协议到达下一跳地址的度量值 10、优选CLUSTER_LIST长度最短的路由; 11、优选ORIGINATOR_ID最小的路由; 12、优选Router ID最小的路由器发布的路由。 13、优选IP地址最小的对等体发布的路由。 #### **二、BGP负载分担时的选路** ##### 1、背景: BGP协议本身一定能选出唯一 一条到达目的网段的最优路由,通过手动配置命令或者路由策略修改路由属性可以允许BGP实现负载分担的功能。 ##### 2、BGP的负载分担与IGP的负载分担有所不同: 1. IGP是通过协议自身定义的路由算法,对到达同一目的地址的路由,将度量值(metric)相等的路由进行负载分担 2. BGP本身并没有路由计算的算法,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担 #### 三、BGP路由的发布策略 1. 只将最优路由发布给对等体。如果配置了**active-route-advertise**命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由; 2. 只把自己使用的路由发布给对等体(自己选的最优路由); 3. 从EBGP获得的路由会向它所有BGP对等体发布; 4. 从IBGP获得的路由不向它的IBGP对等体发布;(IBGP水平分割) 5. 从IBGP获得的路由发布给它的EBGP对等体; 6. BGP连接一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。 ## 3. BGP属性 #### **一、BGP属性(控制BGP路由选路的方法)** 属性:描述一个对象的特征的一些信息 ##### 1、公认属性:所有路由器都必须识别的属性 ###### 公认必遵属性: BGP发布的路由必须携带,所有路由器必须识别的属性;AS_path、next-hop、origin (1)AS_path 定义:AS路径属性,记录路由传递过程中经过的AS编号 作用:AS防环; 路由优选:AS_path短(AS编号的数量)的优先; 注:AS_path属性增加AS编号是在路由从一个AS传出的时候;增加AS_path长度来控制选路时,建议增加真实经过的AS编号,防止AS防环机制导致路由无法学习; **思:假设一条路由的AS_path=(1,2,3),另外一条AS_path=(10000,20000),请问谁的路由更优?** **答案:不管AS编号多大多小,AS_PATH编号数量少的路径,永远优先。** **(**2)next-hop:下一跳 注意:如果一个路由器同时拥有EBGP和IBGP邻居: 1. 路由发布给EBGP邻居,下一跳变更为指定的EBGP邻居地址; 2. 路由发布给IBGP邻居,下一跳不变,仍然保持为指定的上个AS的EBGP邻居地址; 3. 对IBGP邻居发布的路由通告命令更改下一跳为本机。 (3)origin:路由来源属性 属性值:IGP:来源于network宣告,聚合的路由,显示为i; EGP:来源于引入的EGP协议路由,显示为e(一般见不到了); incomplete :未完成,来源于引入IGP协议或静态路由、直连路由,显示为? 优选顺序:IGP\>EGP\>incomplete ###### **公认可选:** 所有路由器都识别,但不是必须携带的属性;local-perference、Atomic-aggregate (1)local-perference: 定义:本地优先级,同一个AS内也可以看到这个属性值,表明了BGP路由器的优先级。只对IBGP邻居传递,不对EBGP邻居传递。 注意:默认值100,值大的优先; (2)Atomic-aggregate:自动聚合 注:BGP可以自动聚合,也可以手动聚合 ##### **2、可选属性** ##### (1)可选传递属性 定义:路由器可以不识别该属性,但是会继续向下传递该属性 属性:aggregator:手动聚合; community:团体属性 ##### (2)可选非传递属性 定义:路由器可以不识别该属性,但是也不会继续向下传递该属性 属性:1. clustor_list:集群列表 2. originator_id:集群 3. IDMED:多出口鉴别器:当一个AS有多个入口点时,用于判断流量进入AS时的最优路径。 属性值:network的路由,默认值为0;引入的路由,默认值为原IGP协议的cost;值小的优先; ##### **3** **、preferred-value** Preferred-value值最大的路由;默认为0;Preferred-value:定义:首选项。 属性值:默认为0,取值范围是 0\~65535,取值越大,优先级越高。 注意:H3C和华为的私有属性, #### **二、属性控制的选择建议** 1.如果希望影响下游所有路由器的路由选择,建议使用AS-PATH 2.如果只希望影响本AS内部的某个路由器选择,建议使用Local-preference 3.如果希望只影响下游某一个AS的路由器选择,建议使用MED 4.如果希望只影响某一台路由器的路由选择,建议使用preferred-value #### 三、属性控制方法 路由策略 ![](https://i-blog.csdnimg.cn/direct/e3c4135892094b3fa732cfbedd02f156.png) #### 四、大规模BGP网络所遇到的问题 1. BGP对等体众多,配置繁琐,维护管理难度大BGP路由表庞大, 2. 对设备性能提出挑战IBGP全连接,应用和管理BGP难度增加, 3. 邻居数量过多路由变化频繁,导致路由更新频繁 #### 五、解决大规模BGP网络所遇到的问题 1、BGP对等体众多: (1)对等体组(Peer Group)-----是一种简单的命令配置方式,不是某个技术或者协议,可以简化一下配置 (2)BGP团体(Community )----是用来批量匹配某种具有相同特征路由的东西 2、BGP路由表庞大:BGP路由聚合 3、IBGP全连接(邻居数量太多) (1)BGP路由反射(Route Reflection) (2)BGP联盟(Confederation) 4、路由变化频繁:BGP路由衰减 #### 六、对等体组 定义:BGP 对等体组(Peer Group)是一些具有某些相同属性的对等体的集合。通过对等体组可以简化配置 特点:根据对等体所在的AS,对等体组可分为IBGP对等体组和EBGP对等体组。 注意:配置EBGP对等体组--------一般不常用,因为只有同一个AS中的EBGP邻居才能加入一个对等体组,如果EBGP邻居分布在多个AS,则需要给每个AS的EBGP邻居,配置一个对等体组。比较麻烦 ##### 配置IBGP对等体组 ![](https://i-blog.csdnimg.cn/direct/bd88bb0983d74a1498c86fb4a0efb47f.png) ##### **配置EBGP对等体组** ![](https://i-blog.csdnimg.cn/direct/3058309ac8dc4fc780e179499c61dde9.png) #### **七、BGP路由聚合** 作用:减小路由表规模 ##### 1、自动聚合: 1. 只能对引入的IGP的路由进行聚合; 2. 只能将明细路由汇总到主类,这会造成路由黑洞; 3. 华为设备默认关闭自动聚合功能; 4. 只能在始发路由器上进行配置; \[r1-bgp\]summary automatic 开启自动聚合 自动聚合后,会出现状态码S(suppressed),代表被抑制的路由信息讲不会再加表和传递了 ##### **2** **、手工聚合:** 1. 可实现精确汇总:\[R1-bgp\]aggregate 172.16.0.0 16 2. 可以在任何路由器上对BGP路由进行聚合; 出现问题:明细路由依然被通告,有形成环路的隐患 解决方法:\[R1-bgp\]aggregate 172.16.0.0 16 detail-suppressed //抑制明细路由,此命令不通告明细路由; #### **八、路由反射器** 1、定义:BGP反射器能把从IBGP邻居学习的路由反射给其他IBGP邻居 2、作用:用于替代IBGP全连接,减少IBGP邻居数量;解决BGP路由黑洞问题; 3、角色:RR(router reflect):路由反射器 反射器角色:client:RR客户机;非客户机 注:将一台BGP路由器指定为RR的同时,还需要指定其Client。至于Client本身,无需做任何配置,它并不知晓网络中存在RR 4、反射规则 从非客户机端接受的路由,仅反射给客户端; 从客户端接受到的路由,反射给所有客户端和非客户端,路由始发者除外; 从EBGP接收的路由,反射给所有的客户端和非客户端; 注:一个反射群里的所有反射客户端只需与反射器建立IBGP邻居关系 5、反射集群:由反射器和客户端组成的网络范围; 如果存在多个反射器,配置相同的cluster_id 6、路由反射存在问题:使得IBGP水平分割原则失效,会导致环路的产生 7、解决方法: 通过两个路径属性来避免环路 (1)cluster_list(集群列表): 1. 类似AS_PATH,每个RR都有一个Cluster id,默认为路由器的router id,可手工修改; 2. 同一个AS内的Cluster id必须相同,才能有防环作用。 3. 路由传递过程中,把经过的反射器的Cluster_id依次记录在Cluster_list中; 4. Cluster_list用于反射器防环,当反射器收到BGP路由时,如果本机的Cluster_id出现在Cluster_list中,则丢弃该路由; 5. Cluster-list用于路由优选,短的优先 特殊情况:不受Cluster-list防环机制的约束,依然形成环路 (2)originator_ID:起源ID 1. 由路由器反射器反射一条路由时产生,会在反射出去的路由中增加originator_ID,它就是本地AS内路由始发者的router-id; 2. 即使这条反射路由经过多个RR,当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新。 3. originator_ID用于路由优选,短的优先 8、总结BGP的防环机制 (1)AS_PATH:解决AS之间的环路问题 (2)IBGP的水平分割:解决一个AS内部IBGP邻居之间环路问题 (3)Cluster-list防环:当一个反射群中存在多个反射器时,通过Cluster-list防环, (4)originator_ID:在多个反射群之间,通过originator_ID防环 9、注意事项 反射路由无法使用策略去更改路由属性 10、实验配置 \[R2-bgp\]peer 3.3.3.3 reflect-client //在反射器上配置其反射客户机 \[R2-bgp\]peer in reflect-client //把对等体组中的邻居配置其反射客户机 \[R2-bgp\]reflector cluster-id 2.2.2.2 //配置反射器的集群id #### **九、BGP联盟** 1、定义:处理AS内部的IBGP网络连接激增的另一种方法,间接避免了IBGP环路问题 2、原理:联盟将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。 3、注意:子AS使用私有AS编号; 其他真实AS的路由器仍然和联盟AS建立EBGP邻居; 跨越子AS的EBGP邻居仍然需要更改下一跳为本机; 每个联盟里有一台路由器和其他联盟中一个路由器建立邻居关系就行; 实际场景中一般不用联盟,因为他会改变邻居关系 #### 十、BGP团体属性 (1)定义:相当于路由的标记,一组具有相同特征的目的地的集合,可针对特定的路由设置特定的community属性值 问题:网段不连续,ACL写起来比较麻烦。 解决方法:在每个分部的市场部路由的出口设备上,打上100:1的团体属性。 (2)社团属性表达方法: 本质由32位二进制构成,拥有多种表达格式, 比如:可使用10进制; 或者16位二进制,前16位一般是本地AS的AS号,后16位是自定值; (3)公认的社团属性: 1. Internet:抓取的BGP流量,默认情况下都属于Internet,可以被通告给所有的BGP对等体; 2. no-advertise:路由信息无法发送给自己的IBGP对等体或EBGP对等体; 3. no-export:路由信息可以发给自己的BGP对等体,但对等体不能离开这个AS,无法发给自己的EBGP;但可以发给自己的联邦EBGP对等体; 4. no-export-subconfed:路由信息可以发给自己的BGP对等体,但对等体不能离开这个AS,无法发给自己的EBGP;也不可以发给自己的联邦EBGP对等体; 注:目前大部分厂商默认在传递BGP路由信息时是不传递社团属性的,如果需要传递社团属性,则需要通过命令开启 #### 十一、BGP路由衰减 作用:用来解决路由振荡(Route flaps)的问题 路由衰减方法: 1. 每震荡一次,就给其一个惩罚值(默认是1000),惩罚值固定加1000,不能超过抑制阈值,一旦超过这个值,不管这个路由的死活,都不在学习它; 2. 惩罚值每隔一段时间,自动衰减一半。直到惩罚值衰减到某一个再使用阈值之下,方可重新学习这条路由。 衰减参数:Suppress Threshold(抑制阈值,默认2000):当惩罚值超过此阈值时,路由被抑制(不再通告)。Reuse Threshold(重用阈值,默认750):当惩罚值衰减到此值以下时,路由重新被通告。Half-life Time(半衰期,默认15分钟):惩罚值每15分钟减半。Ceiling (最大惩罚值上限):1001-20000