边界网关协议 (英文:Border Gateway Protocol,BGP)
BGP是互联网上一个核心的去中心化自治路由协议。它通过维护IP路由表或前缀表来实现自治系统(AS)之间的可达性,属于矢量路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。BGP构建在 EGP 的经验之上,其系统的主要功能是和其他的BGP系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。BGP不使用传统的内部网关协议(IGP)的指标,而使用基于路径、网络策略或规则集来决定路由。因此,它更适合被称为矢量性协议,而不是路由协议。
AS划分更新:https://www.cidr-report.org
结构和功能
由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。这个节点可以是一个主机。但通常是路由器来执行BGP。两个AS中利用BGP交换信息的路由器也被称为边界网关(Border Gateway)或边界路由器(Border Router)。
由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGP(Internal/Interior BGP)。归属不同的AS的对等实体之间运行的BGP称为EBGP (External/Exterior BGP)。在AS边界上与其他AS交换信息的路由器被称作边界路由器(border/edge router)。在互联网操作系统(Cisco IOS)中,IBGP通告的路由的距离为200,优先级比EBGP和任何内部网关协议(IGP)通告的路由都低。其他的路由器实现中,优先级顺序也是EBGP高于IGP,而IGP又高于IBGP。
BGP属于外部网关路由协议,可以实现自治系统间无环路的域间路由。BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。BGP可分为IBGP(Internal BGP)和EBGP(External BGP)。BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据。BGP路由器会周期地发送19字节的保持存活keep-alive消息来维护连接(默认周期为30秒)。在路由协议中,只有BGP使用TCP作为传输层协议。
BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;
AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路
IGP协议追求:
1,无环(选路佳)
2,收敛快
3,占用资源少
EGP协议的追求:
1,可控性强(管理员可以方便进行策略干涉选路)
2,可靠性
3,AS-BY-AS 以一个AS为一跳
EBGP邻居关系 ---- 外部BGP邻居关系,建邻的两台设备处于不同的AS中
IBGP邻居关系 ---- 内部BGP邻居关系,建邻的两台设备处于相同的AS中
BGP特点
- 无类别路径矢量 -----距离矢量的升级版---AS--BY--AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新--仅触发无周期
- 具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议
- 可以在进项和出项对流量实施强大的策略--可控性
- 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(汇总)
BGP数据包
基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;
首先通过TCP的三次握手来寻找到邻居;
Open | 仅负责邻居关系的建立,正常进收发一次即可;携带route-id; |
Keeplive | 保活 (周期1min查询邻居关系是否存在;实际保活TCP会话;hold time 默认3min) |
Update | 携带路由条目 (目标网络号+各种属性) |
Notification | 出现错误数据时收发 |
BGP的工作过程
1、配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输;会话建立后,邻居间正常收发一次open报文建立BGP的邻居关系,生成邻居表;BGP协议的open报文中将携带本地的RID—生成方式和OSPF一致;仅需要本地及本地所有邻居唯一即可;邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系(周期保活TCP会话)
2、邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;--- 装载本地发出及接收到的所有路由条目;默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
3、收敛完成,仅keeplive周期保活即可;
4、若出现错误信息,邻居间将使用Notification报文进行报错操作
BGP的防环机制 –水平分割
1-》EBGP水平分割—解决EBGP环路;
2-》IBGP水平分割—解决IBGP环路由中的一种机制
BGP的路由黑洞问题
- 物理、逻辑拓扑全连 -- 物理链路直连、或者vpn
- 邻居关系全连 – 网络中所有设备运行BGP
- BGP重发布到IGP(LAB)MPLS 多协议标签交换--- 推荐做法
配置
建邻
[r1]bgp 1 启动时需要定义AS号,没有多进程概念;一台设备只能在一个AS中工作
[r1-bgp]router-id 1.1.1.1 建议配置RID;RID的生成规则同OSPF;
单链路的EBGP邻居关系
[r1-bgp]peer 12.1.1.2 as-number 2
对端接口ip地址 对端所在的AS号
多链路的EBGP邻居关系
建议使用环回作为源、目标接口
1)IP可达问题—一般使用静态
[r4]ip route-static 5.5.5.0 24 45.1.1.2
[r4]ip route-static 5.5.5.0 24 54.1.1.2
2)建立EBGP邻居关系
[r4]bgp 2
[r4-bgp]peer 5.5.5.5 as-number 3
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
3)TTL问题,默认IBGP邻居间的数据包TTL值为255,EBGP邻居间TTL值为1;
因此若使用环回来建立EBGP邻居关系,TTL不够;故,必须修改
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
display tcp status 显示TCP状态
display bgp peer 查看BGP邻居表
宣告路由
[r1]bgp 1
[r1-bgp]network 1.1.1.0 24
切记:宣告时,所宣告的网络号必须和本地路由表中的记录完全一致;
display bgp routing-table 查看BGP路由表
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local R2将路由传输给3.3.3.3时,修改下一跳地址为R2;
- BGP的宣告问题:若通过BGP协议传递的路由条目与本地通过其他协议学习到的条目目标一致,将出现:
- 该路由同时作为与其他BGP邻居建立邻居关系时的底层路由,那么这条BGP路由将不优,不能传递也不能加表
- 该路由不作为建立其他BGP邻居的路由,将在本地不加表,但可以传递,属于优的路由;
- 重发布 :BGP协议宣告的路由,基本是本地通过IGP学习到的本as路由;数量较大,若逐条宣告,配置量很大,但可控性强; 也可以在同时运行BGP和igp的设备,将IGP协议重发布到BGP协议中,来实现批量的路由宣告效果;宣告相当于逐条的重发布,重发布相当于批量的宣告;两者产生的路由条目,起源属性不同,其他属性默认完全一致
- 自动汇总 ( 默认cisco和华为设备均关闭了自动汇总):自动汇总对于BGP正常通过network宣告产生的路由没有影响;仅针对从IGP重发布到BGP的路由条目产生影响;--- 路由条目以主类长度发送,不携带cost值;
[r1]bgp 1
[r1-bgp]summary automatic 开启自动汇总,建议维持默认关闭状态
- 手工汇总—聚合:1.利用了BGP的宣告的特点,本地路由表中任意路由,不关注来源均可以宣告的BGP中;不用逐一宣告明细路由,先本地手工静态一条指向汇总网段的空接口防环路由,然后再将其宣告到BGP协议中来;从IGP表中宣告到BGP协议中的条目,仅携带目标网络号和度量值;聚合的缺点是将多个网络号合成一个,导致访问整个聚合网段时,仅存在唯一的路径;若在多路径建邻的前提下,将无法精确的选路;故在大型的多链路的网络中为了更好控制选路,必然在传递聚合条目的同时,再在最佳路径处传递部分的明细路由;若需要在传递聚合条目的同时,传递部分明细路由,只需要在宣告的空接口路由后,逐一宣告需要的明细路由即可;以上做法的缺点是不能携带原有明细路由的cost值,因为宣告的是本地路由表中人为添加那条静态空接口路由;2)标准的BGP路由聚合—先逐一手工宣告明细,或批量重发布路由; 再进行聚合配置;默认在本地生成空接口防环路由;
[r2-bgp]aggregate 3.3.0.0 21 聚合和所有明细路由均发送
[r2-bgp]aggregate 3.3.0.0 21 detail-suppressed 抑制所有的明细路由,仅发送聚合条目;
- 有条件的打破IBGP水平分割:1.路由反射器 -- RR(反射器)、客户端、非客户端;2.联邦,将一个大as逻辑为多个小as;小AS使用私有AS号
路由反射
客户端、非客户端必须分别为RR的IBGP邻居关系;三种角色构建为一个簇(组);一个簇内可以存在多台设备,但至少一个簇内存在一个RR和一个客户端;
规则:
1)RR从一台EBGP邻居处学习到的路由可以共享给本地的其他客户端、非客户端、EBGP邻居;2)RR从一台客户端邻居处学习到的路由可以共享给本地的其他客户端、非客户端、EBGP邻居;3)RR从一台非客户端邻居处学习到的路由可以共享给本地的其他客户端、EBGP;不能共享给其他的非客户端;(非非不传)
注:被反射路由,在反射过程中,其属性不发生任何变化;若RR接收的条目不优,不具备传递性,将不被反射;
联邦
- 所有的启动,建邻、管理均基于小AS号进行
- 联邦内所有设备需要声明自己所在的大AS号
- 小AS间的ebgp邻居需要互指对端的小as号
[r3-bgp]peer 2.2.2.2 reflect-client ibgp邻居2.2.2.2成为本地的客户端,同时本地成为RR;
[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路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)
属性:华为和cisco均存在6种基本属性 第一种均为私有属性
属性 | 传播范围 | 默认值 | 大优/小优 |
Preference_Value | 不传播 | 0 | 大 |
-
[r3-bgp]pe 2.2.2.2 preferred-value 1 本地从邻居2.2.2.2处学习到的所有路由优先值修改为1;
本地优先级 | IBGP邻居关系间 | 100 | 大 |
[r2]bgp 2
[r2-bgp]pe 3.3.3.3 route-policy p export 调用时在控制层面的出或入向均可,但必须为IBGP邻居关系;
as-path | 优选经过AS数量较少路径;该属性的自动添加是在EBGP邻居关系间进行 |
[r4]bgp 2
[r4-bgp]pe 14.1.1.1 route-policy as import 注:可以在控制层面的入或出方向调用,但只能在ebgp邻居间操作;可干涉ebgp、ibgp关系选路;
起源属性 条目的产生方式
network 宣告本地路由表中的任意路由
import 将本地通过其他协议学习的路由重发布到BGP协议中
egp 早期的ebg协议学习的路由重发布到BGP协议中
[r4]bgp 2
[r4-bgp]pe 3.3.3.3 route-policy o export
MED 多出口的鉴别属性
BGP协议默认不存在cost;MED就是人为的利用路由器优选路径的规则—先比较管理距离(华为为优先级),若一直再比较度量值(华为为cost)
BGP协议在特定条件下携带本地到达目标的cost值;本地宣告(重发布)自己路由表中的路由后,将其传递给本地的ebgp邻居,将携带cost值;对于其他AS的设备学习到从同一个as传递过来的路由,优选MED最小的路径;
管理员可以在控制层面传递路由的过程中,手工修改MDE;最常用于干涉ebgp选路;
常常用于AS1干涉AS2对AS1的选路;
[r1]ip ip-prefix med permit 1.1.1.0 24
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 10
[r1-route-policy]q
r1]route-policy med permit node 20
[r1-route-policy]q
[r1]bgp 1
[r1-bgp]pe 14.1.1.2 route-policy med export
由于实际工程中,管理员只能在一个AS中配置,故无法通过查看BGP表来判断选路结果,可以通过扩展ping来解决
[r1]ping -r -a 1.1.1.1 3.3.3.3
BGP的社团属性 –BGP的扩展属性
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy com export
默认华为设备也不传递社团属性,故使用社团属性时,必须定义传递性
[r1-bgp]peer 12.1.1.2 advertise-community 逐跳行为,每台设备均需开启传递性
no-advertise 接收到的条目中若存在该社团属性,将不再传递该路由
no-export 接收到的条目若存在该社团属性,将不传递给下一个AS
no-export-subconfed 接收到的条目若存在该社团属性,将不传递给下一个小AS
若网络没有小AS,仅存在大AS时no-export和no-export-subconfed作用一致
[r1]route-policy com permit node 10
[r1-route-policy]apply community no-advertise 针对所有的流量修改属性
关于BGP协议的MA网络中下一跳问题
在一个MA网段中运行BGP协议;若该网段存在EBGP邻居关系;那么只要使用该网段内的物理接口ip地址,作为邻居建立地址,那么ICMP重定向将为我们定义最佳下一跳地址,作为BGP路由中的下一跳地址;
[r1]display bgp routing-table peer 123.1.1.2 advertised-routes 查看本地向该邻居发送的BGP路由
[r1]display bgp routing-table peer 123.1.1.2 received-routes 查看本地从该邻居处学习到的路由
BGP的认证
[r3-bgp]peer 34.1.1.2 password cipher 123456
双方密码需要一致,密码默认基于MD5计算后转发