07.BGP
- 1. BGP 的基本概念
- 1.1 BGP 对等体关系类型
- 1.2 IBGP 水平分割原则
1. BGP 的基本概念
关于 自治系统(Autonomous System,AS) 的传统定义:由一个单一的机构或组织所管理的一系列 IP 网络及其设备所构成的集合。
自治系统的简单理解:可以简单地将 AS 理解为一个独立的机构或者企业所管理的网络,例如一家网络运营商的网络等。另一个关于 AS 的例子是,一家全球性的大型企业在其网络的规划上将全球各个区域划分为一个个的 AS,例如中国区是一个 AS,韩国区是另一个 AS。
根据工作范围不同,动态路由协议可分为两类
-
IGP(Interior Gateway Protocol,内部网关协议),例如 RIP、OSPF、IS-IS 等。
IGP 协议用于帮助路由器发现到达本 AS 内各个网段的路由,从而实现 AS 内部的数据互通,一个 AS 通常采用一种 IGP 协议,也有许多大型的网络,会在一个 AS 中采用多种 IGP 协议以便支撑该网络多元化的需求。
-
EGP(Exterior Gateway Protocol,外部网关协议),例如 BGP 等。
在一个由多个 AS 构成的大规模的网络中,还需要 EGP 协议来完成 AS 之间的路由交互。BGP 就是最为熟知和使用得最为广泛的一种 EGP 协议。
BGP(Border Gateway Protocol,边界网关协议) 几乎是当前唯一被用于在不同 AS 之间实现路由交互的 EGP 协议。BGP 适用于大型的网络环境,例如运营商网络,或者大型企业网等。BGP 支持 VLSM、支持 CIDR(Classless Inter-Domain Routing,无类域间路由),支持自动路由汇总、手工路由汇总。
BGP 使用 TCP(端口号 179)作为传输层协议,以确保协议报文的交互更加可靠和有序。两台互为对等体的 BGP 路由器首先会建立 TCP 连接,随后协商各项参数并建立对等体关系。初始情况下,两者会同步双方的 BGP 路由表,在 BGP 路由表同步完成后,路由器不会周期性地发送 BGP 路由更新,而只发送增量更新或在需要时进行触发性更新。
增量更新/触发性更新:这大大地减小了设备的负担及网络带宽损耗,由于 BGP 往往被用于承载大批量的路由信息,如果依然像 IGP 协议那样,周期性地交互路由信息,显然是相当低效和不切实际的
BGP 定义了多种 路径属性(Path Attribute) 用于描述路由,就像一个人拥有身高、体重、学历、特长和经历等属性一样,一条 BGP 路由同样携带着多种属性,路径属性将影响 BGP 路由的优选。BGP 还定义了丰富的路由策略工具,这些工具使得 BGP 具有强大的路由操控能力。
BGP 的发展经历了数个版本,目前在 IPv4 环境中,BGPv4(BGP Version 4)被广泛使用,该版本在 RFC4271(A Border Gateway Protocol 4)中被描述。本章基于 BGPv4 进行讲解。
1.1 BGP 对等体关系类型
IGP 协议要求需要建立邻居关系的两台路由器必须是直连的,然而 BGP 则不相同。
BGP 的对等体关系并不要求设备必须直连,BGP 采用 TCP 作为传输层协议,两台路由器只要具备 IP 连通性,并且能够顺利地基于 TCP179 端口建立连接,就可以建立 BGP 对等体关系,因此 BGP 的对等体关系是可以跨设备建立的。建立 BGP 邻居关系的路由器称为 BGP 对等体(Peer)。
BGP 有两种对等体关系,一种是 EBGP,另一种是 IBGP。
-
EBGP 对等体关系(External BGP Peer)
如果建立对等体关系的两台 BGP 路由器位于不同的 AS,那么它们之间的关系被称为 EBGP 对等体关系。通常情况下,EBGP 对等体关系必须基于直连接口建立,因为缺省情况下,EBGP 对等体之间发送的 BGP 协议报文的 TTL 值为 1。
-
IBGP 对等体关系(Internal BGP Peer)
如果建立对等体关系的两台 BGP 路由器位于相同的 AS,那么它们之间的关系被称为 IBGP 对等体关系。在两台路由器之间建立 IBGP 对等体关系时,并不要求它们必须直连。
1.2 IBGP 水平分割原则
每条 BGP 路由都携带着多个属性,这些属性被称为路径属性,其中一个非常重要的路径属性就是 AS_Path。AS_Path 是每条 BGP 路由都会携带的属性,它描述了一条 BGP 路由在传递过程中所经过的 AS 的号码,AS_Path 的长度会影响路由器对 BGP 路径的优选。
此外,AS_Path 还用于防止出现路由环路。如图所示,R2 从 R4 收到该路由后,会忽略这条路由更新,因为它在收到的路由中看到了自己本地的 AS 号码,便意识到网络中出现了环路。
AS_Path 属性可以防止 BGP 路由在 EBGP 对等体之间传递时发生环路,然而当路由在 IBGP 对等体之间传递时,AS_Path 属性的值是不会发生改变的。即 BGP 路由在一个 AS 内传递时,是无法依赖 AS_Path 提供的防环能力的,那么此时路由环路就有可能发生。
针对这类问题,BGP 提供了一种解决方案——IBGP 水平分割。
下图中,当 R2 收到 R1 通告的 10.1.1.0/24 路由后,它将这条路由通告给自己的 IBGP 对等体 R3 及 R4,R4 会将该路由通告给 IBGP 对等体 R3,而 R3 又会将该路由通告给 R2,这就容易引发路由环路。
BGP 规定,当路由器从一个 IBGP 对等体学习到某条 BGP 路由时,它将不能再把这条路由通告给任何 IBGP 对等体,这就是 IBGP 水平分割规则。在本例中,R4 从 IBGP 对等体 R2 学习到的路由将不能再通告给 R3,因为 R3 也是它的 IBGP 对等体。同理,R3 从 R2 学习到的 BGP 路由也不能通告给 R4。
IBGP 水平分割也会带来问题。在这个网络中,R4 增加了一个 IBGP 对等体 R5。由于 IBGP 水平分割规则的限制,R4 是无法将学习自 IBGP 对等体 R2 的 10.1.1.0/24 路由再通告给另一个 IBGP 对等体 R5 的,因此这将造成 R5 无法学习到去往 AS 64512 的路由。