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

BGP/BGP路由反射器/联邦/BGP属性/BGP选路

BGP基础认知

1.1 AS自治系统

AS(自治系统)是统一管理、内部路由策略一致的路由器集合,是跨AS路由传递的边界单位。BGP专门用于不同AS之间路由交互

AS号规范

  • 2字节AS:1~65535,65000~65535为私有AS(实验内网使用,公网不传递)

  • 4字节AS:1~4294967295,华为默认asplain纯数字格式

  • 设备BGP进程号=本地AS号,单设备仅归属一个AS

1.2 BGP协议核心定义与特性

BGP(边界网关协议)是无类别路径矢量应用层协议基于TCP 179端口可靠传输使用触发式路由更新。是互联网唯一外网路由协议,一旦选择了TCP协议,则将无法支持组播或者广播,将无法自动发现邻居关 系,BGP需要手工指定邻居关系。

  • 无类别:支持VLSM、CIDR汇总,路由携带完整掩码

  • 路径矢量:无度量值,依靠AS路径、路由属性选路

  • 增量触发更新:仅路由变化发送Update,无周期更新

  • AS-by-AS选路:以AS为整体选路,忽略AS内IGP开销

BGP可以支持非直连建邻---TCP

BGP的非直连建邻是建立在IGP(包含静态路由)的基础上

1.3 BGP对等体邻接关系

BGP邻接类型按照运行方式分为EBGP,IBGP。

EBGP(外部 BGP)

  1. 定义运行于不同 AS 之间的 BGP 称为 EBGP。

  2. 防环机制从 EBGP 邻居收到路由时,如果路由携带的 AS 号包含了本地 AS 号,BGP 设备会直接丢弃这条路由,防止跨 AS 产生环路。

  3. 默认规则EBGP 邻居之间传递路由时,会修改 AS-PATH,把自己的 AS 号添加到 AS 列表最前面。

IBGP(内部 BGP)

  1. 定义运行于同一 AS 内部的 BGP 称为 IBGP。

  2. 核心防环规则BGP 设备不会把从 IBGP 对等体学习到的路由,再通告给其他 IBGP 对等体。 并与所有IBGP建立全连接

  3. 衍生问题IBGP 全连接时,对等体数量过多。 解决办法:部署路由反射器 RR或者BGP 联盟

BGP 两种角色

  1. Speaker(发言者)发送 BGP 报文的设备称为 BGP 发言者(Speaker),它接收或产生新的报文信息,并发布(Advertise)给其他 BGP Speaker。所有运行 BGP 的路由器都是 Speaker。

  2. Peer(对等体)互相交换 BGP 报文的两台 Speaker,互为 BGP 对等体。 多个对等体可以划分到同一个对等体组(Peer Group),简化配置。

Router-ID(设备唯一标识)

Router-ID为32位类IP标识,全网唯一,用于协商、选路、设备识别。

选举优先级(华为)

  1. 手动配置router-id(最优)

  2. 最大环回接口IP

  3. 最大物理接口IP

Router-ID生成后静态固化,修改接口IP不生效,需重启BGP进程更新。

BGP报文

BGP对等体间通过报文交互,其中keepalive报文周期性发送,其余报文为触发式发送

Open

建邻协商报文,协商基础参数,不匹配直接断连

open报文中携带的信息:

MY Autonomous System:自身AS号,和对端指定的AS号对比,相同则建立对等体关系,不同则建立失败

Hold time:用于协商后续keepalive报文的发送时间,默认180s。虽然不是影响邻居关系建立的因素,但是执行的时候必 须相同,如果对等体双方时间不同,则会选择双方之间较小的作为执行标准

BGP Identifier:自身的RID,BGP对等体建立后,BGP路由器发送BGP Update报文向对等体通告路由器

Keepalive

保活报文,无数据,维持邻居存活,默认1/3保活时间,60s

Update

核心路由报文,增量发布/撤销路由、携带BGP属性

Notification

报错报文,检测异常立即发送并断连回Idle

Router-refresh:

用于在改变路由策略后,请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备才会发送和响应此报文。携带自己是否开启该功能,如果双方都开启,则可以使用该功能,否则不能使用,但是不影响邻居关系建立

保活机制

  • 默认:Keepalive 60s发送,Hold-Time 180s超时

  • 两端Hold-Time取最小值生效

  • 收到Update可重置保活计时器

TCP建连源地址规则

  • 默认以出接口物理IP为TCP建连源地址

  • 环回口建邻必须配置:peer x.x.x.x connect-interface LoopBack0

  • 核心原则:本端TCP源IP必须与对端peer配置IP一致,否则建邻失败

IBGP / EBGP 邻居区别

  • IBGP:同AS设备,TTL=255,支持非直连建邻

  • EBGP:跨AS设备,TTL=1,默认仅直连建邻

EBGP环回跨设备建邻需开启多跳:

ebgp-max-hop 10

BGP六状态机

固定顺序:Idle→Connect→Active→OpenSent→OpenConfirm→Established

  • Idle(空闲):初始状态,不建连,异常断连后退回

  • Connect(连接):发起TCP握手,32s超时重传

  • Active(活跃):TCP建连失败重试状态

  • OpenSent(Open报文已发送):TCP已通,等待对端Open回应

  • OpenConfirm(Open报文已经确认):协商通过,等待Keepalive

  • Established(连接已经建立):邻居正常,可交互路由、生效策略

在BGP对等体建立过程中常见3个状态是Idle,Active,Established

BGP对等体关系建立

启动 BGP 的一端先发起 TCP 连接,假如R1 先启动 BGP,R1 使用随机端口号向 R2 的179 端口发起 TCP 连接,完成 TCP 连接的建立。三次握手建立完成之后,R1、R2 之间相互发送Open 报文,携带用于对等体建立的参数,参数协商正常之后双方相互发送 Keepalive 报文,收到对端发送的 Keepalive 报文之后对等体建立成功。此后,双方定期发送 Keepalive 报文用于保持连接。

具体过程:

(1)Idle 状态

该状态是 BGP 的初始状态。在 Idle 状态下,BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后BGP 才开始尝试和 BGP 对等体进行 TCP 连接,并转至 Connect 状态。

Start事件是触发 BGP 从Idle(空闲状态)开始发起 TCP 连接的启动事件。

触发 Start 事件的 3 种场景:

  1. 管理员配置 BGP 进程或者配置邻居(peer x.x.x.x as‑number xxx);
  2. 手动重置 BGP 邻居:reset bgp all或者reset bgp 65001
  3. 设备系统内部重启 BGP 进程。

只有在Idle 空闲状态收到 Start 事件才会生效;在 Connect、Active、OpenSent 等其余状态收到 Start 事件,设备不会做任何操作,状态不变华为。

(2)Connect 状态

该状态下,BGP 启动连接重传定时器(Connect Retry,默认32秒),等待 TCP 完成连接0。

如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态。

如果 TCP 连接失败,那么 BGP 转至 Active 状态。

如果连接重传定时器超时,BGP 仍没有收到 BGP 对等体的响应,那么 BGP 继续尝试和 BGP 对等体进行 TCP 连接,停留在 Connect 状态。

(3)在 Active 状态下,

该状态BGP 总是在试图建立 TCP 连接。

①如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,关闭连接重传定时器,并转至OpenSent 状态

②如果 TCP 连接失败,那么 BGP 停留在Active 状态

如果连接重传定时器超时,BGP 仍没有收到 BGP 对等体的响应,那么 BGP 转至Connect 状态

(4)OpenSent 状态

该状态下,BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的AS 号、版本号、认证码等进行检查。

①如果收到的 Open 报文正确,那么 BGP 发送Keepalive 报文,并转至OpenConfirm 状态

②如果发现收到的 Open 报文有错误,那么 BGP 发送Notification 报文给对等体,并转至Idle 状态

(5)OpenConfirm 状态

BGP 等待 Keepalive 或 Notification 报文。

  • 如果收到 Keepalive 报文,则转至Established 状态
  • 如果收到 Notification 报文,则转至Idle 状态

(6)Established 状态(BGP 邻居正常状态)

该状态下BGP 可以和对等体交换 Update、Keepalive、Route-refresh 报文和 Notification 报文。

①如果收到正确的 Update 或 Keepalive 报文,BGP 认为对端正常,保持 BGP 连接。

②如果收到错误的 Update 或 Keepalive 报文,BGP 发送 Notification 报文通知对端,并转至Idle 状态

③Route-refresh 报文不会改变 BGP 状态

④如果收到 Notification 报文,BGP 转至Idle 状态

⑤如果收到 TCP 拆链通知,BGP 断开连接,转至Idle 状态

BGP 对等体之间的交互原则

BGP 设备只把最优路由加入 BGP 路由表,只向对等体发布最优路由

1)从 IBGP 对等体获得的 BGP 路由,只发布给 EBGP 对等体。

2)从 EBGP 对等体获得的 BGP 路由,发布给所有 EBGP 和 IBGP 对等体。

3)存在多条去往同一目的地的有效路由时,仅将最优路由发布给对等体。

4)路由更新时,只发送更新的 BGP 路由。

5)对等体发送的所有路由,BGP 设备都会接收。

同步机制(华为默认关闭)

同步开启时,IBGP路由必须存在IGP表才可转发给EBGP,用于防黑洞;现代组网用RR/全互联替代,默认关闭同步。

next-hop-local 下一跳优化

EBGP传IBGP路由默认不修改下一跳,导致AS内下一跳不可达。ASBR配置该命令后,发给IBGP的路由下一跳改为自身,保证全网可达。

peer 3.3.3.3 next-hop-local

BGP路由反射器 RR

为保证 IBGP 对等体之间的连通性,IBGP 邻居必须全连接。 若 AS 内部共有 n 台 BGP 设备,则连接数为n(n-1)/2。当设备数量越多,邻居数量爆炸式增长,配置工作量、CPU 与带宽开销极大。解决方案:部署路由反射器 RR,不用维持 IBGP 全连接。

路由反射器角色

  1. RR(路由反射器)允许将从 IBGP 对等体学到的路由,反射给其他 IBGP 对等体。
  2. Client(客户机)与 RR 建立反射邻接关系的IBGP设备,在AS内部客户机只需与RR直连
  3. Non-Client(非客户机)既不是 RR 也不是客户机。在AS内部非客户机与RR 之间、所有非客户机彼此之间,依然必须保持 IBGP 全连接。
  4. Originator(路由始发者)AS 内产生这条路由的原始设备。依靠Originator_ID防止集群内路由环路。
  5. Cluster(集群)一台 RR + 它所有客户机构成一个集群。依靠Cluster_List防止集群间路由环路。

在将一台路由器指定为路由反射器的同时,需要指定一个或者多个他的IBGP对等体作为客 户(client),其余的IBGP对等体为非客户,RR和所有的客户之间将形成一个整体---反射簇,使用RR的RID作为反射簇的簇ID

反射规则

  • 从非客户机学到的路由:只发给所有客户机。
  • 从客户机学到的路由:发布给全部非客户机 + 其他所有客户机,不发给路由始发的那台客户机
  • 从 EBGP 对等体学到的路由:发布给所有客户机与非客户机。
  • 只有可用且优的路由信息才能被反射

RR防环

  • Cluster-ID:默认等于RR的Router-ID,标识反射簇

  • originator_id(起源者ID):一条反射的路由需要携带该属性,记录的是该路由的始发者 ID,如果一条路由中已经存在了起源者ID,则将不会修改,如果设备收到一条路由,包含本地的RID,则将不再学习,防止路由回传

  • cluster_list(簇列表)---当一条反射路由离开一个反射簇时,需要将该反射簇的簇ID,记录在簇 列表中,如果设备看到簇列表中有自己的簇ID时,将不再学习该路由

  • 双RR冗余必须相同Cluster-ID防环路

联邦

    • 路由反射器 RR:适合中小型 AS;超大运营商 AS(上百台设备)单 RR 集群压力巨大、层级复杂易环路。
    • BGP 联邦:把一个大 AS 逻辑拆成多个子 AS(Sub-AS),子 AS 之间走 EBGP,子 AS 内部走 IBGP,大幅减少 IBGP 全连接数量,专门用于超大型运营商骨干网。

核心概念

  1. 联邦 AS(Confederation AS)对外只暴露1 个公有 AS 号,整个联邦在互联网、其他运营商眼里仍是单一 AS,外部设备感知不到内部拆分。
  2. 子 AS(Member Sub-AS)联邦内部拆分的小型私有 AS,只用私有 AS 号(64512~65535),不会广播给外部邻居; 子 AS 之间建立联邦 EBGP 邻居,子 AS 内部正常 IBGP。
  3. 两种邻居区分
    • 联邦 IBGP:同一子 AS 内路由器,遵循 IBGP 规则(不修改下一跳、不重置 MED、不删除本地优先级)
    • 联邦 EBGP:不同子 AS 之间,行为近似普通 EBGP,但保留原 AS-Path、不插入子 AS 号对外发送(关键特性)

核心特性(和普通 EBGP 最大区别)

  1. AS-Path 隐藏隔离 子 AS 之间传递路由时,会把子 AS 号写入 AS-Path;路由传递出联邦(发给外部真实 EBGP 邻居)时,所有子 AS 号全部剥离,只携带对外统一的联邦 AS 号,外部看不到内部子 AS 划分。 例:联邦总 AS 100,子 AS 64510、64511 内部 AS-Path:64510 64511发给运营商 AS 200 时,AS-Path 变为:100

  2. 路由属性保留 普通 EBGP 邻居会重置Local-Pref、MED、下一跳; 联邦 EBGP保留全部 IBGP 属性,仅增加子 AS 号到 AS-Path,路由策略、选路逻辑和 IBGP 一致。

  3. 防环路机制

    • 同一子 AS:IBGP 水平分割防环;
    • 跨子 AS:收到 AS-Path 包含自身子 AS 号直接丢弃,避免联邦内环路。

拓扑逻辑示例

联邦公有 AS:AS 100拆分两个子 AS:sub-AS 64510sub-AS 64511

  1. sub-AS 64510 内部两台路由器 R1、R2:IBGP 全连接
  2. sub-AS 64511 内部两台路由器 R3、R4:IBGP 全连接
  3. 边界路由器 R2 <-> R3:联邦 EBGP 邻居
  4. R4 连接外部运营商 AS 200(普通 EBGP)

路由传递流程

外部路由(AS200)→ R4 (sub64511) → R3 (IBGP) → R2 (联邦 EBGP,AS-Path 加 64511) → R1 (IBGP) R1 向外部发路由时,剥离 64510/64511,仅携带 AS100 发给对端。

​​​​​​

优点

  1. 彻底解决大 AS IBGP 全连接爆炸,每个子 AS 独立 IBGP,连接数大幅下降;
  2. 对外拓扑透明,其他运营商看不到内部拆分,无路由互通障碍;
  3. 跨子 AS 传递保留本地优先级、MED 等选路属性,便于整网统一选路策略;
  4. 可按地域、业务拆分子 AS,运维隔离(骨干、城域分离)。

缺点

  1. 配置复杂度高于路由反射器,适合超大型网络,中小企业没必要部署;
  2. 所有联邦路由器必须统一配置联邦 AS 号,漏配会产生路由环路、路由不可达;
  3. 私有子 AS 号仅内部生效,规划时不能和公有 AS 冲突。

BGP属性

1. Origin 属性

作用:标记路由注入 BGP 的来源,用来区分路由优先级。 优先级从高到低:

  1. IGP:通过network命令注入,Origin=IGP,优先级最高。
  2. EGP:通过 EGP 协议学习,Origin=EGP,优先级次之。
  3. Incomplete:通过其他方式引入(import-route引入),Origin=Incomplete,优先级最低。

2. AS-Path 属性(必防环)

AS-Path记录路由途经的所有 AS 编号

防环规则: 如果收到路由的 AS-Path 列表里包含本地 AS 号,设备会拒收这条路由,避免 AS 之间产生环路。

当 BGP Speaker 传播自身引入的路由时:

(1)当 BGP Speaker 将这条路由通告给 EBGP 对等体时,便会在 Update 报文中创建一个携带本地 AS 号的 AS‑Path 列表。

(2)当 BGP Speaker 将这条路由通告给 IBGP 对等体时,便会在 Update 报文中创建一个空的 AS‑Path 列表。

当 BGP Speaker 传播从其他 BGP Speaker 的 Update 报文中学习到的路由时:

(1)当 BGP Speaker将这条路由通告给 EBGP 对等体时,便会把本地 AS 编号添加在 AS‑Path 列表的最前面(最左面)。收到此路由的 BGP 设备根据 AS‑Path 属性就可以知道去往目的地所要经过的 AS。离本地 AS 最近的相邻 AS 号排在前面,其他 AS 按顺序依次排列。

(2)当 BGP Speaker 将这条路由通告给 IBGP 对等体时,不会改变这条路由相关的 AS‑Path 属性。

3. Next_Hop 属性

Next_Hop 属性记录了路由的下一跳信息。BGP 的下一跳属性和 IGP 的有所不同,不一定就是邻居设备的 IP 地址。通常情况下,Next_Hop 属性遵循下面的规则:

(1)BGP Speaker 在向 EBGP 对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立 BGP 邻居关系的接口地址

(2)BGP Speaker将本地始发路由发布给 IBGP 对等体时,会把该路由信息的下一跳属性设置为本地与对端建立 BGP 邻居关系的接口地址。

(3)BGP Speaker 在向IBGP 对等体发布从 EBGP 对等体学来的路由时,并不改变该路由信息的下一跳属性。

4. Local_Pref 属性

Local_Pref 属性表明路由器的 BGP 优先级,用于判断流量离开 AS 时的最佳路由

当 BGP 的设备通过不同的 IBGP 对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择 Local_Pref 属性值较高的路由。

Local_Pref 属性仅在 IBGP 对等体之间有效,不通告给其他 AS。

Local_Pref 属性可以手动配置,如果路由没有配置 Local_Pref 属性,BGP 选路时将该路由的 Local_Pref 值按默认值 100 来处理。

5. MED 属性

MED(Multi-Exit Discriminator)属性用于判断流量进入 AS 时的最佳路由。

当一个运行 BGP 的设备通过不同的 EBGP 对等体得到目的地址相同但下一跳不同的多条路由时,在其他条件相同的情况下,将优先选择 MED 值较小者作为最佳路由

MED 属性仅在相邻两个 AS 之间传递收到此属性的 AS 一方不会再将其通告给任何其他第三方 AS。

MED 属性可以手动配置,如果路由没有配置 MED 属性,BGP 选路时将该路由的 MED 值按默认值 0 来处理。

BGP 选路策略

当到达同一目的地存在多条路由时,BGP 依次对比下列属性来选择路由:

  1. 优先选择协议首选值(PrefVal)最高的路由。该属性仅在本地有效,为华为设备私有属性。
  2. 优先选择本地优先级(Local_Pref)最高的路由。 若无本地优先级,BGP 将该路由默认本地优先级取值为 100。
  3. 依次优选路由来源手动聚合路由 > 自动聚合路由 > network 引入路由 > import-route 引入路由 > 从对等体学习的路由。
  4. 优先选择AS 路径(AS-Path)最短的路由;AS-Path 为空的路由更优。
  5. 按照 Origin 优选顺序:IGP > EGP > Incomplete。
  6. 同一 AS 内收到的路由,优先选择 MED 值更低的路由。
  7. 优先顺序:EBGP 路由 > IBGP 路由。
  8. 优先选择到达 BGP 下一跳的 IGP 度量值(metric)最小的路由。
  9. 优先选择 Cluster_List 最短的路由。
  10. 优选 Router-ID 最小设备发布的路由;若路由携带 Originator_ID,则比较 Originator-ID,优先选择 Originator_ID 更小的路由,不再比较 Router-ID。
  11. 优先选择从 IP 地址最小的对等体学习到的路由。
http://www.jsqmd.com/news/1233479/

相关文章:

  • YoloSharp:.NET中轻松实现YOLO目标检测
  • 基于ArcGIS与Fragstats的海南环岛旅游公路生态环境影响评价
  • Godot游戏开发:构建可扩展武器系统的架构设计与工程实践
  • 使用Notepad++与UABE手动修改Unity游戏配置表:从解包到重打包的完整指南
  • 从零部署Hermes:打造具备持久记忆与技能自进化的AI智能体
  • Windows系统文件DuCsps.dll丢失找不到问题解决
  • 乐山川菜馆哪家好? - 中媒介
  • 跨界融合:设计师与PM写代码的技术变革
  • MyBatis-Plus 全景对比 MyBatis:核心进步 + 实战语法速查表
  • HarmonyOS7 套餐单选卡片:用 Scroll 做好套餐选择
  • 2026中山西区防水补漏哪家靠谱?免砸砖精准测漏一站式解决全屋漏水 - 宅安选房屋修缮
  • 国内网络环境下Harness CI/CD优化实践
  • OpenOnload用户级网络栈:绕过内核瓶颈的终极网络加速方案
  • LangGraph:构建持久化AI智能体的核心技术解析
  • PG 日报|PG19 新增分散式检查点
  • 深入解析GPIO寄存器级操作:从原理到实战的嵌入式开发指南
  • 深入解析TI C2000 SCI多处理器通信:从UART基础到实战配置
  • Django学生图书管理系统:从零到部署的完整项目实战
  • Blender中基于QEM算法的网格简化:原理、实现与性能优化实践
  • IntelliJ IDEA 极致流畅配置方案:Ultra 9 285K + 64GB 内存实测
  • 高压密封滤板模具哪家技术好? - 中媒介
  • AI时代下,五年级孩子如何有效学习C++编程?
  • C#与C/C++跨语言回调实战:从原理到生产级架构设计
  • TMS320F2802x ADC深度解析:采样模式、中断与校准实战
  • 企业级低代码平台进阶功能与智能工作流引擎实践
  • windows网络适配器驱动开发-编写 MBBCx 客户端驱动程序(中)
  • AI大模型与数学 第3课:极限定义、极限四则运算法则
  • 公共艺术装置设计与制作全流程解析
  • k8s可视化看板嵌入AI助手(悬浮对话球)
  • KVM内存虚拟化中的EPT/NPT技术解析