跳转到内容

Border Gateway Protocol

来自轻之舟百科
(重定向自BGP
Border Gateway Protocol
中文名 边界网关协议
英文名 Border Gateway Protocol
缩写 BGP
当前版本 BGP-4(RFC 4271,2006年)
端口 / 传输协议 TCP 179
路由类型 外部网关协议(Exterior Gateway Protocol),路径矢量协议(Path-vector protocol)
主要功能 在自治系统(AS)之间交换网络可达性信息
标准化机构 IETF

Border Gateway Protocol(BGP,边界网关协议) 是互联网中核心的自治系统(AS, Autonomous System)之间的路由协议,其基本功能是在自治系统之间自动交换无环路的路由信息[1]。BGP被归类为路径矢量协议(Path-vector protocol),其路由决策基于路径、网络策略或管理员配置的规则集,而不仅仅是维护简单的路由跳数或链路状态[2]。BGP-4支持无类别域间路由(CIDR)并提供了路由聚合机制,是当前互联网事实上的域间路由标准[1]

历史与版本

BGP的设计源于早期互联网外部网关协议(EGP, Exterior Gateway Protocol)的局限性,尤其是EGP对自治系统间拓扑结构限制为树形,且因基于不可靠的IP传输而导致更新丢失问题[3]

BGP-1 至 BGP-3

  • BGP-1: 于1989年6月在RFC 1105中首次发布,支持少量带类别的IPv4路由,使用TCP作为可靠传输以减少路由震荡,并引入了AS_PATH属性以防止路由环路[4][3]。BGP最初是在1989年1月的第12届IETF大会上由Yakov Rekhter和Kirk Lougheed共同设计的,起初只是一个短期解决方案,却意外成为了互联网的基石之一[5]
  • BGP-2: 发布于1990年的RFC 1163,引入了通过TLV编码携带路径属性(如Origin、AS_PATH、Next_Hop)的框架,为后续扩展打下了基础[3]
  • BGP-3: 发布于1991年的RFC 1267,进一步优化了BGP-2的工作机制[3][6]

BGP-4

当前广泛部署的版本是BGP-4。其初始规范于1994年在RFC 1654中起草,随后于1995年在RFC 1771中发布,最终标准于2006年在RFC 4271中正式确定[1][2]

BGP-4相较于早期版本的关键改进在于对CIDR的支持,允许多个IP前缀聚合为一条路由通告,极大缩减了互联网路由表的规模[1]。此外,BGP-4进一步增强了策略控制粒度,支持更丰富的路径属性[7]

工作原理

BGP运行在可靠的传输层协议之上,通常使用TCP端口179建立连接,这避免了协议自身实现复杂的报文分片、重传和确认机制[4][2]。BGP对等体(Peers)需要管理员手动配置以建立连接。

BGP 消息类型

BGP对等体之间通过以下五种报文进行交互[8][9]

  • OPEN:TCP连接建立后发送的第一个报文,用于协商BGP版本号、AS编号、Hold Time等参数。
  • UPDATE:用于通告可达路由(携带NLRI和路径属性)或撤销不可达路由。
  • KEEPALIVE:周期性发送以维持连接活性,同时用于响应OPEN报文的确认。
  • NOTIFICATION:当检测到错误时发送,并随即关闭BGP连接。
  • ROUTE-REFRESH(可选扩展):用于动态请求对等体重发路由信息。

路径属性与最佳路径选择

BGP不单纯依靠距离矢量,而是基于一系列路径属性(Path Attributes)进行决策。当存在多条通往同一目的地的路由时,BGP会启动最佳路径选择算法(Decision Process)[7]。典型的选路顺序如下[10][7]

  1. 丢弃下一跳不可达的路由;
  2. 优选权重(Weight)最高的路由(Cisco专有属性);
  3. 优选本地优先级(Local Preference)最高的路由;
  4. 优选本地生成的路由(如通过network命令注入);
  5. 优选AS路径(AS_PATH)最短的路由;
  6. 优选起源类型最低的路由(IGP < EGP < Incomplete);
  7. 优选MED(Multi-Exit Discriminator)值最低的路由;
  8. 优选eBGP学到的路由而非iBGP;
  9. 优选到Next_Hop的IGP度量值(Metric)最低的路由;
  10. 在仍无法区分时,使用Router ID、Cluster List长度及对等体IP地址等作为最后的仲裁因素。

路由信息库(RIB)

BGP路由器在逻辑上维护多个路由信息库(Routing Information Bases)[1][11]

  • Adj-RIBs-In:存储从对等体接收到的原始路由信息。
  • Loc-RIB:经过选路策略(如入向过滤、属性修改和最佳路径算法)后,本地选中的路由信息。
  • Adj-RIBs-Out:准备向特定对等体宣告的路由,通常经过出向策略修饰。

安全考量

BGP在设计之初缺乏内置的安全验证机制,一个AS可以宣告并不属于它的IP地址前缀,从而导致流量被错误吸引或拦截(前缀劫持,Prefix Hijacking)[12]。这一问题既可能源于管理员配置错误,也可能是恶意攻击,且后果波及范围往往极广[13]

为了缓解这些安全威胁,业界开发了资源公钥基础设施(RPKI,Resource Public Key Infrastructure)和路由起源验证(ROV,Route Origin Validation),允许AS所有者通过加密证书授权其IP前缀的宣告权限[14]。此外,针对路径完整性的BGPsec(RFC 8205)也被提出以提供更全面的安全保障[13],但由于部署复杂性和开销等原因,其在全球范围内的实际普及度依然有限[14]

扩展与应用

随着互联网的发展,原始BGP-4针对IPv4单播设计的功能已不足以满足新需求,由此产生了**多协议BGP扩展**(MP-BGP, Multiprotocol Extensions for BGP-4,RFC 4760)。MP-BGP引入地址族标识符(AFI, Address Family Identifier)和后续地址族标识符(SAFI, Subsequent Address Family Identifier)字段,使BGP能够承载IPv6单播、多播、三层VPN(L3VPN)及虚拟专用局域网服务等多种网络层协议的路由信息[15][2]

参考文献