BGP的基本概念
BGP——边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议:无类别路径矢量EGP协议,工作于AS之间。BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路;
矢量——路径矢量(一个AS为一跳);距离矢量(一个路由器为一跳)
AS——自治系统。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
BGP的分类
EBGP——外部BGP邻居关系,建邻的两台设备处于不同的AS中
IBGP——内部BGP邻居关系,建邻的两台设备处于相同的AS中
邻居——直连 因为BGP协议中存在非直连邻居的需求,故BGP邻居称为毗邻关系
BGP与IGP
IGP协议追求:
- 无环(选路佳)
- 收敛快
- 占用资源少
- hop–by–hop
EGP协议追求:
- 可控性强(管理员可以方便进行策略干涉选路)
- 可靠性(BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;且BGP协议工作环境中为节约成本,必然出现非直连需要建立邻居关系—单播邻居),基于TCP工作 —三次握手四次断开,而TCP只能基于单播工作,单播要求IP可达,依赖于IGP。因此BGP承载于IGP之上
- AS–BY–AS(以一个AS为一跳)
BGP的特点
- 无类别路径矢量——距离矢量的升级版—AS–BY–AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新——仅触发无周期
- 具有丰富的属性来取代IGP中度量进行选路——多个参数控制协议
- 可以在进项和出项对流量实施强大的策略——可控性
- 默认不被用于负载均衡——通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(汇总)
BGP数据包
BGP基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;
- Open—仅负责邻居关系的建立,正常进收发一次即可;携带route-id;
- Keeplive—保活 周期1min查询邻居关系是否存在;实际保活TCP会话;
- hold time—默认3min
- Update——携带路由条目 目标网络号+各种属性
- Notification——出现错误数据时收发;
BGP工作过程
- 首先通过TCP的三次握手来寻找到邻居,建立TCP的会话
- 会话建立后,邻居间正常收发一次open报文建立BGP的邻居关系,生成邻居表
- 邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系(周期保活TCP会话)
- 邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表:装载本地发出及接收到的所有路由条目
- 收敛完成,仅keeplive周期保活即可
若出现错误信息,邻居间将使用Notification报文进行报错操作
若结构突变,出现以下现象:
- 新增——本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合(汇总)路由包含
- 断开——本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合(汇总)路由包含,只有到聚合条目中包含的所有明细路由均在本地失效,才告知邻居删除聚合条目
- 无法沟通——hold time为3min,连续3次未收到邻居的keeplive;断开邻居关系、TCP会话,删除从该邻居处学习到的所有路由;
BGP的防环机制:水平分割
EBGP的防环机制
- EBGP水平分割—解决EBGP环路; 依赖了BGP路由条目中的一种属性来进行防环;AS-PATH路径属性;BGP协议在传递路由条目的过程中,将记录所有经过的AS的编号;接收到的路由条目中,若存在本地的AS号将拒绝该条目进入;
IBGP的防环机制
- 本地从一个IBGP邻居处学习到的路由条目,不得传递给本地的其他IBGP邻居;在IBGP水平分割的限制下,虽然避免了IBGP的环路产生,但同时也使得AS内部为了能够传递路由条目,必须两两间建立IBGP邻居关系,邻居关系成指数上升,配置量巨大;后期可以依赖打破水平分割的机制来解决——联邦、路由反射器
BGP的重发布
BGP协议宣告的路由,基本是本地通过IGP学习到的本AS路由;数量较大,若逐条宣告,配置量很大,但可控性强; 也可以在同时运行BGP和igp的设备,将IGP协议重发布到BGP协议中,来实现批量的路由宣告效果; 宣告相当于逐条的重发布,重发布相当于批量的宣告;两者产生的路由条目,起源属性不同,其他属性默认完全一致; 存在EBGP邻居关系(连接其他的AS)的所有BGP设备均建议重发布IGP到BGP;
BGP手工汇总——聚合
利用了BGP的宣告的特点,本地路由表中任意路由,不关注来源均可以宣告的BGP中;不用逐一宣告明细路由,先本地手工静态一条指向汇总网段的空接口防环路由,然后再将其宣告到BGP协议中来;从IGP表中宣告到BGP协议中的条目,仅携带目标网络号和度量值; 聚合的缺点是将多个网络号合成一个,导致访问整个聚合网段时,仅存在唯一的路径;若在多路径建邻的前提下,将无法精确的选路;故在大型的多链路的网络中为了更好控制选路,必然在传递聚合条目的同时,再在最佳路径处传递部分的明细路由; 若需要在传递聚合条目的同时,传递部分明细路由,只需要在宣告的空接口路由后,逐一宣告需要的明细路由即可; 以上做法的缺点是不能携带原有明细路由的cost值,因为宣告的是本地路由表中人为添加那条静态空接口路由;
标准的BGP路由聚合—先逐一手工宣告明细,或批量重发布路由,再进行聚合配置;默认在本地生成空接口防环路由;
[R2-bgp]aggregate 3.3.0.0 21 聚合和所有明细路由均发送
[R2-bgp]aggregate 3.3.0.0 21 detail-suppressed 抑制所有的明细路由,仅发送聚合条目;
以上操作方法:若需要在发送聚合条目的同时携带部分的明细路由,需要使用策略
抑制列表
[R2]ip ip-prefix ss permit 3.3.4.1 32
[R2]route-policy ss permit node 10
[R2-route-policy]if-match ip-prefix ss
[R2]bgp 2
[R2-bgp]aggregate 3.3.0.0 21 suppress-policy ss 在传递聚合条目的同时,在抑制3.3.4.1/32这一条明细,其他明细正常转发;
使用路由策略在邻居间直接进行收发路由的管理
[R2]ip ip-prefix qq permit 3.3.3.3 32
[R2]route-policy qq deny node 10
[R2-route-policy]if-match ip-prefix qq
[R2-route-policy]q
[R2]route-policy qq permit node 20
[R2]bgp 2
[R2-bgp]aggregate 3.3.0.0 21
[R2-bgp]peer 12.1.1.1 route-policy qq export
直接使用前缀列表来实现方法的功能
[r2]ip ip-prefix ww deny 3.3.3.3 32
[r2]ip ip-prefix ww permit 0.0.0.0 0 le 32
[r2]bgp 2
[r2-bgp]pe 12.1.1.1 ip-prefix ww export
有条件的打破IBGP水平分割
IBGP水平分割,用于避免在一个AS内部由IBGP邻居间产生的环路; 规则:从一个iBGP邻居处学习到的BGP路由不能传递给下一个IBGP邻居;因为BGP的非直连建邻能力,因此可以在一个AS内部建立多个邻居来实现连接关系备份的作用;故正常一台设备只要运行bgp,那么应该处于AS的边界,存在ebgp邻居; 所有运行bgp协议的设备正常都会从其他AS学习到路由条目,然后共享到本地所在的AS,由于IBGP水平分割,导致本地需要和所有本AS内部的BGP设备建立IBGP邻居关系;IBGP邻居关系的数量成指数上升; 所谓有条件的打破是指在打破IBGP水平分割的时候,不能产生环路
1、 路由反射器——RR(反射器)、客户端、非客户端; 客户端、非客户端必须分别为RR的IBGP邻居关系;三种角色构建为一个簇(组);一个簇内可以存在多台设备,但至少一个簇内存在一个RR和一个客户端; 规则:
- RR从一台EBGP邻居处学习到的路由可以共享给本地的其他客户端、非客户端、EBGP邻居;
- RR从一台客户端邻居处学习到的路由可以共享给本地的其他客户端、非客户端、EBGP邻居;
- RR从一台非客户端邻居处学习到的路由可以共享给本地的其他客户端、EBGP;不能共享给其他的非客户端;
注:被反射路由,在反射过程中,其属性不发生任何变化;若RR接收的条目不优,不具备传递性,将不被反射;
[R3-bgp]peer 2.2.2.2 reflect-client ibgp邻居2.2.2.2成为本地的客户端,同时本地成为RR;
2、联邦——将一个大as逻辑为多个小as;小AS使用私有AS号,小AS间为联邦内的bepg邻居关系,可以像EBGP一样传递路由,但不能修改属性; 对于联邦外的AS,只能看到大AS号;
- 所有的启动,建邻、管理均基于小AS号进行
- 联邦内所有设备需要声明自己所在的大AS号
- 小AS间的ebgp邻居需要互指对端的小as号
[R3]bgp 64512
[R3-bgp]router-id 3.3.3.3
[R3-bgp]confederation id 2 声明本地的大AS号
[R3-bgp]confederation peer-as 64513 对端小AS号
[R3-bgp]pe 2.2.2.2 as-number 64512
[R3-bgp]pe 2.2.2.2 connect-interface LoopBack 0
[R3-bgp]pe 4.4.4.4 as-number 64513
[R3-bgp]pe 4.4.4.4 connect-interface LoopBack 0
[R3-bgp]pe 4.4.4.4 ebgp-max-hop 2
注:在实际工程中,路由器反射器与联邦技术是结合,在一个拓扑中共同使用的;
BGP选路规则
比较前提:多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)
- 优选Preference_Value值最高的路由(私有属性,仅本地有效)。不传递,权限最高属性,可以干涉EBGP/IBGP选路
- 优选本地优先级(Local_Preference)最高的路由。
- IBGP邻居关系间传递 只能,最常干涉IBGP关系的选路
- 优选手动聚合>自动聚合>network>import>从对等体学到的。
- 优选AS_Path短的路由。 EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改;
- 起源类型IGP>EGP>Incomplete。 起源属性 i优于e优于?; 可在控制层面任意接口修改;
- 对于来自同一AS的路由,优选MED值小的。默认为0,宣告或重发布(关闭自动汇总)路由时携带本地到达目标的cost,最常用于干涉EBGP选路的属性
由于BGP基于AS–BY–AS运作,数据包在内部传递时,上述属性不变,因此若非人为修改,属性皆相同,对选路意义不大。
- 优选AS内部IGP的Metric(类似cost)最小的路由。
- 优选Cluster_List最短的路由。
- 优选Orginator_ID最小的路由。
- 优选Router_ID最小的路由器发布的路由。
- 优选具有较小IP地址的邻居学来的路由。
- 优选从EBGP学来的路由(EBGP>IBGP)。
|