在大型 IP 网络与数据中心骨干网架构中,BGP(Border Gateway Protocol,边界网关协议)是控制平面路由传递的绝对核心。与 OSPF、IS-IS 等追求“最短路径优先(SPF)”的内部网关协议不同,BGP 的本质是一个基于策略的距离矢量协议。它不以链路带宽或时延作为衡量路径优劣的唯一标准,而是通过赋予路由丰富的路径属性(Path Attributes),让网络工程师能够通过极为细粒度的策略对流量进行精准调控。
掌握 BGP 的底层路径属性分类、选路规则链以及等价负载分担条件,是进行大型网络流量工程(Traffic Engineering)、多出口选路干预以及故障排查的核心基本功。
一、 BGP 路径属性的四大底层分类哲学
BGP 路由在 UPDATE 报文中携带的每一个属性,都有其固定的协议定义与传播行为。在深入具体属性之前,必须从底层逻辑上理解 BGP 属性的四大分类维度:公认必遵、公认任意、可选传递、可选非传递。
1. 公认属性(Well-Known Attributes)
所有运行 BGP 协议的路由器都必须识别的属性。公认属性进一步细分为两类:
公认必遵(Well-known Mandatory):必须包含在所有的 UPDATE 消息中。如果一条 BGP 路由缺少了公认必遵属性,该 UPDATE 报文将被视为结构损坏并引发错误。
典型代表:Origin(起源代码)、AS_Path(AS 路径)、Next_Hop(下一跳)。
公认任意(Well-known Discretionary):所有 BGP 设备都能识别,但不要求必须包含在每个 UPDATE 报文中,可以根据需要选择性携带。
典型代表:Local_Preference(本地优先级)、Atomic_Aggregate(原子聚合)。
2. 可选属性(Optional Attributes)
并非所有 BGP 实现都必须支持或识别的属性。厂商可以根据功能扩展定义可选属性。可选属性同样分为两类:
可选传递(Optional Transitive):如果 BGP 路由器不认识该属性,但接收到了携带该属性的路由,路由器在将该路由通告给其他对等体时,必须保留该属性并继续向下传递。
典型代表:Community(团体属性)、Aggregator(聚合者属性)。
可选非传递(Optional Non-transitive):如果 BGP 路由器不识别该属性,在将路由传递给其他对等体时,会直接删除该属性,然后再进行路由通告。
典型代表:MED(多出口鉴别器)、Preferred-Value(华为/华三首选值)、Originator_ID、Cluster_List。
二、 六大核心路径属性详解与策略控制
在 BGP 的选路决策链中,有六个属性最为关键,它们直接决定了控制平面路由的优劣评判。下面结合厂商实现与现网配置命令进行逐一拆解。
1. Preferred-Value / Weight(首选值 / 权重)
协议特性与行为
属性归类:可选非传递(华为/华三扩展属性;思科对应为 Weight)。
作用范围:仅在本地设备生效。它绝不会包含在任何 BGP 的 UPDATE 报文中传递给任何 IBGP 或 EBGP 对等体。
选路规则:数值越大越优先。
默认值差异:
华为 / 华三:无论路由是本地始发还是从第三方邻居学习到的,默认 Preferred-Value 均为 0。
思科:本地主动始发(network 或 redistribute)的路由,默认 Weight 为 32768;从其他设备学习到的路由,默认 Weight 为 0。
工程应用场景
当一台路由器同时从多个邻居收到去往同一个目的网段的路由时,如果工程师希望在本地强制指定某条路径,而不想影响网络中其他任何路由器的选路决策,修改 Preferred-Value 是最直接、最安全的手段。
华为 CLI 配置落地
场景 A:针对某个邻居发送的所有路由统一修改首选值
[R4] bgp 200 [R4-bgp] peer 2.2.2.2 preferred-value 10含义:将邻居 2.2.2.2 发送过来的所有 BGP 路由的首选值统一修改为 10,使其优先级高于其他默认值为 0 的邻居路由。
场景 B:通过路由策略(Route-Policy)精细化干预特定网段
# 1. 定义 ACL 匹配目标路由 [R4] acl number 2000 [R4-acl-basic-2000] rule permit source 10.1.1.0 0.0.0.255 [R4-acl-basic-2000] rule deny source any [R4-acl-basic-2000] quit # 2. 创建路由策略,匹配 ACL 并修改 Preferred-Value [R4] route-policy 10.1.1.0_r2 permit node 10 [R4-route-policy] if-match acl 2000 [R4-route-policy] apply preferred-value 15 [R4-route-policy] quit # 3. 必须创建放行节点,避免未匹配路由被默认拒绝 [R4] route-policy 10.1.1.0_r2 permit node 20 [R4-route-policy] quit # 4. 在 BGP 邻居接收方向(import)调用路由策略 [R4] bgp 200 [R4-bgp] peer 2.2.2.2 route-policy 10.1.1.0_r2 import2. Local_Preference(本地优先级)
协议特性与行为
属性归类:公认任意(Well-known Discretionary)。
作用范围:用于在同一个自治系统(AS)内部告知其他路由器,去往某个外部 AS 时哪台边界路由器是最佳出口。
选路规则:数值越大越优先。默认值为 100。
传递规则:
可以传递给同一个 AS 内部的所有IBGP 对等体。
绝对不能传递给外部的EBGP 对等体。如果从 EBGP 邻居收到携带 Local_Preference 的报文,会引发 BGP Notification 报错并中断会话。
工程应用场景
企业网或运营商网络存在多个出接口连接外部 ISP 时,网络工程师通过在 AS 边界路由器(ASBR)上配置 Local_Preference,能够完美控制整个 AS 内部所有设备发往外部流量(Outbound Traffic)的出口走向。
配置落地示例
华为 CLI(全局修改默认值):
[R2] bgp 200 [R2-bgp] default local-preference 150含义:将本设备始发或经过本设备传递给其他 IBGP 邻居的路由,其默认 Local_Preference 统一提升为 150。
思科 CLI(使用 Route-Map 针对特定前缀设置):
R3(config)# access-list 1 permit 10.1.1.0 0.0.0.255 R3(config)# route-map lan7_r6 permit 15 R3(config-route-map)# match ip address 1 R3(config-route-map)# set local-preference 150 R3(config-route-map)# exit R3(config)# route-map lan7_r6 permit 20 R3(config)# router bgp 200 R3(config-router)# neighbor 192.168.1.1 route-map lan7_r6 in3. 本地始发路由优于邻居学习到的路由(Locally Originated)
在 BGP 选路决策链中,当 Preferred-Value 和 Local_Preference 完全相同时,路由器会检查路由的来源方式。本地路由器主动生成的路由,优先级高于从第三方邻居(IBGP 或 EBGP)学习到的路由。
本地始发路由的内部细分优先级逻辑如下:
手动汇总(Manual Summary)>自动汇总(Auto Summary)>Network 宣告>Import-route 引入手动汇总(Manual Summary)>自动汇总(Auto Summary)>Network 宣告>Import-route 引入4. AS_Path(AS 路径列表)
协议特性与行为
属性归类:公认必遵(Well-known Mandatory)。
作用:
控制平面防环:当路由器从 EBGP 邻居收到一条路由时,会检查 AS_Path 列表中是否包含本地所在的 AS 号。如果包含,说明该路由产生了跨 AS 的环路,路由器会直接丢弃该路由。
选路依据:BGP 认为经过的 AS 数量越少,网络开销和延迟越低。
选路规则:AS_Path 序列中包含的 AS 号数量越短越优先(注意:AS_CONFED_SEQUENCE 等联盟属性在常规选路比较时不计入长度)。
生效边界:仅当路由被通告给EBGP 对等体时,通告路由器才会将本地的 AS 号追加到 AS_Path 列表的最左侧(最前面)。在 IBGP 邻居之间传递时,AS_Path 保持不变。
工程应用场景(AS_Path Prepend / 属性追加)
当本地 AS 拥有双链路连接外部 AS 时,如果我们希望引导外部 AS 的入站流量(Inbound Traffic)优先走主链路,可以在备用链路的出方向(Export)给路由强行追加若干个重复的本地 AS 号,以此人为增长备用链路的 AS_Path 长度,促使外部路由器选择主链路。
华为 CLI 配置落地
# 1. 定义匹配规则 [R4] acl number 2000 [R4-acl-basic-2000] rule permit source 192.168.10.0 0.0.0.255 [R4-acl-basic-2000] quit # 2. 定义路由策略,追加 AS 号 [R4] route-policy lan10_as+ permit node 10 [R4-route-policy] if-match acl 2000 [R4-route-policy] apply as-path 1 2 3 4 additive [R4-route-policy] quit [R4] route-policy lan10_as+ permit node 20 [R4-route-policy] quit # 3. 在针对 EBGP 邻居的调用中应用(可以是 Import 或 Export) [R4] bgp 1234 [R4-bgp] peer 45.45.45.2 route-policy lan10_as+ import注意:additive 参数表示在原有 AS_Path 的基础上增量追加,而非覆盖原有属性。
5. Origin(起源代码)
协议特性与行为
属性归类:公认必遵(Well-known Mandatory)。
作用:标识一条路由最初是如何被注入到 BGP 路由表中的。
三种起源类型及优先级:
i(IGP):优先级最高。表示路由是通过在 BGP 视图下执行 network 命令直接宣告进 BGP 的,来源清晰可信。
e(EGP):优先级居中。表示路由是通过早期 EGP(Exterior Gateway Protocol)协议学习到的(现网已基本淘汰)。
?(Incomplete / 不完整):优先级最低。表示路由是通过路由引入(import-route 或 redistribute)方式抽取的其他协议(如 OSPF、IS-IS、静态或直连)路由。
选路规则
在其它高优先级属性相同的前提下,起源代码按照i > e > ?的顺序进行优选。
华为 CLI 配置落地
[R10] route-policy lan7_r8_origin_down permit node 10 [R10-route-policy] if-match acl 2000 [R10-route-policy] apply origin incomplete [R10-route-policy] quit [R10] route-policy lan7_r8_origin_down permit node 20 [R10-route-policy] quit [R10] bgp 1000 [R10-bgp] peer 108.108.108.1 route-policy lan7_r8_origin_down import6. MED(Multi-Exit Discriminator,多出口鉴别器)
协议特性与行为
属性归类:可选非传递(Optional Non-transitive)。
作用:主要用于告知相邻的自治系统(Neighboring AS),在存在多条进入本 AS 的路径时,哪一条路径是进入本 AS 的最佳入口(引导邻居 AS 的出站流量,即本 AS 的入站流量)。
选路规则:数值越小越优先(相当于路由开销/Metric)。
MED 的传递规则(工程极易混淆点)
本地始发的路由:通告给所有对等体(包含 IBGP 和 EBGP)时,默认都会携带 MED 值。
从 EBGP 邻居学习到的路由:在传递给本地的IBGP 对等体时,会继续保留并传递该 MED 值。
从 IBGP 邻居学习到的路由:在传递给下一个EBGP 对等体时,默认不传递 MED 值(即清除该属性)。
跨 AS 比较限制:BGP 默认只比较来自同一个相邻 AS的不同路径的 MED 值。如果两条路由来自不同的外部 AS,BGP 默认不比较它们的 MED(除非配置了 compare-different-as-med)。
MED 默认值继承规则
当通过 network 或 import-route 命令将 IGP 路由、直连路由或静态路由注入 BGP 时,BGP 默认会自动保留路由在原协议中的 Metric 值作为 BGP 的 MED 值。
注:使用 default-med 命令可以修改 BGP 生成路由时的默认 MED 值,但该命令仅对 import-route 引入的路由以及 BGP 聚合路由生效。
华为 CLI 配置落地
[R11] acl number 2000 [R11-acl-basic-2000] rule permit source 10.1.1.1 0 [R11-acl-basic-2000] quit [R11] route-policy lan1_left permit node 10 [R11-route-policy] if-match acl 2000 [R11-route-policy] apply cost 10 [R11-route-policy] quit [R11] route-policy lan1_left permit node 20 [R11-route-policy] quit [R11] bgp 200 [R11-bgp] peer 116.116.116.1 route-policy lan1_left import三、 BGP 完整决策链(13 条选路规则)
在控制平面,当 BGP 收到去往同一前缀的多条路径时,会按照极其严密的先后顺序依次评估各项属性,直至挑选出唯一一条最优路由(Valid & Best Route,打上 *> 标记)写入 IP 路由表并继续通告给其他邻居。
完整的选路决策流程如下:
下一跳可达性校验(Next-Hop Reachability):首要前提。如果本地 IP 路由表中不存在去往 BGP 路由 Next_Hop 地址的路径,该路由直接被标记为无效(Valid,无 *),不参与任何后续比较。
优选 Preferred-Value / Weight 最高的路由(华为/思科本地特有)。
优选 Local_Preference 最高的路由。
优选本地始发的路由(手动汇总 > 自动汇总 > network > import-route > 学习到的路由)。
优选 AS_Path 序列最短的路由。
优选 Origin 起源代码最优的路由(i > e > ?)。
优选 MED 值最小的路由。
EBGP 路由优先于 IBGP 路由(EBGP > IBGP)。
优选到 BGP 下一跳(Next-Hop)的 IGP Cost 最小的路由(基于内部路由协议的递归开销比较)。
触发等价负载分担(如配置了 maximum load-balancing,且满足所有负载分担前提条件,则中断后续比较,实现多路径转发)。
优选 Cluster_List 最短的路由(路由反射器 RR 场景)。
优选 Originator_ID 或 Router-ID 最小的路由器通告的路由。
优选 Peer IP 地址最小的对等体通告的路由。
四、 BGP 等价负载分担(Equal-Cost Load Balancing)
在现实网络拓扑中,为了充分利用多条物理链路的带宽,常常需要在 BGP 中开启负载分担(Load Balancing)。然而,由于 BGP 的设计初衷是挑选出唯一最佳路径,因此形成 BGP 等价负载分担的硬性条件极为苛刻。
形成 BGP 等价负载分担的严苛条件
要让两条或多条 BGP 路由同时进入数据平面的转发表(FIB)进行流量分担,必须同时满足以下所有条件:
Preferred-Value / Weight 属性完全相同。
Local_Preference 属性完全相同。
路由来源一致:要么都是聚合路由,要么都是非聚合路由;本地始发方式完全一致。
AS_Path 属性长度完全相同。
Origin 起源代码类型(i, e, ?)完全相同。
MED 属性值完全相同。
路由类型完全相同:必须同为 EBGP 路由,或者同为 IBGP 路由(不能将一条 EBGP 路由和一条 IBGP 路由进行负载分担)。
AS 内部去往 Next-Hop 的 IGP Metric(Cost)完全相同。
AS_Path 内容完全一致:在部分厂商或特定配置下,除了要求长度相同外,还要求 AS_Path 里的每一个 AS 编号序列也必须完全相同。
华为 CLI 负载分担配置实现
当拓扑已经满足上述所有条件后,默认情况下 BGP 依然只会挑选一条最优路由。必须在 BGP 进程下显式使能负载分担条数:
[R4] bgp 200 [R4-bgp] maximum load-balancing 2含义:允许最多 2 条满足条件的等价 BGP 路径同时进行数据平面的负载分担。
五、 大型网络工程实践策略指南
在现网工程部署中,网络工程师必须时刻保持控制平面(路由传递)与数据平面(流量转发)分离的思维,并遵循以下策略最佳实践:
明确流量方向与控制手段的映射:
控制出站流量(Outbound Traffic):在本地 AS 的路由接收方向(Import)干预属性。优先选择 Preferred-Value(针对单台设备)或 Local_Preference(针对整个 AS)。
控制入站流量(Inbound Traffic):在本地 AS 的路由发送方向(Export)干预属性。优先选择 AS_Path Prepend(增加对方 AS 路径长度)或 MED(针对邻居 AS 多入口)。
谨慎使用 Preferred-Value:
Preferred-Value 虽然生效快、配置简单,但因为它无法传递,容易在大型 AS 内部引发流量非对称路径(Asymmetric Routing)甚至次优路由。在大中型网路中,应优先利用 Local_Preference 和路由策略(Route-Policy)统一 AS 内部的选路逻辑。策略变更的无缝平滑切换:
修改路由策略或 BGP 属性后,避免使用硬重置命令(reset bgp)导致 TCP 会话中断。现网应普遍使用软重置(Soft Reconfiguration / Route Refresh):# 华为软重置刷新策略 <R4> refresh bgp all import软重置可以在不中断 TCP 179 端口会话的前提下,促使对等体重新发送 UPDATE 报文,使最新的路由策略平滑生效。