概述
BGP全称边界网关协议(Boarder Gateway Protocol),是运行在自治系统(AS)之间传递路由信息的协议
AS定义(rfc1930)
The classic definition of an Autonomous System is a set of routers under a single technical administration, using an interior gateway
protocol and common metrics to route packets within the AS, and using an exterior gateway protocol to route packets to other ASes.
AS的经典定义是一组被单一技术管理的路由器,使用IGP和统一的metric在AS内路由分组,并使用EGP与其它AS路由分组。
基本特点
路径矢量路由协议,基于TCP 179端口
首次建立连接做完整路由信息更新,以后就只做增量更新、触发更新
有丰富的属性可以灵活选路
被设计用于特大网络,例如Internet
三张表
邻居表
用于记录BGP对等体的邻居信息,包括状态信息,AS号等等,邻居不需要直连
BGP表
用于记录学习到的路由详细信息,包括BGP的路由属性,最优路由等
路由表
BGP提交最优路由到路由表
BGP报文
OPEN
用于建立一个BGP连接,包括holdtime,RID,AS等
KEEPALIVE
用于维护邻居,默认60s一次,holdtime180s
UPDATE
用于更新路径信息,一次可以通告一条路由和它的多个属性;也可以一次通告多个路由但它们的所有属性必须相同;一次可撤销多个路由
NOTIFICATION
用于传递错误信息
REFRESH
路由刷新请求
BGP邻居
BGP邻居关系状态机
初始阶段,双方都是 idle 状态,等待连接重试时间到期后,双方进入 active 状态,并且双方各自回退一个 随机 delay 时间,delay 小的路由器,delay到期后,将主动发起 TCP 连接,delay 大的路由器在收到 TCP 连接请求后,将回到 idle 状态后进入到 connect 状态。若TCP连接失败,则进入active状态重传,建立成功进入opensent,不成功回退到Connet状态。TCP 连接建立完后,双方进入 OpenSent 状态,在这状态 中,双发互相发送 open 消息,并且侦听来自邻居的 open 消息,如果接收到的 open 消息没有差错,则发送 keepalive 消息并设置 keepalive 定时器,协商保持时间,根据对方的 AS 号,确定连接是内部的还是外部的,并 且迁移到OpenConfirm 状态,在 OpenConfirm 状态下,一旦收到 keepalive 消息,则进入到 establish 状态, establish 状态后,即双方已经建立 BGP 邻居,随即双方交换 update包。
其中,
默认路由无法主动发起TCP连接,但可以回应主动发起TCP连接请求的一方必须用对方neighbor所指定的IP地址作为源发出TCP连接请求
建邻居的两端,先协商 Hold 时间,Hold 时间保持一致,Hold 时间为两端的最小值。
keepalive 时间 > 三分之一的 Hold 时间,取三分之一的 Hold 时间作为 keepalive 时间。
keepalive 时间 <= 三分之一的 Hold 时间,keepalive 时间不变。
BGP只有当连接处于建立状态时,才能交换更新、存活和通知消息
EBGP建立邻居默认TTL是1
关闭直连检测TTL还是1
改eBGP多跳设置,TTL可设置其他值
如果一直停在idle状态,则可能:
没有去往邻居的路由
neighbor命令指错了邻居的地址
如果一直停在active状态,则可能:
邻居没有过来的路由
邻居没有指neighbor命令
邻居neighbor中指的地址错误
两端的AS号不匹配
BGP邻居类型
eBGP
eBGP是不同AS之间建立的BGP邻居
通常要求直连,建议使用直连接口建立邻居
AD默认20(Cisco)
iBGP
iBGP是AS内建立的BGP邻居
无需直连,只需传输层可达
AD默认200(Cisco)
BGP更新源
BGP默认开启直连监测和源监测
直连监测:需要根据neighbor中的指定的具体IP来进行判断,是不是直连IP,如果不是,连TCP三次握手都不成功,更不可能建立完整的BGP邻接了
源检测:监测过来访问自己179端口的IP是否是nei后面的ip
路由器用来和邻居建立邻居关系的IP地址叫BGP更新源地址。BGP建立邻居过程中,由于默认开启源检测,来自邻居的邻居建立源IP必须是本地neibor指定的邻居IP,否则无法建立邻居关系。
“show ip bgp summary中的Neighbor” / “show ip bgp中的Next Hop ”都是指Update-Source
查看BGP邻居
1 | show ip bgp summary |
显示结果
其中,
Neighbor为邻居更新源IP
AS为对方AS号
MsgRcvd/Sent为BGP消息接受/发送数量
State/PfxRcd为BGP邻居建立状态,当显示为数字时,表示状态为Established并且收到该数量的路由前缀
清除BGP会话
bgp不会周期更新,是增量更新
以下命令为BGP会话硬件清除,重新建立邻居;慎用!!!
1 | clear ip bgp * |
以下命令为出入向软件清除,不会改变状态机
1 | clear ip bgp * soft [out/in/-] |
出向软清,发送UPDATE,不发送刷新消息
入向软清,不发送UPDATE,发送刷新消息,对方回复UPDATE
双向软清,发送UPDATE,发送刷新消息,对方恢复UPDATE
可以使用以下命令缓存被拒绝的路由
1 | bgp 100 |
BGP防环机制
从iBGP邻居收到的路由不再传给其它iBGP邻居(iBGP水平分割)
拒绝从EBGP邻居收到的AS-PATH属性含有自身AS号的路由
iBGP水平分割可以通过Fullmesh、RR或联邦来解决
neighbor a.a.a.a remote-as AS含义
指定对方属于哪个AS,所指a.a.a.a地址,必须在IGP可达(双方不能都是默认路由)
1、我将会向nei后面地址的179端口发起TCP连接,建立BGP邻居
2、只允许nei后面地址作为源来访问我的179端口(TCP请求源检测 )
对等体组
有时可能对多个邻居进行相同的BGP配置,可以定义对等体组将其统一配置(neighbor XX peer-group)
BGP路由操作
BGP路由发布
network宣告特点
够通告路由表中的所有非BGP路由
默认情况下必须精确宣告网络和掩码
只起到宣告作用,不建邻居
可宣告IGP学到的路由,并携带Metric和Next-hop
no-autosummary
network含义–network后面的网段和掩码必须和路由表中条目精确匹配才能宣告进BGP表
redistribute–重分布明细进BGP
autosummary
network含义–network后面的网段和掩码必须和路由表中明细路由的主类路由匹配才能宣告进BGP表
redistribute–重分布主类路由进BGP
ibgp重分布需要在bgp进程下
1 | bgp redistribute-internal |
BGP路由传递规则
iBGP之间传递路由,下一跳不变
联邦iBGP/eBGP传递路由,下一跳不变
eBGP之间传递路由,下一跳改变
iBGP水平分割:从iBGP邻居收到的路由不会传给iBGP邻居
BGP同步
BGP同步是针对iBGP水平分割的一个早起解决方案。
开启同步后,AS内的一个路由器从iBGP邻居处学到一条路由,不用也不传,除非是从IGP学到同样一条路由。(网络号和掩码都必须完全一样)
BGP同步配置
1 | router bgp 64512 |
BGP路由优化
BGP收到路由后会优化路由,被优化的路由才能被使用,被传递。一般根据以下条件判断该路由是否可以被优化:
是否满足同步条件
下一跳是否可达(本地优化)
入向策略允许的路由、
路径选择(路径优化),若有多条路径去往相同的网段,选择一条最优的路由
BGP表中的路由优化后的2个动作:
- 向路由表提交这条最优的BGP路由
- 向BGP的peer邻居发送包含这条BGP最优路由的更新
第三方下一跳
收到BGP路由的下一跳(递归完的下一跳)与建邻居nei地址在同一网段,保持下一跳不变;不在同一网段,改变下一跳。(RIP与EIGRP也存在第三方下一跳,EIGRP默认关闭)
BGP路由重分发
将OSPF重分发进BGP时,默认只将internal充分发。可使用以下令充分发其它OSPF路由
1 | router bgp 64512 |
将BGP重分发进IGP默认只重分发eBGP,可使用以下命令充分发iBGP
1 | router bgp 64512 |
BGP注入默认路由的3种方法
1 | ip route 0.0.0.0 0.0.0.0 null0 |
1 | ip route 0.0.0.0 0.0.0.0 null 0 |
1 | router bgp 64512 |
BGP路由聚合
network方式汇总
先配置一条指向null0的汇总静态路由,然后在bgp宣告此静态路由
1 | ip route 192.168.0.0 255.255.252.0 Null0 |
Aggregate聚合
先使用network宣告明细路由,然后使用aggregate进行聚合
1 | router bgp 123 |
Aggregate聚合常见参数
参数 | 作用 |
---|---|
advertise-map | 只对该map匹配的路由进行聚合 |
as-set | 让聚合路由继承明细路由属性 |
attribute-map | 清除/添加需要的属性 |
summary-only | 抑制明细路由,只发布聚合路由 |
suppress-map | 抑制该map匹配的路由 |
BGP路由属性
BGP路由属性分类
公认强制的–所有的BGP的updata消息都要包含该属性
公认自由决定的–该属性是可选可不选的,但是所有的BGP进程都能识别
可选传递的–即使BGP进程不能识别该属性,也会继续传递下去
可选非传递的–如果BGP进程不能识别该属性,可以忽略这条updata,并且不传递下去
1、公认强制属性
–AS路径(AS-path)
–下一跳(next-hop)
–源头(origin)
2、公认自由决定的
–本地优先级(local preferent)
3、可选传递的
–团体属性(community)
4、可选非传递属性
–MED
BGP路由常见属性
weight-路由权重
只能入向做,cisco私有,本地产生路由weight 32768,越大越优
local preference-本地优先级
LP属性在同一AS内有效,发送给AS内其它路由器,告知离开AS的最佳路由。
EBGP邻居传路由,不携带LP,默认100
IBGP邻居传递路由,携带LP
修改LP的操作可以在IBGP邻居的入向或出向,或者EBGP邻居之间的入向执行
bgp default local-preference 101 针对自己始发的路由和EBGP传给我的路由有效
AS-PATH-AS路径
AS-PATH表示一条路由经过的AS。
AS-PATH的优先级按个数算,经过越少的AS越优。
其中,
联邦内as不计入总数,路由聚合后的as-set算一个AS;
在使用route-map添加AS时,添加后的AS在出向策略靠右显示,在入向策略靠左显示
可以增加多个自己的as号来加长as-path属性
bgp best-path ignore 可忽略这条选路原则
origin-起源类型
起源类型三种igp,egp,未知(?)
其中优先级如下
igp>egp>imcomplete(i>e>?)
MED-多出口鉴别
MED用于发送给其它AS,告知进入本AS的最佳路径。
在两个AS之间存在多条路径时使用
用来影响ebgp邻居,告诉自己的ebgp邻居如何选最优路由
MED默认值0,越小越优
MED传递特殊规则
metric传递不能传出AS。例:始发路由器可以将metric传给任何邻居,可以是IBGP/EBGP,但邻居收到后,不能传出邻居所在的AS。
默认相同AS传来的MED才会比较,如果比较不同AS传来的MED需要命令bgp always-compare-med
团体属性(标准)
标准BGP团体属性作用于多条路由,让经过的路由器知道这些路由的传递范围。团体属性默认不被发送,可用以下命令向指定邻居发送团体属性
1 | neighbor 192.168.23.2 send-community [-/standard/both] |
这里的团体属性是标准团体属性,而拓展团体属性本质是MPLS中的Route-Target(rt),这里暂不讨论
标准团体属性分公有团体属性和私有团体属性。公有团体属性是所有路由器都认识的属性,而私有团体属性需要预先在路由器上针对改属性做定义才可被路由器执行。
公有团体属性
公有团体属性的值表明了具有该属性的路由可被通告的范围
属性 | 路由传递范围 |
---|---|
internet | 收到后传递给任何peer |
no-advertise | 收到后不传递给任何peer |
local-as | 只在AS内传递,只在联邦iBGP之间传递 |
no-export | 只在AS内传递,可在联邦iBGP和eBGP之间传递 |
私有团体属性
私有团体属性(32bits)有两种定义方式
十进制数,如123
XX:XX形式
路由器在收到私有团体属性后不做任何操作,除非有预先定义的策略。如,AWS DX-Gateway根据BGP私有团体属性(XX:XX形式)来进行云网络至IDC网络方向的选路,7224:7100,7224:7200,7224:7300分别表示携带该属性路由的优先级为低中高。
标准团体属性配置
1 | router bgp 64512 |
BGP选路原则
以下情况忽略路由
- 不同步
- 下一跳不可达
- ebgp学到路由AS包含自己
- bgp enforce-first-as但收到不是第一个as
- receive only
11+2条选路原则,标准BGP选路11条,带*的两条是补充:
1、最高weight值优先(思科私有默认32768,本地有效)
2、最高LP优先
3、加入方式,local>network>REDISTRIBUTE>aggreate;local 最优
4、最短AS
5、起源类型origin IGP<EGP<IMCOMPLETE
6、最小MED
7、 EBGP>IBGP
8 、优选去往下一跳 IGP metric小的
*9、负载(满足前8条和以下条件则负载)
- 配置maximum-path
- 多条等价路由的下一跳要不同
- EBGP如果穿越了不同AS,也不会负载!!
- 如果穿越了联邦,穿越了不通联邦的两条路由不负载
- 除非在BGP中加一条bgp bestpath
as-path multipath-relax - 负载仅仅是路由表,BGP表会继续向下比较知道选出一条best路径
- 隐藏命令bgp bestpath
as-path multipath-relax
10、如果都是ebgp,优先选择先学到的
11、rid 小的优先,有RR的话,用originater地址代替rid比较
*12、最小的RR中cluster长度
13、最小的建立邻居的neighbor地址
路由反射器RR
路由反射器是一台BGP路由器,可以将它的iBGP邻居指定为自己的客户端。路由反射器是为了解决iBGP的水平分割问题。为了使得iBGP路由全通,如果采用full mesh的方法则需要建立非常多的邻居关系,而路由反射器打破iBGP水平分割的原则,解决iBGP的路由传递问题。
路由反射器和其客户的集合被称为集群(cluster),每一个集群都有一个cluster-id,默认情况下路由反射器的router-id会被用做cluster-id,也可以手工指定。路由反射器所传递的每一条客户端路由都会带上这个cluster-id。
RR路由传递规则
从RR的一个客户端传递过来的一条路由:
- RR会传递给我的另外一个反射族的客户端
- RR会传递给我的另外一个非客户端
- RR会传递给我的另一个EBGP邻居
从RR的一个非客户端传递过来的一条路由:
- RR会传递给我的另外一个反射族的客户端
- RR不会传递给我的另外一个非客户端
- RR会传递给我的另一个EBGP邻居
从RR的一个EBGP传递过来的一条路由:
- RR会传递给我的另外一个反射族的客户端
- RR会传递给我的另外一个非客户端
- RR会传递给我的另一个EBGP邻居
总结:非非不能传,其它都能传
RR防环
R4上的路由经过 R3 路由反射后,路由中就会带有Originator,即为 AS234 中始发此路由的 router-id,Cluster list:3.3.3.3,表明此路由已经经过路由反射器R3,就将路由反射器的 router-id 存放在Cluster list里 面。此时路由再传递至 R2 或 R3 上的时候,包含自己的
router-id,将拒绝接收这条路由,这样设计的目的在于防止路由反射器FULL-MESH 时产生的环路
RR配置
定义本路由器为路由反射器,指定邻居1.1.1.1为客户端
1 | router bgp 64512 |
BGP联邦
BGP联邦是指将一个大的AS分成若干个小AS,小AS之间是EBGP关系。联邦也是为了解决iBGP水平分割问题。
联邦的定义
联邦中的所有路由器需要使用子AS的AS号
联邦中所有路由器需要声明主AS的AS号
子AS边界路由器需要互指联邦peers
1 | R1 |
联邦的AS号
联邦外路由器和联邦的边界路由器建立邻居关系时,neighbor大AS号。
联邦中的小AS号(64512)不算作AS-Path属性比较,只算作一个
在BGP表中,小AS号会用括号括住,并且不算做一个进行路径比较的AS号
路由惩罚(Dampening)
由于BGP是运行再AS间的路由协议,通常没有办法直接管理对方AS的设备,为了防止因设备或者专线故障引起的路由频繁抖动,BGP可采用Dampening添加条件抑制抖动,予以抖动的邻居惩罚(主动抑制)。
Dampening相关参数
惩罚值penalty:路由每翻动一次,这个惩罚值就会增加。惩罚值1000,不可修改
半衰期half life:默认15min,一个半衰期惩罚值降为原来一半。路由的惩罚值每5秒钟减少一次。
惩罚状态damp state:路由出于惩罚状态时,改路由不会被在BGP表中被优化,也不会传播
抑制门限suppress limit:默认2000,若一条路由的惩罚值超过抑制门限,则状态由history改为damp
重用门限reuse limit:默认750,惩罚值降到重用门限后,该路由将不被抑制
最大抑制时间、最大抑制门限:默认值60min/12000,如果路由在短时间内表现出极端的不稳定性,然后又稳定下来,那么累计的惩罚值可能会导致这条路由在过长的时间里一直处于惩罚状态。这就是设置最大抑制门限的基本目的。如果路由表现出连续的不稳定性,那么惩罚值就停留在它的上限上,使得路由保持在惩罚状态。最大抑制门限是用公式计算出来的。最大抑制时间为一条路由停留在惩罚状态的最长时间。默认为60分钟(半衰期的4倍)可以配置。
针对某条路由的Dampening配置
1 | ip prefix-list 1 permit 1.1.1.0/24 |