当前位置: 首页 > article >正文

【网络协议】什么是 BGP? | 解释 BGP 路由

未经许可,不得转载。

文章目录

    • 什么是 BGP?
    • 什么是自治系统?
    • 谁运作 BGP 自治系统?
    • 外部 BGP 与内部 BGP 的区别
    • 什么是 BGP 属性?
    • BGP 的缺陷及解决方法
    • BGP 劫持的攻击方式
    • 如何确保 BGP 的安全

什么是 BGP?

边界网关协议(BGP)就像互联网的邮政服务。当有人将一封信放入邮筒时,邮政服务会处理这封信,并选择一条快速且高效的路线将其投递给收件人。同样地,当有人通过互联网传输数据时,BGP 负责查找所有可用的传输路径,并选择最佳路由,这通常意味着数据会在不同的自治系统之间跳转。

BGP 是一种通过启用数据路由来确保互联网正常运作的通信协议。例如,当一位在新加坡的用户访问原始服务器位于阿根廷的网站时,BGP 就是让这种通信快速且高效完成的协议。

什么是自治系统?

互联网是一个由网络组成的网络。它包含成千上万个被称为“自治系统”(autonomous system,AS)的更小网络。这些网络中的每一个实际上是由一个单一组织运营的大型路由器集合。

在这里插入图片描述

如果我们继续将 BGP 比作互联网的邮政服务,那么自治系统就相当于各邮政分局。一个城镇可能有数百个邮筒,但邮筒中的所有邮件都必须先经过本地邮政分局,然后再运送到另一个目的地。自治系统中的内部路由器就类似于邮筒,它们将出站流量路由到自治系统内部,再通过 BGP 路由将这些流量传输到它们的目的地。

在这里插入图片描述

上图展示了一个简化版的 BGP。在这个版本中,互联网仅包含 6 个自治系统。如果 AS1 需要将一个数据包路由到 AS3,它有两种不同的选择:

  1. 跳跃到 AS2,然后到 AS3:
    AS2 → AS3

  2. 跳跃到 AS6,然后经过 AS5 和 AS4,最终到达 AS3:
    AS6 → AS5 → AS4 → AS3

在这个简化的模型中,决策似乎非常简单直接。AS2 路径所需的跳数比 AS6 路径要少,因此它是最快、最高效的路由。

然而,现实中互联网的规模要复杂得多,包含成百上千个自治系统,而且跳数只是复杂路由选择算法中的一个因素。这正是互联网中 BGP 路由实际工作的情况。

互联网的结构是动态变化的,新系统不断出现,已有系统可能变得不可用。因此,每个自治系统都必须掌握关于新路由和废弃路由的最新信息。这是通过点对点会话完成的,在会话中,每个自治系统通过 TCP/IP 协议与相邻的自治系统连接,交换路由信息。借助这些信息,每个自治系统都可以正确地路由出站数据。

然而,这里我们之前的邮政比喻已经不完全适用。与邮局不同,自治系统并不都属于同一个组织。事实上,它们往往属于彼此竞争的公司。因此,BGP 路由有时会将商业因素纳入考虑。自治系统之间通常会相互收取费用以传输通过其网络的流量,这些费用会影响最终选择哪条路由。

谁运作 BGP 自治系统?

自治系统(AS)通常由互联网服务提供商(ISP)或其他大型组织运营,例如科技公司、高校、政府机构和科研机构。希望交换路由信息的每个 AS 都必须拥有一个注册的自治系统编号(ASN)。互联网号码分配机构(IANA)负责向区域互联网注册机构(RIR)分配 ASN,而后者再将其分配给 ISP 和网络。ASN 分为两类:16 位数,范围为 1 到 65534;以及 32 位数,范围为 131072 到 4294967294。截至 2018 年,全球正在使用的 ASN 大约有 6.4 万个。只有外部 BGP(eBGP)需要使用 ASN。

外部 BGP 与内部 BGP 的区别

在互联网中,路由交换和流量传输通过外部 BGP(eBGP)进行。自治系统也可以使用 BGP 的内部版本(即内部 BGP 或 iBGP)来路由内部网络中的数据。需要注意的是,使用内部 BGP 并非使用外部 BGP 的前提条件。自治系统可以从多种内部协议中选择,用来连接其内部网络的路由器。

外部 BGP 类似于国际运输。当邮寄包裹到国外时,需要遵守国际上的特定规则。包裹到达目的国家后,必须通过该国的本地邮政服务分发到最终目的地。每个国家都有自己的内部邮政服务,不必遵循其他国家的规则。同理,每个自治系统也可以有自己的内部路由协议,用于管理其内部网络的路由。

什么是 BGP 属性?

BGP 的目标是找到网络流量的最有效路径。然而,路径跳数并不是 BGP 路由器选择路径的唯一标准。BGP 会为每条路径分配属性,这些属性帮助路由器在多种路径中选择最优路径。许多路由器允许管理员自定义属性,以更精确地控制流量在网络中的流动方式。一些 BGP 属性包括:

  • 重量:Cisco 专有属性,用于指定本地路径的优先级。
  • 本地首选项:指定首选的出站路径。
  • 起源:指出路由的来源。
  • AS 路径长度:指出路径的跳数,较短的路径优先。

BGP 路由器按照优先级依次检查这些属性。例如,BGP 路由器会首先选择具有最高权重的路径;如果权重相同,则选择本地首选项;接着再检查其他属性。

BGP 的缺陷及解决方法

2004 年,一家名为 TTNet 的土耳其 ISP 意外向相邻网络发布了错误的 BGP 路由,这些路由宣称 TTNet 是全互联网流量的最佳目的地。随着错误路由扩散,全球互联网出现大规模中断,许多人无法访问部分或全部网络,危机持续了一天。

类似地,2008 年,一家巴基斯坦 ISP 尝试阻止国内用户访问 YouTube,意外将错误路由发布到邻近的自治系统。结果,这些路由在整个 BGP 网络中迅速传播,导致全球用户无法访问 YouTube,持续数小时。

2019 年 6 月,美国宾夕法尼亚州的一家小公司意外成为通过 Verizon 网络流量的首选路径,导致全球部分用户无法访问大部分互联网服务,持续数小时。

这些事件被称为 BGP 劫持。这种情况并非总是意外发生。例如,2018 年 4 月,攻击者故意创建错误的 BGP 路由,将本应发送到亚马逊 DNS 服务的流量重定向到自己,成功窃取了价值 10 万美元的加密货币。

BGP 劫持的攻击方式

  • 将用户重定向到伪造网站进行网络钓鱼和社交工程。
  • 通过流量黑洞或重定向实施拒绝服务(DoS)。
  • 在交换数据的路径上实施攻击,从而篡改信息。
  • 冒充通信中的节点进行窃听。

这些事件的发生源于 BGP 的路由共享功能建立在信任的基础上。当对等网络无意或有意发布错误的路由信息时,流量可能被发送到错误的目的地,甚至导致恶意后果。

如何确保 BGP 的安全

幸运的是,在保护 BGP 方面已经取得了一些进展。最引人注目的是 2008 年推出的资源公钥基础设施(RPKI)的路由安全框架。RPKI 使用被称为路由源授权(Route Origin Authorization, ROA)的加密签名记录,以验证哪个网络运营商被允许使用 BGP 来公告某个组织的 IP 地址。这确保了只有被授权方才能公告某个组织的前缀。

但仅有 RPKI 的存在还不足够。如果大型网络没有遵循 BGP 安全最佳实践,就可能传播大规模的劫持攻击。目前,超过 50% 的顶级互联网服务提供商在某种程度上支持 RPKI,但需要大多数的支持才能完全保障 BGP 的安全。网络运营商可以通过实施 RPKI 和使用 Cloudflare 路由泄漏检测等网络警报技术来保护其网络。这个功能可以让客户在未经授权者发布其前缀时收到通知,从而预防 BGP 劫持攻击。

原文出处:https://www.cloudflare.com/zh-tw/learning/security/glossary/what-is-bgp/


http://www.kler.cn/a/460811.html

相关文章:

  • AngularJS 过滤器:提升用户体验的数据处理利器
  • python生成、操作svg图片
  • 设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
  • Fabric环境部署
  • 15. 接雨水
  • IDEA2023.1修改默认Maven配置
  • 【算法题解】B. President‘s Office - Python实现
  • 如何利用小程序高效获客,小程序引流怎么样
  • 大语言模型提示词工程 - ReACT 推理模式
  • [.闲于修.]Autosar_UDS_笔记篇_ISO14229-1
  • odoo17 4模型视图理解
  • 小程序组件 —— 21组件案例演示 - 划分页面结构
  • 小米自研vela系统kvdb数据库的使用(一)
  • 微信小程序Uniapp
  • 基于Spark的共享单车数据存储系统的设计与实现_springboot+vue
  • UniApp 状态管理:Vuex 在 UniApp 中的实践
  • 【Linux】linux 清空文件内容命令和方法
  • 2024年总结与展望
  • 汽车打气泵方案|智能充气泵工作原理
  • vulnhub ica1
  • 论文略读: TransTab: Learning Transferable Tabular Transformers Across Tables
  • Datawhale AI冬令营(第二期)动手学AI Agent task2--学Prompt工程,优化Agent效果
  • 7个国内框架 Agent应用
  • Qt 教程全集目录公布(方便查阅2024)
  • 前端Python应用指南(八)WebSocket与实时应用:用Flask和Django实现聊天系统
  • Java中实现对象的深拷贝(Deep Copy)