边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是少数一个用来处理像因特网大小的网络的协议,也是少数能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。
一、BGP释义
(BGP/BGP4:Border Gateway Protocol,边界网关协议)
BGP-4 提供了一套新的机制以支持无类域间路由。这些机制包括支持网络前缀的通告、取消 BGP 网络中 “ 类 ” 的概念。 BGP-4 也引入机制支持路由聚合,包括 AS 路径的集合。这些改变为提议的超网方案提供了支持。BGP-4 采用了路由向量路由协议,在配置 BGP 时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP 发言人”。
1989 年发布了主要的外部网关协议:边界路由协议(BGP),新版本 BGP-4 是在 1995 年发布的。
BGP 路由选择协议执行中使用 4 种分组:打开分组(open)、更新分组(update)、存活分组(keepalive)、通告分组(notification)。
二、BGP 的结构和功能
BGP 用于在不同的自治系统(AS)之间交换路由信息。当两个 AS 需要交换路由信息时,每个 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 作为传输层协议。
IETF 先后为 BGP 制定了多个建议,分别为:
RFC 4271:当前正使用的 BGP 协议版本,称之为 BGP4。
RFC 1654:BGP4 协议的名列前茅个规范。
RFC 1105、RFC 1163、RFC 1267、RFC1771:BGP4 之前的 BGP 版本。
三、BGP 消息类型及状态转换
BGP 使用如下四种消息类型:
- Open 消息:Open 消息是 TCP 连接建立后发送的名列前茅个消息,用于建立 BGP 对等体之间的连接关系。
- Keepalive 消息:BGP 会周期性地向对等体发出 Keepalive 消息,用来保持连接的有效性。
- Update 消息:Update 消息用于在对等体之间交换路由信息。它既可以发布可达路由信息,也可以撤销不可达路由信息。
- Notification 消息:当 BGP 检测到错误状态时,就向对等体发出 Notification 消息,之后 BGP 连接会立即中断。
BGP 邻居建立中的状态和过程如下:
- 空闲(Idle):为初始状态,当协议激活后开始初始化,复位计时器,并发起名列前茅个 TCP 连接,并开始倾听远程对等体所发起的连接,同时转向 Connect 状态。。
- 连接(Connect):开始 TCP 连接并等待 TCP 连接成功的消息。如果 TCP 连接成功,则进入 OpenSent 状态;如果 TCP 连接失败,进入 Active 状态。
- 行动(Active):BGP 总是试图建立 TCP 连接,若连接计时器超时,则退回到 Connect 状态,TCP 连接成功就转为 Open sent 状态。
- OPEN 发送(Open sent):TCP 连接已建立,自己已发送名列前茅个 OPEN 报文,等待接收对方的 Open 报文,并对报文进行检查,若发现错误则发送 Notification 消息报文并退回到 Idle 状态。若检查无误则发送 Keepalive 消息报文,Keepalive 计时器开始计时,并转为 Open confirm 状态。
- OPEN 证实(Open confirm):BGP 等待 Keepalive 报文,同时复位保持计时器。如果收到了 Keepalive 报文,就转为 Established 状态,邻居关系协商完成。如果系统收到一条更新或 Keepalive 消息,它将重新启动保持计时器;如果收到 Notification 消息,BGP 就退回到空闲状态。
- 已建立(Established):即建立了邻居(对等体)关系,路由器将和邻居交换 Update 报文,同时复位保持计时器。
四、BGP 路由通告原则
BGP 在进行路由通告的时候,需要遵循以下原则:
多条路径时,BGP Speaker 只选优异的给自己使用(负载均衡和 FRR 除外)。
BGP Speaker 只把自己使用的路由(优异路由)通告给相邻体。
BGP Speaker 从 EBGP 获得的路由会向自己所有 BGP 相邻体通告(包括 EBGP 和 IBGP)。
BGP Speaker 从 IBGP 获得的路由不向自己的 IBGP 相邻体通告(反射器除外)。
BGP Speaker 从 IBGP 获得的路由是否通告给自己的 EBGP 相邻体要根据 IGP 和 BGP 同步的情况来决定。
当收到对端的 refresh 报文并且本端邻居支持 refresh 能力,BGP Speaker 将把自己所 有 BGP 路由通告给对等体。
GR 过程中,主备倒换方在 GR 结束时 BGP Speaker 会把自己所有 BGP 路由通告给对等体。
五、BGP 属性
路由器发送关于目标网络的 BGP 更新消息,更新的度量值被称为路径属性。属性可以是公认的或可选的、强制的或自由决定的、传递的或非传递的。属性也可以是部分的。并非组织的和有组合的都是合法的,路径属性分为 4 类:公认必遵、公认自决、可选过渡、可选非过渡。
公认属性:
是公认所有 BGP 实现都必须识别的属性,这些属性被传递给 BGP 邻居。
公认强制属性必须出现在路由描述中,公认自由决定属性可以不出现在路由描述中。
可选属性:
非公认属性被称为可选的,可选属性可以是传递的或非传递的。
可选属性不要求所有的 BGP 实现都支持。
对于不支持的可选传递属性,路由器将其原封不动的传递给其他 BGP 路由器,在这种情况下,属性被标记为部分的。
对于可选非传递属性,路由器必须将其删除,而不将其传递给其他 BGP 路由器。