首页 / 内容指南 / 当前文章

BGP 的 Weight、LOCAL_PREF、AS_PATH、ORIGIN、MED 和 Community 有什么区别?

发布于 2026-08-26 · routecfg.com 编辑部

BGP 选路经常被概括成“Weight 越大越优、Local Preference 越大越优、AS Path 越短越优、MED 越小越优”,但这只是特定实现中常见的比较片段,不是所有设备都遵循的完整通用算法。Weight 通常是厂商本地属性,LOCAL_PREF、AS_PATH、ORIGIN 与 MED 是 BGP 路径属性,Community 则主要是供策略匹配的标签。它们传播范围、修改主体和用途不同,必须先确认路由在哪个自治系统、通过哪个会话学习,再判断某个值能否影响预期方向的流量。

本文目录(17 节)

核心区别速查

↔ 表格可左右滑动查看完整内容
属性标准状态典型偏好方向传播范围主要用途
Weight常见厂商本地属性,非 RFC 4271 路径属性通常越大越优仅当前路由器单机入口选路
LOCAL_PREF公认属性越大越优通常在本 AS 的 iBGP 内传播决定本 AS 从哪里出站
AS_PATH公认必遵属性常见实现偏好更短路径随 eBGP 通告累积防环与路径策略
ORIGIN公认必遵属性常见实现偏好 IGP、再 EGP、再 INCOMPLETE随路由传播表示前缀如何进入 BGP
MED可选非传递属性通常越小越优通常提供给相邻 AS建议邻居从哪个入口进入本 AS
Community可选传递属性本身无固定高低可跨多跳传播,受策略控制给一组路由打标签并触发策略

先分清控制的是出站还是入站

一个自治系统有两条上游链路时,“本 AS 发往互联网走哪条链路”是出站选择;“互联网进入本 AS 走哪条链路”是入站选择。LOCAL_PREF 和本地 Weight 直接影响本 AS 的最佳路径,适合控制出站。MED、AS_PATH prepend 和发送给上游的 Community 常用于影响邻居如何选择进入本 AS 的路径,但邻居有自己的策略,不能保证完全按你的意图执行。

BGP 路由通告传播的是可达性和路径属性,不是为每个远端网络下发强制指令。邻居可能覆盖 MED、设置自己的 LOCAL_PREF、过滤 Community 或采用与本地不同的比较规则。因此,任何入站工程都需要通过双方约定和实际观测验证。

Weight:只在当前设备生效的本地偏好

Weight 常见于部分网络操作系统,但它不是 RFC 4271 定义的 BGP 路径属性。典型实现中,Weight 数值越大越优,而且不会通告给任何 BGP 邻居。即使同一 AS 内另一台路由器通过 iBGP 收到相同前缀,它也不会继承第一台路由器设置的 Weight。

这使 Weight 适合单台路由器上的快速本地决策,例如边界设备只希望自己优先使用某个邻居。但它不适合表达全 AS 一致的出口策略。若多台边界路由器各自配置 Weight,可能对同一前缀得出不同最佳路径,形成不对称转发、次优路径,甚至在错误的 IGP 与 iBGP 设计下增加环路风险。

由于 Weight 属于实现扩展,名称、默认值、是否在选路最前比较以及配置命令都必须查阅设备厂商和软件版本文档。不能把某一厂商的行为当作 BGP 标准要求。

LOCAL_PREF:本 AS 范围内的出口优先级

RFC 4271 定义 LOCAL_PREF 为公认属性。BGP 发言者向内部对等体发送 UPDATE 时应携带它,数值更高的 preference 必须被优先选择。它用于在一个自治系统内部传播出口偏好。

例如 AS 65000 同时连接运营商 A 和 B,可以在从 A 学到的路由上设置 LOCAL_PREF 200,从 B 学到的路由设置 100。只要内部策略保持一致,AS 内路由器通常会优先经 A 出站。这比逐台设置 Weight 更适合形成全网一致决策。

LOCAL_PREF 通常不发送给普通 eBGP 邻居。它表达“我的 AS 如何看待这条外部路由”,不是要求下游 AS 采用相同数值。若要让客户通过 Community 请求上游设置 Local Preference,需要双方预先约定 Community 语义,并确认上游确实实施该策略。

AS_PATH:经过哪些自治系统,也是防环基础

AS_PATH 是 RFC 4271 定义的公认必遵属性,记录路由通告经过的自治系统序列或集合。eBGP 发言者向外部对等体传播路由时,通常会把本 AS 号加入路径;收到包含自身 AS 的路径时可识别自治系统级环路。

常见 BGP 实现会在更前面的策略条件相同后偏好更短的 AS_PATH,但“字符看起来更短”不一定等于比较时的路径长度。AS_SET、联盟相关段、私有 ASN 移除和实现选项都会影响计算。必须查看设备输出中解析后的路径,而不是只数配置文本。

AS_PATH prepend 通过重复添加自身 AS 号,使某条入站路径看起来更长,从而降低远端选择概率。但远端 LOCAL_PREF 通常可以压过路径长度,远端也可能过滤过度 prepend 或采用其他商业关系策略。prepend 是影响手段,不是确定性流量开关。

ORIGIN:前缀如何被注入 BGP

ORIGIN 是公认必遵属性,表示路由信息如何进入 BGP。RFC 4271 定义 IGP、EGP 和 INCOMPLETE 三种值。这里的 IGP 并不意味着数据包当前通过 OSPF 或 IS-IS 转发;它描述该前缀被 BGP 起源过程标记的来源类型。

常见实现的选路中,IGP 优于 EGP,EGP 优于 INCOMPLETE,但通常只有在更高优先级属性相同时才比较。通过 BGP network 方式发布的前缀常显示 IGP origin,通过重分发进入 BGP 的路由常显示 INCOMPLETE,具体仍取决于实现与策略。

不要为了让路径更优而随意改写 ORIGIN。它的影响范围广,且通常不是流量工程的首选旋钮。更清晰的做法是用 LOCAL_PREF、明确的策略和双方约定的 Community 表达意图。

MED:向相邻 AS 建议入口

MULTI_EXIT_DISC(MED)是可选非传递属性。当两个 AS 有多个互联点时,一个 AS 可以向邻居通告不同 MED,建议邻居优先从哪个入口把流量送进来。常见实现偏好较小的 MED。

MED 的作用类似“同一邻居 AS 提供的入口成本建议”,但默认比较范围和缺失 MED 的处理存在实现差异。很多系统默认只比较来自相同邻居 AS 的 MED,也可能提供 always-compare-med、deterministic-med 等选项。不同设置会改变结果,甚至使路由到达顺序影响最佳路径。

RFC 4271 允许实现基于本地配置修改或移除从 eBGP 收到的 MED,但要求在计算 preference 和选路前完成。邻居没有义务完全尊重你的 MED;它可以覆盖该值或先依据 LOCAL_PREF 和商业关系做决定。

Community:策略标签,不是固定优先级

RFC 1997 定义 BGP Communities 属性,用四字节值给一组目的前缀标记共同属性。Community 本身没有“越大越优”或固定选路含义。路由器只有在策略中匹配某个 Community,并执行设置 LOCAL_PREF、过滤、限制传播等动作时,它才影响路由行为。

经典 Community 是可选传递属性,可以随路由跨越多个 BGP 对等体,但中间 AS 可以按本地政策增加、删除或改写。常见表示法为 ASN:value,而早期编码中的 ASN 部分只有 16 位,面对四字节 ASN 时容易造成管理和命名限制。

RFC 8092 定义 Large Communities,用三个四字节字段表达全局管理员和两个本地数据部分,适用于包括四字节 ASN 在内的所有 ASN。它仍是“信号与标签”,并不自带动作;每个运营商必须公布并实现自己的语义。

三个著名的标准 Community

RFC 1997 定义了具有全局意义的值。NO_EXPORT 表示携带该 Community 的路由不得通告到 BGP confederation 边界之外;独立 AS 可视为自身就是一个 confederation。NO_ADVERTISE 表示不得向其他 BGP 对等体继续通告。NO_EXPORT_SUBCONFED 用于限制向外部对等体传播,包括联盟内其他成员 AS 的外部会话。

这些名称容易被日常语言误解。例如 NO_EXPORT 不是“不离开当前路由器”,而是与 AS 或联盟边界有关;NO_ADVERTISE 才是更严格的不向其他 BGP 邻居继续通告。部署前应依据当前 RFC 更新与设备实现测试传播行为。

RFC 8642 进一步明确,处理标准 Community 的策略应在 eBGP 输出阶段生效,路由器不得在未显式配置的情况下覆盖标准 Community 的语义。即便如此,运营排查仍应检查实际 Adj-RIB-Out,而不是只看接收路由上的标签。

Community 与 Extended Community、Large Community 的区别

经典 Community 适合简单分组和值匹配。Extended Community 使用不同编码并可携带类型信息,常用于 VPN Route Target、Site of Origin 等扩展用途。Large Community 提供三个 32 位字段,解决四字节 ASN 和更大策略命名空间需求。

三者不是仅仅长度不同的字符串。它们有不同的路径属性类型、编码、传递规则和应用生态。设备策略中用于匹配 standard、extended、large community 的命令也通常不同。把 65000:100 直接改写成三个字段,并不能自动保留所有语义。

BGP 选路顺序为什么不能只背一张表

RFC 4271 定义决策过程的阶段和若干必须遵守的规则,但许多工程细节由本地策略和实现决定。常见厂商会依次比较 Weight、LOCAL_PREF、本地产生、AS_PATH、ORIGIN、MED、eBGP/iBGP、到 NEXT_HOP 的 IGP 成本等条件,但具体顺序、默认值、是否比较 MED,以及后续 tie-breaker 均可能不同。

策略导入阶段也可能先修改属性或直接把路由标记为不合格。只有进入候选集合的路径才参与后续比较。因此,“这条 AS_PATH 更短却没有胜出”不一定是故障,更高优先级的 Local Preference、不可达 NEXT_HOP、RPKI 策略或过滤规则都可能已经决定结果。

可靠排查应获取当前软件版本的选路文档和设备给出的 best-path reason,并检查入站策略处理后的属性值。

一个双上游例子

假设 AS 65000 从运营商 A 和 B 都收到 203.0.113.0/24:

路径 A:LOCAL_PREF 200,AS_PATH 64500 64496,MED 100
路径 B:LOCAL_PREF 100,AS_PATH 64497,MED 0

虽然 B 的 AS_PATH 更短、MED 更小,LOCAL_PREF 较高的 A 通常仍会成为本 AS 出站最佳路径,因为实现一般先比较 LOCAL_PREF。若只查看 AS_PATH 和 MED,就会得到错误结论。

现在 AS 65000 希望远端流量优先从 A 进入。修改本地 LOCAL_PREF 不会直接影响远端。可以向同一个相邻 AS 通告不同 MED,或按照上游文档附加能让上游设置 LOCAL_PREF 的 Community;也可以在备用线路 prepend AS_PATH。但最终效果依赖远端策略,需要通过 Looking Glass、路由采集器、双向流量与上游确认验证。

属性修改的推荐边界

Weight 用于单设备临时或明确的本地选择;全 AS 出口策略优先使用一致的 LOCAL_PREF。AS_PATH prepend 用于温和影响外部路径,不要无限重复。MED 适合与同一邻居 AS 的多入口协商。Community 用于把业务意图与具体动作解耦,但必须建立命名、所有权和清理规则。

每项策略都应写明作用方向、匹配前缀、匹配邻居、修改属性、预期最佳路径和回滚条件。路由策略变更前应模拟导入与导出结果,检查是否意外影响更具体前缀、默认路由、IPv6 地址族或路由反射传播。

排查“属性设置了却没生效”

第一,确认查看的是接收前、策略处理后、Loc-RIB 还是发送给邻居的路由。第二,确认该路径具有有效 NEXT_HOP 且没有被过滤。第三,核对更高优先级属性是否已决定胜负。第四,检查属性传播范围:Weight 不离开本机,LOCAL_PREF 通常不离开本 AS,MED 常不跨越下一个 AS,Community 可能被邻居删除。

第五,确认比较的是相同前缀。最长前缀匹配发生在转发表查找阶段,/24 与 /23 不会因为 BGP 属性不同而作为同一条前缀竞争。第六,检查 address-family、VRF、路由反射器和联盟上下文。第七,用实际通告视图验证,不要仅凭配置文件推断结果。

常见误区

“MED 最小一定赢”忽略了更高优先级属性和比较范围。“AS_PATH 短一跳一定赢”忽略 LOCAL_PREF、策略与路径可用性。“Community 数值越大越优”则把标签当成度量值。Community 只有在策略解释它时才产生动作。

“改 LOCAL_PREF 可以让互联网从指定线路进入”混淆出站与入站。“Weight 能同步全 AS 策略”忽略其本机范围。“所有厂商选路顺序完全相同”也不成立,应以目标实现与版本证据为准。

FAQ

1. Weight 是标准 BGP 属性吗?

通常不是。它是部分厂商实现提供的本地属性,不在 RFC 4271 的标准路径属性列表中,而且通常只在当前路由器生效。

2. LOCAL_PREF 越大越优还是越小越优?

RFC 4271 要求更高的 preference 被优先选择。它通常用于一个 AS 内部的出口选择。

3. MED 为什么设置更小后没有改变最佳路径?

可能是更高优先级属性已决定结果、路径来自不同邻居 AS 而默认不比较 MED、邻居覆盖了 MED,或实现启用了不同的 MED 比较选项。

4. AS_PATH prepend 能保证备用线路不被使用吗?

不能。远端 AS 可以先依据 LOCAL_PREF 或商业策略选择路径,也可能忽略你期望的长度差异。prepend 只能影响概率,不能强制远端决策。

5. Community 会自动传播到整个互联网吗?

经典 Community 是可选传递属性,但每个 AS 都可按策略修改、删除或过滤。是否继续传播取决于邻居政策。

6. NO_EXPORT 与 NO_ADVERTISE 有什么区别?

NO_EXPORT 限制路由越过 AS 或 confederation 边界;NO_ADVERTISE 要求不向任何其他 BGP 对等体继续通告,后者范围更严格。

7. Large Community 为什么有三个数字?

RFC 8092 定义全局管理员字段和两个本地数据字段,每个字段都是四字节值,便于四字节 ASN 使用并扩大策略命名空间。

8. 如何确认一条 BGP 路由为什么胜出?

查看设备对该前缀的所有候选路径、策略处理后的属性、NEXT_HOP 可达性和 best-path reason,并对照当前软件版本的选路文档,而不是只比较一两个字段。

参考来源