在大型 IP 网络与数据中心骨干网架构中BGPBorder 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_PathAS 路径、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 SummaryNetwork 宣告Import-route 引入手动汇总Manual Summary自动汇总Auto SummaryNetwork 宣告Import-route 引入4. AS_PathAS 路径列表协议特性与行为属性归类公认必遵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 路由表中的。三种起源类型及优先级iIGP优先级最高。表示路由是通过在 BGP 视图下执行 network 命令直接宣告进 BGP 的来源清晰可信。eEGP优先级居中。表示路由是通过早期 EGPExterior 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. MEDMulti-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 值。如果两条路由来自不同的外部 ASBGP 默认不比较它们的 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 MetricCost完全相同。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-ValuePreferred-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 报文使最新的路由策略平滑生效。