Skip to content

BGP

基础知识

外部网关协议 EGP (例如边界网关协议 BGP)

  • 在不同自治系统内,度量路由的“代价”(距离,带宽,费用等) 可能不同,因此,对于目治系统之间的路由选择,便用“代价”作为度量来寻找最佳路由是不行的。
  • 自治系统之间的路由选择必须考虑相关策略 (政治,经济,安全等)
  • BGP 只能是力求寻找一条能够到达目的网络且比较好的路由 (不能兜圈子), 而并非要寻找一条最佳路由

在配置 BGP 时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP 发言人”

不同自治系统的 BGP 发言人要交换路由信息,首先必须建立 TCP 连接,端口号为 179:

  • 在此 TCP 连接上交换 BGP 报文以建立 BGP 会话
  • 利用 BGP 会话交换路由信息 (例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
  • 使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此称为对方的邻站 (neighbor) 或对等站 (peer)

BGP 发言人除了运行 BGP 外,还必须运行自己所在自治系统所使用的内部网关协议 IGP,例如 OSPF 或 RIP。BGP 发言人交换网络可达性的信息 (要到达某个网络所要经过的一系列自治系统)

当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图

BGP 适用于多级结构的因特网

BGP-4 有以下四种报文:

  • OPEN (打开) 报文:用来与相邻的另一个 BGP 发言人建立关系,使通信初始化
  • UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条理由
  • KEEPLIVE(保活)报文:用来周期性地证实邻站的联通性
  • NOTIFICATION (通知) 报文:用来发送检测到的差错

Peer

在 BGP 里,Peer(对等体)是两个运行 BGP 协议的路由器之间建立的连接关系,它们之间:

  • 通过 TCP(通常是端口 179)建立连接
  • 互相交换路由信息
  • 是“对等”的伙伴关系,不分主从、上下级

BGP 中这叫做 BGP Peering(对等连接)

举个例子: 你有两台路由器:

  • 路由器 A:属于中国电信(AS4134)
  • 路由器 B:属于 Google(AS15169)

它们之间建立 BGP Peering 之后,A 就是 B 的 Peer,B 也是 A 的 Peer

互联结算关系(Settlement-Free Peering)

在运营商或大型网络之间,“Peer(对等关系)” 不仅是技术层面的 BGP Peering,更是商业层面的互联协议,这就涉及到 “互联结算关系(Settlement-Free Peering)”

设想有两个 ISP:

  • AS100:它的客户包括 IP1、IP2
  • AS200:它的客户包括 IP3、IP4

如果 AS100 和 AS200 是 Peer 对等关系,那么它们:

会交换以下路由信息:

  • AS100 → AS200:告诉 AS200,我有 IP1 和 IP2(我的客户的 IP)
  • AS200 → AS100:告诉 AS100,我有 IP3 和 IP4(我的客户的 IP)

但不会交换:

  • 来自其他上游或 Peer 的路由信息(比如 AS300 的路由)不会被传递

与中转的区别和差异

项目Peer(对等)Transit(中转)
商业费用免费(通常)付费
可达网络只可达对方的客户可达整个互联网
流量方向双向大致对等单向(客户→互联网)为主
举例腾讯 ↔ 阿里中小 ISP → 电信

成为 Peer

BGP Peering 是逻辑层面的连接,不一定非得是物理直连,但双方必须在网络层(IP 层)上能互相到达,也就是说,要能建立起 TCP 连接(通常是 TCP 179 端口)

方式是否需要物理连接示例
直接物理链路(专线)需要私有 Peering,两个数据中心之间拉光纤
通过公共交换中心(IX)需要(共享二层)如在 HKIX/LINX/AMS-IX 上建立 Peer
通过公网(Internet)不需要双方通过公网 IP 建立 TCP 179 连接
通过 GRE/IPSec/VPN 隧道不需要虚拟 Peer,用于实验或特殊场景

ASN 与 IP 地址的关系

ASN 是一个标识符,类似于域名,它允许你的网络作为互联网上的一个独立参与者,与其他的 AS 交换路由信息

IP 地址是资源,是实际的网络地址空间,是你用来给设备(服务器、路由器、电脑等)分配地址的资源,IP 地址由全球的五个区域互联网注册机构 (RIRs) 分配和管理。这些 RIRs 从互联网号码分配机构 (IANA) 获得大的 IP 地址块,然后根据各区域的需求将其分配给 ISP 或终端用户

拥有 ASN 的主要目的是为了能够使用 BGP 协议在互联网上广播你所拥有的 IP 地址块,如果你没有 ASN,你通常只能从你的上游 ISP 那里获得 IP 地址,并且你的 IP 地址会通过你 ISP 的 ASN 来广播。这意味着如果你更换 ISP,你可能需要更换你的 IP 地址,这会非常麻烦(这被称为“提供商依赖”IP 地址),如果你拥有自己的 ASN,你可以申请“提供商独立 (Provider Independent, PI)”的 IP 地址。这意味着这些 IP 地址不依赖于任何特定的 ISP,你可以自由地选择或更换你的上游 ISP,而不需要改变你的 IP 地址。这是大型组织或需要多宿主(连接多个 ISP)的实体通常会选择的方式

路由通告 (Route Advertisement)

当你获得了 IP 地址块并拥有了 ASN 之后,你的网络(即你的 AS)会通过 BGP 协议向你的上游 ISP(或其他 BGP 邻居)通告你所拥有的 IP 地址前缀。例如,你会告诉它们:“我(AS XXXXX)拥有 IP 地址块 203.0.113.0/24。”,这个通告中包含了你的 AS 号以及到达这个 IP 地址块所需要经过的路径信息(AS Path)

逐跳传递 (Hop-by-Hop Propagation)

  • 你的上游 ISP 收到你的通告后,会将这个路由信息传递给它们的 BGP 邻居

  • 接着,这些邻居又会把这个信息传递给它们的邻居,如此层层传递,直至全球的互联网骨干网络

  • BGP 的“路径矢量”特性在这里非常重要。每个 BGP 路由器在传递路由信息时,都会在 AS Path 中记录它自己所属于的 AS 号。这使得路由信息包含了到达目的地的完整 AS 路径,从而能够避免路由环路,并帮助路由器做出最佳路径选择

路由表构建 (Routing Table Construction)

  • 互联网上的所有 BGP 路由器都会接收到大量的路由通告。它们会根据一套复杂的 BGP 路由选择算法(考虑 AS Path 长度、本地优先级、MED 等多种因素),为每个目的 IP 前缀选择一条最佳的路径

  • 被选定的最佳路径会安装到路由器的 IP 路由表(通常称为 FIB 或 RIB)中

数据包转发 (Packet Forwarding)

  • 当互联网上的任何设备想要访问你 AS 内的某个 IP 地址时,它发送的数据包会经过层层路由器

  • 每个路由器会查看数据包的目的 IP 地址,然后查询自己的 IP 路由表

  • 路由表会告诉路由器:为了到达这个目的 IP 地址,数据包应该被发送到哪一个下一跳路由器(通常是它某个 BGP 邻居的路由器)

  • 这个过程会一直持续,直到数据包最终被引导到你的 AS 边界,然后由你 AS 内部的路由器进一步转发到具体的目的 IP 地址

参考视频:计算机网络微课堂第057讲 边界网关协议BGP的基本工作原理(有字幕有背景音乐版)

最后更新于:

Released under the MIT License.