
1. 项目概述理解BGP的“足迹”与“信任链”在互联网这个由数万个自治系统AS构成的庞大网络中边界网关协议BGP扮演着“全球路由导航系统”的角色。它不负责计算最短路径而是专注于在自治系统之间传递和选择最佳路径。在这个过程中BGP需要一套严谨的“评判标准”来决定如何走而AS_Path属性正是这套标准中最核心、最基础也最容易被误解的“路径足迹”记录。简单来说AS_Path就是一张记录了某条路由从起源AS一路经过哪些中间AS最终到达你这里的“护照签证页”。每经过一个AS这个AS的编号就会被像盖章一样按顺序添加到路径列表的前面。这个看似简单的列表却承载着三大核心使命防环、选路和策略控制。防环是它的“本职工作”BGP路由器看到自己的AS号出现在某条路由的AS_Path里就会直接丢弃该路由这是BGP赖以生存的无环基础。选路则是它的“高级应用”在其它属性如Local_Preference、MED相同的情况下AS_Path最短的路径通常会被优选这符合“经过的中间人越少路径可能越优”的直觉。而策略控制则是网络工程师施展魔法的舞台通过精心地添加、删除或修改AS_Path可以灵活地引导或拒绝流量的流向。很多刚接触BGP的朋友容易把AS_Path简单地理解为“跳数”类似于IGP协议里的度量值Metric认为它越短越好。这个理解虽然在实际选路中常常成立但却忽略了其本质是一个有序的AS编号序列以及背后复杂的策略交互。尤其是在涉及路由聚合、联盟Confederation、路由反射器Route Reflector等场景时AS_Path的行为会变得微妙。理解AS_Path不仅是理解BGP协议本身的关键更是构建稳定、可控、高效互联网络的基础。无论你是正在备考认证的网络工程师还是负责运维大型网络架构的专家透彻掌握AS_Path的运作机制和实战应用都是不可或缺的一课。2. AS_Path属性深度解析结构、类型与运作原理2.1 AS_Path的底层数据结构与表现形式AS_Path在BGP更新消息Update Message中是一个必遵属性Well-known mandatory attribute。它的数据结构本质上是一个有序列表列表中的每个元素称为一个路径段Path Segment。每个路径段都有一个类型字段和一个或多个AS编号序列。最常见的路径段类型有两种AS_SEQUENCE这是最标准的类型。它表示路径段中的AS编号是按严格的传输顺序排列的。列表中的第一个AS编号是最近经过的AS即上一跳AS最后一个AS编号是最早经过的AS即起源AS。当你在路由器上查看BGP表时显示的通常就是这种类型。例如100 200 300表示这条路由起源于AS 300先传给AS 200再传给AS 100最后传到了你这里。AS_SET这是一个无序的AS编号集合。它主要用于路由聚合Aggregation场景。当执行聚合时来自多条明细路由的AS_Path信息会被合并。为了防环需要保留这些原始AS的信息但顺序已无意义因此将它们放入一个AS_SET中。在选路时无论AS_SET里包含多少个AS编号其长度通常被视为1具体行为可能因厂商和设备软件版本而异这是一个重要的实操细节。在命令行界面我们通常看到的是简化表示。例如Router# show ip bgp Network Next Hop Metric LocPrf Weight Path * 10.1.1.0/24 192.168.1.1 0 0 100 200 300 i这里的Path列显示为100 200 300 i。其中100 200 300就是AS_SEQUENCE末尾的i表示起源属性Origin为IGP通常通过network命令注入这是一个附加信息帮助我们理解路由的源头。2.2 AS_Path在路由传递过程中的动态更新机制AS_Path不是一成不变的它在路由传递的每一个EBGP外部BGP对等体之间都会发生关键变化。这个更新规则是理解BGP环路预防和路径选择的基石。核心规则当一台BGP路由器将一条路由通告给它的EBGP对等体时它必须将自己的AS号添加到AS_Path列表的最前面最左端。让我们通过一个具体场景来跟踪这个过程起源在AS 300中路由器通过network命令将路由10.1.1.0/24注入BGP。此时这条路由的AS_Path在AS 300内部是空的或者在某些实现中显示为本地AS号取决于查看方式其起源属性被标记。第一次传递AS 300的路由器将这条路由通告给它的EBGP邻居位于AS 200的路由器。在发出更新消息前AS 300的路由器会将自己的AS号300添加到AS_Path中。AS 200的路由器收到后在其BGP表中该路由的AS_Path变为300。第二次传递AS 200的路由器决定将这条路由继续通告给它的EBGP邻居位于AS 100的路由器。同样在发出前AS 200的路由器将自己的AS号200添加到AS_Path的最前面。AS 100的路由器收到后其BGP表中该路由的AS_Path变为200 300。最终状态AS 100的路由器看到的路径200 300清晰地表明要去往10.1.1.0/24数据包需要先经过AS 200再经过AS 300。关键注意事项这个“添加自己AS号”的规则仅适用于EBGP会话。在IBGP内部BGP对等体之间传递路由时AS_Path不会被修改。这是BGP的另一个基本原则在同一个AS内部所有路由器被认为是一个统一的决策实体因此不需要通过修改AS_Path来防环。IBGP的防环依赖于其他机制比如从IBGP学到的路由不会传递给另一个IBGP对等体除非使用路由反射器。2.3 AS_Path长度计算与BGP最佳路径选择BGP选择最佳路径时会遵循一个严格的决策过程通常被称为“BGP Best Path Selection Algorithm”。AS_Path长度是其中的一个关键比较步骤通常排在第三步在比较权重Weight、本地优先级Local Preference之后。AS_Path长度的计算规则如下统计AS_SEQUENCE类型路径段中AS编号的个数。如果存在AS_SET则无论其中包含多少个AS编号通常计为1。这是需要特别注意的点因为不同的路由器厂商或软件版本可能有细微差别但主流实现如Cisco IOS/XE默认将AS_SET长度计为1。将上述两部分的数量相加得到AS_Path长度。举例说明路径A:100 200 300(三个AS_SEQUENCE) - 长度 3路径B:100 200 {400,500,600} 300(两个AS_SEQUENCE 一个AS_SET) - 长度 2 1 3路径C:100 200- 长度 2在这种情况下BGP会选择AS_Path最短的路径C。为什么AS_Path短通常更优这基于一个合理的网络假设数据包经过的自治系统越少可能遇到的策略控制点、潜在拥塞点或故障点就越少端到端的延迟和不确定性也可能更低。因此“最短AS_Path”成为一个简单有效的默认优选准则。然而这不是绝对的。网络管理员完全可以通过设置更高的Local Preference本地优先级或修改权重Weight来优先选择AS_Path更长的路径以实现流量工程或备份目的。AS_Path长度只是一个决策因子其优先级可以被更高权重的属性覆盖。3. AS_Path在高级网络场景中的应用与变形3.1 路由聚合Aggregation中的AS_Path处理与AS_SET当我们需要将多条连续或非连续的明细路由汇总成一条更粗粒度的聚合路由超网路由并通告给其他AS时就涉及到路由聚合。聚合能显著减少全球BGP路由表的大小但会丢失明细路由的路径信息这可能会破坏AS_Path的防环功能。问题场景假设AS 100从AS 200收到了10.1.0.0/24和10.1.1.0/24从AS 300收到了10.1.2.0/24。AS 100决定聚合为10.1.0.0/22并通告给AS 400。如果AS 100在聚合时简单地生成一个空的AS_Path或只包含自己AS号的AS_Path那么AS 400收到聚合路由10.1.0.0/22路径为100。如果AS 400的某个下游网络比如AS 500恰好有更具体的10.1.1.0/24路由并传回给AS 400AS 400可能会错误地认为通过AS 100路径100和通过下游路径可能更长是两条不同的路径甚至可能形成环路。解决方案使用AS_SET。在配置聚合时可以指定包含原始AS_Path信息。路由器会将所有明细路由的AS_Path中的AS编号提取出来去除重复项然后放入一个AS_SET中再与聚合路由自己的AS号作为AS_SEQUENCE一起组成新的AS_Path。配置示例以Cisco IOS为例router bgp 100 aggregate-address 10.1.0.0 255.255.252.0 summary-only as-setsummary-only抑制所有明细路由的通告只通告聚合路由。as-set关键参数。生成包含原始AS信息的AS_SET。聚合后的AS_Path可能看起来像100 {200,300}。对于AS 400来说它看到这条路由来自AS 100并且其来源关联着AS 200和AS 300。如果AS 400试图将去往10.1.1.0/24的流量发回给AS 100而AS 100的明细路由又指向AS 200就可能形成环路。此时AS 100的路由器在检查AS_Path时会发现自己的AS号100在AS_SEQUENCE中而目标IP10.1.1.0/24匹配聚合路由10.1.0.0/22。更重要的是当它需要将流量转发给AS 200时它会检查AS 200是否在AS_Path的AS_SET中。发现AS 200在AS_SET中这就构成了一个环路迹象。虽然BGP标准对AS_SET的防环处理不如AS_SEQUENCE严格有些实现可能不会因此丢弃但它提供了重要的环路预警信息。实操心得在实际工程中出于简化路径和避免不可预测选路行为的考虑很多网络会在进行聚合时故意不使用as-set选项。但这要求网络管理员对聚合范围外的路由可达性有清晰的把握确保不会因此引入路由黑洞或环路。这是一个典型的权衡减少路由表大小 vs. 保留路径信息的完整性。3.2 联盟Confederation与路由反射器场景下的AS_Path行为在大型AS内部为了解决IBGP全互联的需求引入了联盟和路由反射器RR两种技术。它们对AS_Path的处理有特殊之处。联盟Confederation 联盟将一个大的AS划分成多个小的“成员AS”Sub-AS。在联盟内部这些成员AS之间使用一种特殊的EBGP Confederation eBGP会话通信。为了不让外部AS感知到内部的分割联盟引入了两种特殊的AS_Path段类型AS_CONFED_SEQUENCE类似于AS_SEQUENCE但记录的是成员AS的路径。AS_CONFED_SET类似于AS_SET但用于成员AS的集合。关键规则当路由在联盟内部的成员AS之间传递时添加的是成员AS号并放入AS_CONFED_SEQUENCE。当路由从联盟出口通告给真正的外部EBGP对等体时所有联盟内部的AS_CONFED_SEQUENCE/SET信息会被完全剥离对外只显示联盟的公共AS号。这样外部世界看到的AS_Path就像是从一个统一的AS发出来的一样保持了AS_Path的简洁性和防环功能。路由反射器Route Reflector, RR RR是另一种解决IBGP全互联的方案。在RR架构中AS_Path在IBGP会话中传递时不会被修改这与标准的IBGP行为一致。RR只是将从某个客户端Client或非客户端Non-Client学到的路由反射给其他客户端或非客户端它本身不会在AS_Path中添加自己的AS号因为它不是AS边界路由器。因此在纯RR环境中AS_Path在整个AS内部保持不变直到路由被通告给外部EBGP对等体。3.3 利用AS_Path进行策略控制正则表达式与路由策略AS_Path不仅是BGP自动计算和使用的属性更是网络工程师实施流量策略的强大工具。通过路由策略Route-map我们可以匹配、修改AS_Path从而影响BGP的选路和路由传播。核心工具AS_Path访问列表AS-Path Access List这通常通过正则表达式Regex来实现。正则表达式允许我们灵活地匹配AS_Path字符串中的特定模式。常用AS_Path正则表达式示例^$匹配空的AS_Path。通常用于匹配本AS内起源的路由。^100$匹配AS_Path恰好为100的路由即直接从AS 100学来的。_100_匹配AS_Path中包含100的路由无论出现在什么位置。下划线_匹配一个空格、字符串开头或结尾。^200_匹配AS_Path以200开头的路由即上一跳是AS 200。_300$匹配AS_Path以300结尾的路由即起源AS是300。^(100|200)匹配AS_Path以100或200开头的路由。实战策略案例过滤特定AS传来的路由不想接收来自AS 666的所有路由。ip as-path access-list 10 deny _666_ ip as-path access-list 10 permit .* router bgp 100 neighbor 1.1.1.1 filter-list 10 in设置本地优先级Local Preference对于从AS 200传来路径以200开头的路由给予更高的优先级使其成为出口首选。route-map SET_LP permit 10 match as-path 20 set local-preference 200 route-map SET_LP permit 20 ip as-path access-list 20 permit ^200_ router bgp 100 neighbor 1.1.1.1 route-map SET_LP inAS_Path预挂Prepending这是最常用的流量工程手段之一。通过向AS_Path中重复添加自己的AS号人为地增加路径长度使该路径对其他AS的吸引力降低从而将入站流量引导至其他入口点。route-map PREPEND_OUT permit 10 set as-path prepend 100 100 100 router bgp 100 neighbor 2.2.2.2 route-map PREPEND_OUT out通告给邻居2.2.2.2的路由其AS_Path会从原来的100 ...变成100 100 100 100 ...长度增加了3。其他AS在比较从不同入口例如另一个入口没有预挂学到到同一AS 100的路由时会选择AS_Path更短的路径从而实现了流量的分流。重要注意事项AS_Path预挂只影响入站流量其他AS如何将流量发送到你。它不影响你网络的出站流量方向。出站流量方向由你本地的BGP选路结果如Local Preference, MED, AS_Path长度等决定。4. 常见问题排查与AS_Path相关故障诊断AS_Path相关的配置错误或理解偏差常常导致路由无法传递、环路或次优路径选择。以下是一些典型场景和排查思路。4.1 路由未被优选AS_Path长度非预期现象你从两个不同的ISPISP A在AS 200 ISP B在AS 300学习到了去往同一目的网络的路由你期望流量走ISP A但实际上BGP选择了ISP B的路径。排查步骤检查BGP表使用show ip bgp network命令查看两条路由的所有属性。Router# show ip bgp 10.2.2.0/24 BGP routing table entry for 10.2.2.0/24, version 42 Paths: (2 available, best #2) Advertised to update-groups: 1 200 400 500 600 1.1.1.1 from 1.1.1.1 (10.0.0.1) Origin IGP, metric 0, localpref 100, valid, external 300 400 2.2.2.2 from 2.2.2.2 (10.0.0.2) Origin IGP, metric 0, localpref 100, valid, external, best分析选路过程首先比较权重Weight都是0默认。比较本地优先级Local Preference都是100默认。比较路径起源Origin都是iIGP。比较AS_Path长度第一条路径200 400 500 600长度为4第二条路径300 400长度为2。因此BGP优选了第二条路径来自AS 300尽管它可能不是你期望的。解决方案调整Local Preference这是最干净的方法。在从ISP AAS 200学来路由的入方向Route-map上设置更高的Local Preference如150。route-map LP_FROM_ISP_A permit 10 set local-preference 150 router bgp 100 neighbor 1.1.1.1 route-map LP_FROM_ISP_A in使用AS_Path预挂如果你无法控制入方向例如你是ISP的客户可以在通告给ISP B的出方向上进行AS_Path预挂让你通过ISP B通告的路由对其他AS显得更长从而减少从ISP B来的入站流量。但这需要ISP B的配合或在你们之间的会话上配置。4.2 路由丢失或环路AS_Path过滤与防环机制生效现象从某个邻居学不到预期的路由或者路由在BGP表中显示为“inconsistent”不一致或直接被抑制。排查步骤检查AS_Path过滤列表Filter List确认是否配置了neighbor ip filter-list acl in/out并且AS-Path访问列表可能意外拒绝了所需路由。检查AS_Path中的私有AS号私有AS号64512-65534通常不应出现在全球互联网路由中。许多运营商会配置策略自动过滤掉包含私有AS号的路由更新。如果你在内部测试中使用了私有AS号并试图将其通告给上游ISP路由可能会被过滤掉。解决方案是在通告给ISP前使用neighbor ip remove-private-as命令移除私有AS号。验证AS_Path防环最经典的环路场景是你从EBGP邻居收到一条路由其AS_Path中包含了你自己AS的编号。BGP路由器会静默丢弃这条路由。使用debug ip bgp updates命令需谨慎在生产环境使用可以观察到路由更新被丢弃的原因。在日志中可能会看到“denied due to AS-PATH contains our own AS”之类的信息。检查聚合路由的AS_SET如果你配置了带as-set的聚合路由并且发现某些特定流量被错误地丢弃或环路需要检查明细路由的AS_Path是否与聚合路由的AS_SET形成了环路条件。这可能需要更细致的路由跟踪和逻辑分析。4.3 路径选择不符合预期联盟、RR环境下的特殊考量现象在部署了联盟或大型路由反射器架构的网络中BGP选路结果看起来很奇怪例如没有选择物理上更近的路径。排查要点联盟环境确认你查看的是正确的AS_Path。在联盟内部使用show ip bgp看到的路径可能包含AS_CONFED_SEQUENCE通常显示在括号()内。例如(65001 65002) 200 300。在比较路径长度时括号内的联盟成员AS编号通常不计算在AS_Path长度内具体取决于设备厂商和比较阶段。你需要清楚你的设备在Best Path算法中如何处理联盟AS号。最佳实践是查阅厂商文档。路由反射器环境记住RR不修改AS_Path。因此在AS内部所有路由器包括RR客户端看到的通往外部目的地的AS_Path都是一样的。选路差异可能源于其他属性如IGP度量值到下一跳的代价、多出口鉴别器MED或路由器ID的比较。确保RR正确地传递了所有路径属性并且客户端有正确的下一跳可达性信息通常通过next-hop-self配置解决。4.4 诊断命令与信息查看技巧熟练掌握以下命令是诊断AS_Path问题的关键show ip bgp查看BGP表这是最基础的信息源关注Path列。show ip bgp network查看特定路由的详细信息包括所有路径及其完整属性。show ip bgp neighbors ip advertised-routes和show ip bgp neighbors ip received-routes分别查看向特定邻居通告的路由和从该邻居收到的路由在应用入方向策略之前。这对于验证策略是否生效至关重要。show ip bgp regexp regex使用正则表达式在BGP表中搜索匹配特定AS_Path模式的路由。例如show ip bgp regexp ^200_查找所有从AS 200直接学来的路由。debug ip bgp updates在受控环境下开启BGP更新调试可以实时看到路由更新的接收、处理和丢弃原因。生产环境慎用。show ip as-path-access-list查看配置的AS-Path访问列表。理解AS_Path就是理解了BGP在广域网中绘制地图和制定交通规则的核心逻辑。它远不止一个简单的长度值而是融合了防环保障、路径度量和策略工具的复合属性。从基础的路径记录到高级的流量工程AS_Path贯穿了BGP设计与运维的始终。在实际网络中结合Local Preference、MED、Community等属性灵活运用AS_Path控制是构建高效、可靠、可控网络互联的关键技能。每一次对AS_Path的审视和调整都是对网络流量走向的一次精准导航。