边界网关协议BGP
1. 简介
BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的距离矢量路由协议
BGP从多方面保证了网络的安全性,灵活性,稳定性,可靠性和高效性
BGP采用认证和GTMS方式,保证了网络的安全性
BGP提供了丰富的路由策略,能够灵活的进行路由选路
BGP提供了路由聚合和路由衰减用于防止路由震荡,有效提高网络的稳定性
BGP使用TCP(179)并支持与BFD联动,BGP tracking,BGP GR提高网络的可靠性
2. 自治系统(AS)
AS是指在一个实体管辖下的拥有相同选路策略的IP网络,BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS
2字节AS号:1-65535
4字节AS号:1-4294967295
3. BGP的分类
EBGP:运行于不同AS之间的BGP,为了防止AS之间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃
IBGP: 运行于同一个AS内部的BGP,为了防止环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接,为了解决IBGP对等体链接数量太多的问题,BGP设计了路由反射器和BGP 联盟
4. BGP工作原理
BGP对等体的建立,更新和删除等交互过程主要有5种报文,6种状态机和5个原则
4.1 BGP的报文
BGP对等体通过以下5种报文进行交互,其中keepalive报文为周期性发送,其余报文触发式
open报文,用于建立bgp对等体.
update报文,用于在对等体之间交换路由信息
notification报文,用于中断bgp连接
keepalive报文,用于保持bgp连接
route-refresh报文,用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新功能的bgp设备支持。
4.2 BGP状态机
6中状态机,空闲Idle,连接Connect,活跃Active,open报文已发送Opensent,open报文已确认Openconfirm,连接已建立Establish
在BGP对等体建立的过程中,通常可见的3种状态Idle,Active,Established
1.idle状态时BGP初始状态,在idle状态下,BGP拒绝邻居发送的连接请求,只有在收到本设备的start事件后,BGP才开始尝试和其他BGP对等体进行TCP连接,并转至Connect状态
2.connect状态下,BGP启动连接重传定时器,等待TCP完成连接
a.如果tcp连接成功,那么BGP向对等体发送open报文,并转至opensent状态
b.如果tcp连接失败,那么bgp转至active状态
c.如果连接重传定时器超时,BGP仍没有收到对等体的响应,那么BGP继续尝试和其他BGP对等体进行TCP连接,停留在Connect状态
3.active状态下,BGP总是在试图建立TCP连接
a.如果TCP连接成功,那么BGP向对等体发送open报文,关闭连接重传定时器,并转至opensent状态
b.如果TCP连接失败,那么BGP停留在active状态
c.如果连接重传定时器超时,BGP仍没有收到BGP对等体响应,那么BGP转至connect状态
4.opensent状态下,BGP等待对等体的open报文并对收到open报文中的AS号,版本号,认证码进行检查
a.如果收到open报文正确,那么BGP发送keepalive报文,并转至openconfirm状态
b.如果发现收到的open报文错误,那么BGP发送notification报文给对等体,并转至idle状态
5.openconfirm状态下,BGP等待keepalive或notification报文。如果收到keepalive报文,则转至established状态,如果收到notification报文,则转至idle状态
6.established状态下,BGP可以和对等体交换update,keepalive,route-refersh报文和notification报文
a.如果收到正确的update报文或keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接
b.如果收到错误的update报文或keepalive报文,那么BGP发送notification报文至对端,并转至idle状态
c.route-refresh报文不会改变BGP状态
d.如果收到notification报文,BGP转至idle状态
e.如果收到TCP拆链通知,BGP断开连接,转至idle状态
5. BGP对等体之间的交互原则
BGP设备将最优路由加入BGP路由表,形成BGP路由表,BGP设备与对等体建立邻居关系,采用以下原则:
1.从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
2.从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
3.当存在多台到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
4.路由更新时,BGP设备只发送更新的BGP路由
5.所有对等体发送的路由,BGP设备都会接收
6. BGP与IGP交互
1.BGP引入IGP路由
BGP在引入IGP路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路
BGP引入路由时支持import和network两种方式
import按协议引入,将RIP,OSPF,ISIS等协议的路由引入到BGP路由表,也可以引入静态路由和直连路由
network逐条将IP路由表中已经存在的路由引入到BGP路由表中,比import更精确
2.IGP引入BGP路由
当一个AS需要引入其他AS的路由时,AS边缘路由器会在IGP路由表中引入BGP路由
为了避免大量BGP路由对AS内部设备造成影响,当IGP引入BGP路由时,可以使用路由策略,进行路由过滤和路由属性设置
7. BGP的路由选择规则和负载分担
7.1 BGP属性
路由属性是对路由的特定描述,所有的BGP路由属性可以分为以下4类
1.公认必须遵循,所有BGP设备都可以识别此类属性,且必须存在于update报文中,如果缺少这类属性,路由信息会报错
2.公认任意,所有BGP设备都可以识别此类属性,但不要求必须存在于update报文中,就算缺少这类属性,路由信息也不会报错
3.可选过渡,BGP设备可以不识别此类属性,如果BGP设备部识别此类属性,但它仍然会接受这类属性,并通告给其他对等体
4.可选非过渡,BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会忽略该属性,且不会通告给其他对等体
7.2 BGP常见属性类型
属性名 | 类型 |
---|---|
origin属性 | 公认必须遵循 |
AS_path属性 | 公认必须遵循 |
Next_hop属性 | 公认必须遵循 |
Local_perf属性 | 公认任意 |
MED属性 | 可选非过渡 |
团体属性 | 可选过度 |
originator_id属性 | 可选非过度 |
cluster_list属性 | 可选非过度 |
7.3 常用路由属性
1.origin属性
用来定义路径信息的来源,标记一条路由时怎么成为BGP路由的
3种类型:
IGP,具有最高优先级,通过network命令注入到BGP路由表的路由,起origin属性为IGP
EGP,优先级次之,通过EGP得到的路由信息,其origin属性为EGP
incomplete,优先级最低,通过其他方式学到的路由信息,比如BGP通过import-route命令引入的路由,其origin属性为incomplete
2. AS_path属性
按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号,在接收路由时,设备如果发现AS_path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路
当BGP speaker传播自身引入的路由时
a.当BGP speaker将这条路由通告到EBGP对等体时,便会在update报文中创建一个携带本地AS号的AS_path列表
b.当BGP speaker将这条路由通告到IBGP对等体时,便会在update报文中创建一个空的AS_path列表
当BGP speaker传播从其他BGP speaker的update报文中学习到的路由时
a.当BGP speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加到AS_path列表的最前面(最左边),离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列
b.当BGP speaker将这条路由通告给IBGP对等体时,不会改变着路由相关的AS_path属性
3.Next_hop属性
记录了路由的下一跳信息,遵循下面原则
a.BGP speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
b.BGP speaker将本地始发的路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
c.BGP speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性
4.Local_perf属性
表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由
当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择local_perf属性值较高的路由
local_perf属性仅在IBGP对等体之间有效,不通告给其他AS
local_perf属性可手动配置,缺省值为100
5.MED属性
在其他条件相同的情况下,优先选择MED值较小的作为最佳路由
MED属性仅在相邻的两个AS之间传递,收到此属性的AS不会将其通告给其他第三方AS
MED可手动配置,缺省值为0
6.团体属性
团体属性 用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,降低维护管理的难度
公认团体属性
团体属性名称 | 团体属性号 | 说明 |
---|---|---|
internet | 0(0x00000000) | 设备在收到具有此属性的路由后,可以向任何对等体发布 |
NO_advertise | 4294967042(0xFFFFFF02) | 不向任何BGP对等体发布具有此属性的路由 |
NO_export | 4294967041(0xFFFFFF01) | 不向AS外发布具有此属性的路由 |
NO_export_subconfed | 4294967043(0xFFFFFF03) | 不向AS外,也不向AS内其他子AS发布具有此属性的路由 |
originator_id和cluster_list属性
用于解决路由反射器场景中的环路问题
7.4 BGP路由选择策略
当到达同一目的地址存在多条路由时,BGP依次对比下列属性来选择路由
1.优选weight(cisco)最高,per-val(huawei)最高的路由,仅在本地有效
2.优选本地优先级(local_perf)最高的路由,缺省值为100
3.优选手动聚合路由,自动聚合路由,network命令引入的路由,import-route命令引入的路由,从对等体学到的路由
4.优选AS路径(AS_path)最短的路由
5.依次优选origin属性为IGP,EGP,Incomplete的路由
6.对于来自同一AS的路由,优选MED值最低的路由
7.依次选在从EBGP,联盟,IBGP学到的路由
8.优选下一跳度量值最低的路由(metric)
9.优选cluster_id最低的路由
10.优选origin_id最小的路由
11.优选router id最小的路由器发布的路由
12.优选从最小地址对等体学来的路由
7.5 BGP负载分担
当到达同一目的地址存在多条等价路由时,可以通过BGP等价负载分担实现均衡流量的目的
形成条件是“BGP选择路由策略的”1至8规则中需要比较的属性完全相同
8. 路由反射器 router-refector
为了保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系 full-mesh
假设在一个AS内部有n台设备,那么建立的IBGP连接数为n(n-1)/2,当设备数目很多时,设备配置十分复杂,配置后网络资源和CPU资源消耗很大,在IBGP之间使用路由反射器可以解决上述问题
8.1 角色:
路由反射器RR,允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似于OSPF里的DR
客户机client,与RR形成反射邻居关系的IBGP设备,在AS内部客户机只需要与RR直连
非客户机non-client,既不是RR,也不是client的BGP设备,在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系
始发者originator,在AS内部始发路由的设备,originator_id属性用于防止集群内产生路由环路
集群cluster,RR与client的集合,cluster_list属性用于防止集群间产生路由环路
8.2 发布路由规则
路由反射器RR突破了“从IBGP对等体获得的路由,BGP设备只发布给它的EBGP对等体”,并采用独有的originator_id和cluster_list属性防止路由环路
RR向IBGP邻居发布路由规则如下:
1.从非客户机学到的路由,发布给所有客户机
2.从客户机学到的路由,发布给所有非客户机和客户机(发布此路由的客户机除外)
3.从EBGP对等体学到的路由,发布给所有的非客户机和客户机
8.3 cluster_list属性
RR和它的client组成一个集群cluster,使用AS内唯一的cluster_id作为标识,为了防止集群间产生路由环路,RR使用cluster_list属性,记录路由经过过的所有集群的cluster_id
当一条路由第一次被RR反射,RR会把本地cluster_id添加到cluster_list的前面,如果没有cluster_list属性,RR会创建一个
当RR接收到一条更新路由时,RR会检查cluster_list属性,如果cluster_list中 已经有本地cluster_id,丢弃该路由,如果没有,加入cluster_list属性,反射该路由
8.4 多集群RR
分级RR
一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体,当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR,当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR。
在实际的RR部署中,常用的是分级RR的场景
同级RR
一个骨干网被分成多个集群,各集群的RR互为客户机,并建立全连接,此时,虽然每个客户机只与所在集群的RR建立IBGP连接,但所有RR和客户机都能收到全部的路由信息
9. BGP联盟
解决AS内部的IBGP网络连接激增的问题,除了使用路由反射器之外,还可以使用联盟,联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS认为联盟是一个AS,配置联盟后,原AS号作为每个路由器的联盟ID。
好处:
1.可以保留原有的IBGP属性,包括local-perf,MED,next_hop属性
2.联盟相关的属性在传出联盟时会自动删除,管理员无需再联盟的出口配置过滤子AS号的操作
联盟示意图
AS100使用联盟后被划分成3个子AS:AS65001,AS65002,AS65003,使用AS100作为联盟ID,此时IBGP的连接竖向从10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担,AS100外的设备只知道AS100的存在,并不知道AS100内部的联盟关系
10. 路由反射器和联盟的对比:
路由反射器 | 联盟 |
---|---|
不需要改变现有拓扑,兼容性好 | 需要改变逻辑拓扑 |
配置方便,只需要对RR配置,客户机不需要知道自己是客户机 | 所有设备需要重新配置 |
集群与集群之间需全连接 | 联盟的子AS之间是特殊的EBGP,不许全连接 |
11. 路由聚合
在大规模网络中,BGP路由表十分庞大,给设备造成很大负担,同时使发生路由振荡的几率大大增加,影响网络的稳定性
路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络稳定性
BGP在IPV4网络中支持手动聚合和自动聚合,IPV6网络中仅支持手动聚合方式
1.自动聚合:对BGP引入的路由进行聚合。配置自动聚合后,BGP将按照自然网段聚合路由(例如非自然网段A类地址10.1.1.1/24和10.2.1.1/24将聚合为自然网段A类地址10.0.0.0/8),并且BGP向对等体只发送聚合后的路由。
2.手动聚合:对BGP本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。
为了避免路由聚合可能引起的路由环路,BGP设计了AS_set属性。该属性是一种无序的AS_path属性,标明聚合路由所经过的AS号。当聚合路由重新进入AS_set属性中列出的任何一个AS时,BGP将会检测到自己的AS号在聚合路由的AS_set属性中,于是会丢弃该聚合路由,从而避免路由环路的形成。
12. 路由衰减
当BGP应用于复杂的网络环境时,路由振荡十分频繁,为了防止频繁的路由振荡带来的不利影响,BGP使用路由衰减来抑制不稳定的路由。
路由振荡是指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备会向邻居发布路由更新,收到跟新报文的设备需要重新计算路由并球盖路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响网路的正常工作。
路由衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。路由每发生一次振荡,BGP会给此路由增加1000的惩罚值,其余时间惩罚值会缓慢下降。当惩罚值超过抑制阈值时,此路由会被抑制,不加入路由表,也不向其他BGP对等体发布更新报文
被抑制的路由每经过一段时间,惩罚值会减半,这个时间被称为半衰期
当惩罚值降到再使用阈值时,此路由变为可用,并被加入路由表中,同时向其他BGP对等体发布更新报文。
从路由被抑制到路由恢复可用的时间称为抑制时间
路由衰减只对EBGP路由起作用,对IBGP路由不起作用。这是因为IBGP路由可能含有本AS的路由,而IGP网络要求AS内部路由表尽可能一致。如果路由衰减对IBGP路由起作用,那么当不同设备的衰减参数不一致时,会导致路由表不一致。
13. BMP
BGP监控协议BGP Monitoring protocol 能够对网络中的设备的BGP运行状态进行实时监控,BGP运行状态包括对等体关系的建立与解除,路由信息刷新等。
被监控设备(图中PE1,PE2)与监控服务器建立TCP连接,监控服务器无须发送任何指令给被监控设备,被监控设备就会发送BGP运行状态信息给监控服务器,监控服务器解析接收到的BMP报文并呈现在监控试图中。设备发送给监控服务器的报文都带有标识对等体信息的报文,从而监控服务器可以区分报文出自哪个BGP邻居
设备与监控服务器建立连接时需要注意以下几点:
1.设备与监控服务器的连接基于TCP协议,可以指定连接端口号
2.设备与监控服务器的连接可以是多对多的关系
3.一个BMP实例能连接多台监控服务器,其好处为:
多台服务器可以实现互相备份,提高可靠性
减少单台服务器监控BGP邻居的负载
可以实现不同的服务器监控不同的BGP邻居,从而控制不同的BGP业务
4.监控服务器监控所有BGP邻居,不可以指定需要监控的邻居
14. BGP GR和NSR
BGP的平滑重启GR(graceful restart)和不间断路由NSR(non-stop routing)作为高可靠性的解决方案,其根本目的都是为了保证用户业务在设备故障的时候不受影响后者影响最小。
BGP GR技术保证了在设备重启或者主备倒换过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由振荡引发的业务中断,提高了网络的可靠性。
GR相关概念:
GR Restarter:由管理员触发或故障触发后,以GR方式重启的设备。
GR Helper:GR Restarter的邻居,协助Restarter进行GR的设备。
GR Time:是GR Helper检测到GR Restarter重启或主备倒换后,保持转发信息不删除的时间。
BGP GR的过程:
1.利用BGP的能力协商机制,GR Restarter和GR Helper了解彼此的GR能力,建立有GR能力的会话。
2.当GR Helper检查到GR Restarter重启或者主备倒换后,不删除和GR Restarter相关的路由和转发表项,也不通知其他邻居,而是等待重建BGP连接。
3.GR Restarter在GR Time超时前与重启前的所有GR Helper新建立好邻居关系。
BGP NSR
NSR是一种控制平面倒换而邻居不感知的可靠性技术,适用于设备具有主用主控板和备用主控板的场景。与GR相比,NSR具有不需要邻居协助,不存在互通性问题的有点。
15. BGP缺省配置
keepalive消息发送间隔 60秒
对等体邻接关系保持时间 180秒