边界网关协议 BGP

边界网关协议(Border Gateway Protocol,BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。BGP 常用于互联网的网关之间。而 RIP 和 OSPF 都只能在一个 AS 内工作,若没有 BGP,则全世界数以万计的 AS 都是一个个没有联系的孤岛(BGP 的作用 2013 年考过)。

BGP 在 2024 年被集中考了一次:两种会话、热土豆路由、四种报文都在其中。BGP 与 RIP、OSPF 最大的不同是目标:它不找最佳路由,只找一条能到达且比较好的路由。

机制

为什么 AS 之间不找最佳路由

内部网关协议主要是设法使分组在一个 AS 中尽可能有效地从源站传送到目的站,在一个 AS 内部也不需要考虑其他方面的策略。然而 BGP 使用的环境却不同,主要原因如下:

  1. 互联网的规模太大,使得 AS 之间路由选择非常困难,每个主干网路由器表中的项目数都非常庞大。对于 AS 之间的路由选择,要寻找最佳路由是很不现实的。
  2. AS 之间的路由选择必须考虑政治、安全或经济等有关因素。

因此,BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP 采用了路径向量路由选择协议,它与距离向量协议(如 RIP)和链路状态协议(如 OSPF)都有很大的区别。BGP 是应用层协议,它是基于 TCP 的(封装 BGP 报文所采用的协议 2013、2017 年考过)。

BGP 会话

两个相邻的 AS 通过各自的边界路由器直接相连,两个边界路由器通过端口号为 179 的半永久 TCP 连接(双方交换信息后仍保持连接状态)来交换 BGP 路由信息,AS 内部的路由器之间也有很多半永久 TCP 连接来传送 BGP 路由信息。每对 TCP 连接端点的两个路由器称为 BGP 对等方,用来发送 BGP 报文的 TCP 连接称为 BGP 会话。跨越两个 AS 的 BGP 会话称为外部 BGP(eBGP)会话,同一个 AS 中的两个路由器之间的 BGP 会话称为内部 BGP(iBGP)会话。可见,BGP 不仅运行在 AS 之间,还运行在 AS 的内部(两种 BGP 会话的定义 2024 年考过)。

BGP 路由

BGP 路由的一般格式如下:路由前缀属性当一个路由器通过 BGP 会话向对等方通告一条 BGP 路由时,最重要的两个 BGP 属性是 AS-PATH(自治系统路径)和 NEXT-HOP(下一跳)。

  • AS-PATH 是通告的 BGP 路由所经过的自治系统。在 BGP 中,通常用一个全局唯一的自治系统号(ASN)来标识自治系统。BGP 路由每经过一个 AS,就将其 ASN 加入 AS-PATH。可见,BGP 路由必须指出通过哪些 AS,但不指出路由要通过哪些路由器。
  • NEXT-HOP 是通告的 BGP 路由起点。

例:AS1 的边界路由器 R1 与 AS2 的边界路由器 R2 之间有 eBGP 会话,R2 与 AS2 内的 R3、R4、R5 之间有 iBGP 会话。

flowchart LR
  subgraph AS1
    X(("网络 X")) --- R1["R1<br/>边界路由器"]
  end
  subgraph AS2
    R2["R2<br/>边界路由器"] --- R3["R3"]
    R3 --- R4["R4"]
    R2 --- R5["R5"]
    R5 --- R4
  end
  R1 <-- eBGP --> R2
  R2 -. iBGP .- R4

AS2 中的 R4 收到一条 BGP 路由”X, AS1, R1”,表示”从 R1 出发能到达 AS1 中的网络 X,即 R1→X”。R4 为了构造自己的转发表,需要对这条 BGP 路由的起点进行转换:由于路由的起点 R1 并不在 AS2 中,AS2 中的路由器都不能识别 R1,因此 R4 先把路由的起点添加上 R1 的对等方 R2,这样就变为”R2→R1→X”。R2 在 AS2 中,因此 AS2 中的所有路由器都能把分组转发到 R2,再经过 R1,最终到达 X。

然后,R4 利用内部网关协议,找到从 R4 到 R2 的最佳路由中的下一跳。在本例中,查出下一跳是 R3,于是 R4 在转发表中增加到达网络 X 的下一跳是 R3 的表项 <X, R3>。这样,R4 只要收到目的网络为 X 的分组,就都按照路径 R4→R3→R2→R1→X,最后到达 X。类似地,R3 也在自己的转发表中增加到达网络 X 的表项 <X, R2>。每个路由器收到一条新的 BGP 路由通告后,必须经过上述步骤,才能在自己的转发表中增加到达 X 的”下一跳”的相应表目。

BGP 负责”到别的 AS 走哪个出口”,IGP 负责”在本 AS 内怎样走到这个出口”。 转发表中最终写入的下一跳,是这两者合成的结果。

BGP 路由选择

若从一个 AS 到另一个 AS 中的网络 X 只有一条 BGP 路由,则不存在选择 BGP 路由的问题。然而,若到网络 X 有两条或更多的 BGP 路由可供选择,则应根据下列原则,并按下面给出的先后顺序,选择一条较好的 BGP 路由:

  1. 首先选择本地偏好值最高的路由。在 BGP 路由的属性中有一个称为本地偏好的选项,一条路由的本地偏好可能由该路由器管理员设置,也可能是从同一 AS 中的另一个路由器学习得到的。若在几条 BGP 路由中找不出本地偏好值最高的路由(如它们的本地偏好值都相同),则采用下面的方法。
  2. 选择 AS 跳数最少(AS-PATH 最短)的路由。例如从 AS1 到 AS5 共有两条 BGP 路由,一条经过 AS2、AS3 两个 AS,一条只经过 AS4 一个 AS,根据该原则应选择 AS1→AS4→AS5。然而,由于 AS4 是个很大的 AS,分组在 AS4 中反而要经过更多次数的转发,可能要花费更长的时间。可见,AS 跳数最少的路由未必是最好的。
  3. 使用热土豆路由选择算法(热土豆路由选择算法的应用 2024 年考过)。假设几条 BGP 路由的本地偏好值都相同,所经过的 AS 个数也相同,则利用前两种方法都无法选择最好的路由。这时,要进入 BGP 路由的 AS,执行热土豆路由选择算法:选择最靠近 NEXT-HOP 路由器的路由,让分组经过最少的转发次数离开本 AS,这时要使用内部网关协议(如 OSPF 或 RIP),对不同的路由器,得出的选择结果是不同的。
  4. 选择 BGP 标识符的数值最小的路由。在 BGP 报文的首部有一个称为 BGP 标识符的字段,该字段作为运行 BGP 的路由器的唯一标识符。当以上三种方法都无法找出最好的 BGP 路由时,可使用 BGP 标识符来选择路由。

“热土豆”的意思是:分组像烫手的土豆,本 AS 只想尽快把它扔出去,不管它出去之后还要走多远。

BGP 的四种报文

当 BGP 刚运行时,BGP 会话的两端要相互交换整个 BGP 路由表,但以后只需在 BGP 发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的开销方面都有好处。BGP-4 共使用四种报文(各种 BGP 报文的作用 2024 年考过):

报文作用
Open(打开)用来与相邻的另一个 BGP 对等方建立关系,使通信初始化。它是两个路由器之间建立 TCP 连接后接着必须发送的报文,其作用是相互识别对方,协商一些协议参数
Update(更新)用来通知某一路由的信息,以及列出要撤销的多条路由。它是 BGP 的核心,用于撤销它以前通知过的路由,或者宣布增加新的路由。撤销路由可以一次撤销多条,但增加新路由时,每个更新报文只能增加一条
Keepalive(保活)用来周期性地证实邻站的连通性。收到 Open 报文的路由器发回 Keepalive 报文表示接受建立 BGP 连接;BGP 连接一旦建立,两个对等方就要彼此周期性地交换 Keepalive 报文(如每隔 60 秒),它只有 19B,不会造成网络上太大的开销
Notification(通知)用来发送检测到的差错

RIP、OSPF 与 BGP 的比较

协议RIPOSPFBGP
类型内部内部外部
路由算法距离向量链路状态路径向量
传递协议UDPIPTCP
路径选择跳数最少代价最低较好,非最佳
交换节点和本节点相邻的路由器网络中的所有路由器和本节点相邻的路由器
交换内容当前本路由器知道的全部信息,即自己的路由表与本路由器相邻的所有路由器的链路状态首次:整个路由表;非首次:有变化的部分

边界

BGP 不找最佳路由。 规模太大和政策因素两条理由,决定了 BGP 的目标只是”能到达、不兜圈子、比较好”。

BGP 交换的是 AS 序列,不只是下一跳。 路径向量中完整列出了经过的 AS,所以路由器可以一眼看出路由中是否已经含有自己的 AS,从而避免环路。

BGP 也运行在 AS 内部。 那就是 iBGP 会话;不要把”外部网关协议”理解成”只在 AS 之间运行”。

Keepalive 是 BGP 的报文,Hello 是 OSPF 的分组。 两者都用于证实邻站可达,是常见的混淆项(4.4.4)。

口径差异:BGP 路由选择不止四步

教材口径:本地偏好最高 → AS-PATH 最短 → 热土豆(最近的 NEXT-HOP)→ BGP 标识符最小,共四步。

工程口径:实际路由器的 BGP 选路规则更长,在 AS-PATH 与热土豆之间还有路由来源类型、多出口鉴别(MED)比较、优先选择 eBGP 学到的路由等步骤,厂商还可能在最前面加一项自己的权重。教材的四步是其中最主要的几项,先后顺序与实际一致。

考试按教材的四步作答。

对照速查

说法对错
BGP 是外部网关协议,用于不同 AS 之间✅(2013)
BGP 力求寻找一条最佳路由❌(较好的、不兜圈子的)
BGP 采用距离向量路由选择协议❌(路径向量)
BGP 基于 UDP❌(TCP,端口 179,2013、2017)
BGP 只运行在 AS 之间❌(还有 iBGP 会话)
BGP 路由指出要经过哪些路由器❌(只指出经过哪些 AS)
AS 跳数最少的路由一定是最好的❌
热土豆算法选择离本 AS 出口最近的路由✅(2024)
BGP 每次交换整个路由表❌(首次整表,以后只交换变化部分)
一个 Update 报文可以增加多条新路由❌(撤销可多条,增加只能一条)

考点

  • BGP:外部网关协议、路径向量、找较好的路由(2013)
  • 应用层、TCP 179(2013、2017);eBGP 与 iBGP 会话(2024)
  • BGP 路由 = CIDR 前缀 + 属性;AS-PATH、NEXT-HOP
  • 选路四步:本地偏好 → AS-PATH 最短 → 热土豆(2024)→ BGP 标识符
  • 四种报文 Open、Update、Keepalive、Notification(2024)
  • RIP / OSPF / BGP 比较表

链接