
有人问过我一模一样的问题两次一次是在期末复习群里一次是带新人做实验的时候。问题都指向同一处——RIP 报文里明明有个字段叫自治系统那它跟 BGP 里讲的 ASAutonomous System自治系统是不是同一个概念这个问题看着小但它卡住的人特别多。计算机网络里自治系统这个词出现的位置太散讲 RIP 的时候出现一次讲 BGP 的时候又出现一次讲路由聚合的时候还会绕回来。如果只是把定义背下来考试也许能过但只要遇到稍微绕一点的题——比如给一张 AS_PATH 让你判断选路或者问为什么 AS 内部和 AS 之间必须用两套协议——就会立刻露馅。这篇我打算按从业者的路子把 AS 拆干净它到底是谁的边界、编号怎么来的、为什么要在 IGP 和 BGP 之间切一刀、eBGP 和 iBGP 差别在哪、那些路由属性背后藏着什么商业逻辑最后再落到怎么用现成的工具亲眼看到 AS 的跳变以及期末、408、软考里最容易踩的几个坑。计算机网络的初学者、正在复习的学生、准备软考和考研的同学还有刚开始碰路由器配置的运维新人都能从里面拿到可以直接用的东西。1. 从一个被问烂的问题切入RIP 里的自治系统和 BGP 里的 AS 不是一回事先把最容易混的地方钉死。RIP 报文头部确实有一个 2 字节的字段老教材里译作自治系统号Address Family Identifier 之外的那个 AS 字段在 RIPv1 里出现过。但它在 RIP 的实际运行中几乎不被使用大家做实验的时候填什么值都不影响路由收敛。这个字段的设计初衷是当年想让 RIP 有能力区分我这条路由是给哪个路由域用的后来因为 RIP 本身只适合小规模网络这个字段就变成了历史遗留。而 BGP 里的 AS指的是一组由同一个管理实体运营、对外使用统一路由策略的网络集合。注意三个关键词同一个管理实体、统一路由策略、网络集合。三者缺一不可。我见过最典型的误答是这样的一个 AS 就是一个局域网。 不对。一个校园网可以是一个 AS也可以被切成三个 AS反过来一家运营商把三个省的网络合并成对外一个 AS 号也没问题。判断标准不是是不是同一个物理网络而是对外是不是同一套策略、同一个管理者。这个区别直接决定了两者在协议里的地位完全不同对比项RIP 报文里的 AS 字段BGP 里的 AS作用历史字段实际不使用路由归属、防环、选路的核心依据传递方式随 RIP 报文携带通过 BGP OPEN 报文的 My AS 字段和 UPDATE 的 AS_PATH 携带是否影响收敛基本不影响直接影响AS_PATH 重复即丢弃教材位置内部网关协议的细节外部网关协议的主体再补一个常见的术语歧义。EGP 这三个字母有两个意思一是指外部网关协议这一类协议Exterior Gateway Protocol二是指历史上那个具体的协议 EGPRFC 827 和 RFC 904。后者早就被淘汰了现在互联网上跨 AS 的路由交换几乎只剩 BGP 一个协议。所以当你看到EGP的时候先判断语境如果是分类讨论它指一类如果点名某个协议那是老古董。考试里这两个意思都出现过别慌看上下文。2. AS 的定义、编号与分类边界究竟靠什么划出来定义讲完了接着讲边界是怎么被制度化的。AS 的权威定义写在 RFC 1930 里核心一句话就是前面说的单一管理实体 统一路由策略。为了在全球范围内唯一标识每个 AS就有了ASNAutonomous System Number自治系统号。ASN 的分配链条是IANA 保留顶层往下交给各个区域互联网注册管理机构RIR再由 RIR 分配给运营商、企业、数据中心等实体。早期 ASN 是 16 位整数取值范围 1 到 65535但有几个区段有特殊含义区段含义说明0保留不可用多用于某些特殊标记场景1 到 64511公有 ASN全球可路由需要在 RIR 申请64512 到 65534私有 ASN类似私有 IP仅限内部使用不应出现在公网 AS_PATH 中64535 到 65535保留65535 保留给特殊用途23456AS_TRANS4 字节 ASN 的过渡占位符见下文16 位最多也就六万多个号互联网长到 2010 年前后明显不够用了于是有了4 字节 ASNRFC 6793。它用 32 位表示书写上有两种方式一种是直接写十进制大数另一种叫 asdot形如1.10前面是高位、后面是低位。这里有个特别容易踩的坑——兼容性问题。老设备只认 2 字节字段遇到超过 65535 的 ASN 时无法表示就用 23456 这个 AS_TRANS 顶上真正的大号捎带在可选传递属性里。所以你在抓包里看到 23456 的时候别急着结论说这就是个普通 ASN它很可能只是个占位符。现在全球活跃的 ASN 数量在七万到八万这个量级而全球 BGP 路由表里的前缀数量已经到了九十几万条。这两个数字放一起看很有意思平均下来一个 AS 要宣告十几条前缀但实际分布是极度不均的——几个超大运营商和内容网络每家宣告上万条大量企业网只宣告一两条。按业务角色AS 大致可以分成几类这个分类比死记定义有用得多Stub AS末梢 AS只有一个出口只承载自己产生的流量不为别人中转。绝大多数企业网、校园网都属于这一类。它的路由策略极简单一条默认路由指出去就完事了。Multihomed AS多归属 AS有多个出口连到不同的上游但明确拒绝为别的 AS 中转流量。多归属的目的是冗余和负载分担不是做二道贩子。Transit AS中转 AS靠为别人转发流量赚钱也就是运营商的核心角色。这是策略最复杂的一类本地优先级、MED 这些属性主要是为它们设计的。再按商业身份分有 Tier 1无需向任何人付费即可到达全球、Tier 2、Tier 3以及近十年崛起的内容网络——它们自己的 AS 号里跑的主要是自家服务流量模型和传统运营商完全反过来。理解这一层后面讲路由策略时你会轻松很多。3. 域内 IGP 与域间 BGP为什么必须切成两套协议这是整篇里我最想讲透的一节因为它回答的是为什么而为什么才是真正记住知识点的钥匙。最朴素的疑问是既然都是路由器之间交换路由信息为什么不能一套协议通吃原因有三层缺一层都不充分。第一层是规模。一个 AS 内部的设备数量通常可控——几百台、几千台用 OSPF 或 IS-IS 这种链路状态协议做全局计算还能扛住。但跨 AS 的规模是整个互联网九十几万条前缀、七八万个参与者。链路状态协议要求每台路由器都掌握全网的拓扑数据库这个量级根本算不动。BGP 用的是路径向量path vector只交换我到某个前缀要经过哪些 AS不交换完整拓扑这才撑得住。第二层是策略。这是关键中的关键。IGP 的目标是算出一条最优路径度量值越短越好它不管你是谁。但 AS 之间的路由从来不是纯粹的技术问题这家运营商凭什么免费帮另一家转发流量两家对等互联的流量比例怎么平衡哪些前缀只给自己的客户这些问题 IGP 表达不了。BGP 靠一堆属性把策略偏好写进了协议本身让技术手段能承载商业意图。第三层是管理边界。每个 AS 是独立管理的你不可能让别家运营商的路由器参与你的 IGP 计算那等于把内部控制权交出去了。BGP 只交换可达性信息不暴露内部拓扑这个边界感是刻意设计的。所以分工非常清楚维度IGPOSPF / IS-IS / RIPEGPBGP作用范围AS 内部AS 之间以及大型网络内部算法类型链路状态 / 距离向量路径向量优化目标度量值最小技术最优策略最优商业最优承载协议各自独立跑在 IP 之上跑在 TCP 179 之上收敛速度秒级通常几十秒到分钟级规模上限数百到数千台全球BGP 跑在 TCP 之上这件事值得单独说一句。用 TCP 意味着它不用自己实现重传、确认、分片可靠性交给传输层自己专注做策略。这也是为什么 BGP 邻居关系能跨很多跳建立iBGP 尤其明显而 OSPF 邻居通常要求直连。一个实操上的注意事项IGP 和 BGP 不是替代关系是配合关系。BGP 只负责选出一条我想要的外部路由选完之后下一跳怎么走由 IGP 提供。这就是常说的BGP 负责选路IGP 负责到达下一跳。如果你配完 BGP 发现路由有了但流量不通八成是下一跳在 IGP 里不可达或者 iBGP 的下一跳没有做 next-hop-self。这个故障我见过太多次了。4. eBGP 与 iBGP同一条路由在边界上的两副面孔理解了内外的分工接着看 BGP 自己怎么分成两半用。eBGP外部 BGP跑在两个不同 AS 的路由器之间iBGP内部 BGP跑在同一个 AS 内部的路由器之间。同一套协议两种行为差异清单必须背下来配置和排错全靠它。对比项eBGPiBGP邻居关系不同 AS同一 AS默认 TTL1要求直连不限制可跨多跳收到路由后是否改 AS_PATH把自己的 ASN 加到最前面完全不改收到路由后是否改 NEXT_HOP改成自己默认行为默认不改需手动 next-hop-self能不能传给同类型的邻居可以从 iBGP 学到的不能传给另一个 iBGP 邻居需要全互联吗不需要逻辑上需要或用路由反射器联盟解决逐条解释一下背后的原因不然很容易记混。eBGP 默认 TTL 为 1是为了强制直连——防止有人在两个 AS 之间拉一条穿过第三方的隧道来偷路由。真要多跳就得显式配置 ebgp-multihop 并指定跳数。这个设计意图是安全不是限制。AS_PATH 的修改规则是防环的核心。eBGP 收到路由时把自己的 ASN 压进 AS_PATH 最前面接收方一看 AS_PATH 里已经有自己的号直接丢弃环路就断在这。iBGP 之所以不改是因为同一个 AS 内部改了没意义——大家都是同一个号改了反而破坏防环语义。iBGP 的水平分割规则是最容易让人懵的一条从 iBGP 邻居学到的路由不会再传给其他 iBGP 邻居。为什么因为 iBGP 靠 AS_PATH 防环而 AS_PATH 在内部不变一旦允许转传A 传给 B、B 传给 C、C 又传回 A环路无法被检测到。为了安全只能禁掉转传。代价是iBGP 邻居必须全互联n 台设备就是 n×(n-1)/2 条会话规模一大就爆炸。解决办法有两个路由反射器Route Reflector和联盟Confederation。前者指定几台设备作为反射点客户从反射器学到的路由可以被反射给其他客户后者把一个大 AS 切成若干子 AS内部跑类似 eBGP 的逻辑。实际网络里路由反射器用得更多几乎成了标配。NEXT_HOP 的处理也常出问题。eBGP 从外部学到路由下一跳是对方 AS 的边界地址进入本 AS 后内部路由器必须知道怎么到达这个外部地址否则路由是死的。所以边界路由器在向 iBGP 邻居通告时通常要配 next-hop-self把下一跳改成自己的地址——这个地址在自己的 IGP 里当然是可达的。忘了这一条现象就是BGP 表里有路由但转发不出去。5. AS_PATH、LOCAL_PREF、MED路由属性背后的商业逻辑到了 BGP 选路这块很多人是靠背顺序过关的。背当然有用但理解每条属性服务于谁才能真正记住。先看 Cisco 体系的选路顺序各家实现略有差别但主干一致WEIGHT本地有效越大越优Cisco 私有只影响本机。LOCAL_PREF只在 iBGP 内部传播越大越优用来告诉全 AS我更想出哪个口。本地始发的路由优先自己宣告的比学来的优。AS_PATH 最短优先。ORIGINIGP EGP Incomplete越小越优。MED向邻居提示请优先从这个口进来越小越优跨 AS 传递范围有限。eBGP 优于 iBGP。到下一跳的IGP 度量最小者优先。最后还有一堆打破平局的规则邻居地址、Router ID、集群列表长度等。只看顺序是抽象的我用一个场景把它串起来。假设你是某运营商的网络工程师有两条上游链路A 家是付费的 TransitB 家是免费的对等互联Peering。从成本角度你当然希望自己的出流量优先走 B 家的免费链路只有在 B 家不通的时候才用 A 家。怎么实现给从 B 家学到的路由打一个更高的LOCAL_PREF你 AS 内部所有路由器就会一致地把出流量往 B 家送。LOCAL_PREF 只在 iBGP 里传正好对应我的出口我作主这个语义。反过来入流量你控制不了——那是对方决定的。你能做的只是用MED给邻居一个软提示如果你有多个口连到我请优先走这个口进。注意 MED 是建议不是命令对方完全可以无视这取决于它自己的 LOCAL_PREF 和商业关系。搞不清这一点的人经常抱怨我 MED 配了没用其实协议本来就没承诺有用。AS_PATH 的长度也要正确理解它是经过的 AS 数量不是路由器跳数。一条 AS_PATH 里有 5 个 AS可能物理上只跨了几百公里另一个里只有 2 个 AS可能绕了半个地球。而且除了默认的 AS_SEQUENCE还有 AS_SET聚合后的一组 AS计为 1和 AS_CONFED_SEQUENCE联盟内部不计入长度。考试里出过这种题问聚合前后 AS_PATH 长度怎么变不知道 AS_SET 就答不上来。再讲一个藏在属性背后的原则——无谷路由Valley-Free Routing。翻译成人话流量只能上坡再下坡不能下坡再上坡。学术点说AS 之间的商业关系有三类客户—提供商我付钱给你、对等免费互换、提供商—客户我收你钱。这个原则规定从提供商或对等体学到的路由只能通告给自己的客户从客户学到的路由可以通告给提供商、对等体和客户从对等体学到的路由不能通告给另一个对等体。为什么因为对等互联是我免费帮你传我的流量你也免费帮我传你的如果我拿从对等体 A 学来的路由传给对等体 B等于用 B 的免费带宽帮 A 传输破坏了商业前提。这个原则解释了为什么互联网的 BGP 路由表不会无限膨胀也解释了为什么某些路径看起来绕其实是商业关系决定的不是技术不好。Community 属性是这套逻辑里的标签工具。一个 32 位的值可以用来给前缀打标比如标记这条是从客户学来的这条不要通告给对等体这条在欧洲区域优先级调低。上游运营商通常会公布自己支持的 community 值客户按需打标就能实现精细控制。这属于进阶内容但理解了它你对 BGP 的掌控力会上一个台阶——从能配通变成能按业务意图配。6. 用 traceroute 和公开路由信息把 AS 看落到实处概念讲完得让它落地。AS 看不见摸不着但有工具能让它现形。最直接的是 tracerouteWindows 下是 tracert。它的原理很巧源端发出去的探测包把 TTL 依次设为 1、2、3……每经过一台路由器 TTL 减一减到 0 时该路由器回一个 ICMP 超时消息源端就记录了这一跳的地址。递增下去路径上的每一跳都被钓出来。# Linux / macOS traceroute -n 203.0.113.10 # 指定最大跳数以加快速度 traceroute -m 20 -n 203.0.113.10输出大概长这样地址用文档保留段示意traceroute to 203.0.113.10, 30 hops max, 60 byte packets 1 192.0.2.1 0.412 ms 0.388 ms 0.371 ms 2 192.0.2.9 1.204 ms 1.187 ms 1.203 ms 3 198.51.100.6 3.882 ms 3.901 ms 3.870 ms 4 198.51.100.22 4.115 ms 4.088 ms 4.102 ms 5 203.0.113.1 12.442 ms 12.390 ms 12.411 ms 6 203.0.113.10 12.900 ms 12.876 ms 12.889 ms光看 IP 你看不出 AS 边界但把它和 ASN 归属一对照跳变点就很清楚了。第 3 跳通常是你所在 AS 的出口第 4 跳往往已经跨到上游运营商了。几个观察技巧同一 AS 内的跳延迟通常是毫秒级的等差增长跨 AS 那一步经常有明显跳变。出现星号* * *不一定是断链可能是中间设备配置了不响应 ICMP或做了限速。多试几次、换 TCP 模式再判断。路径不对称是常态。去程经过的 AS 和回程完全可能不同因为出向由你的策略决定入向由对方决定。发现去回路径不一样别急着当故障。想查某个 IP 属于哪个 AS几个公开渠道就够用# 查询 IP 的注册信息部分 RIR 支持 ASN 查询 whois 198.51.100.6 # 查询 ASN 的注册信息 whois -h whois.radb.net -- -i origin AS64500输出里关注origin字段和descr描述能大致看出路由对象的归属。另外还有一批公开的路由信息查询服务能直接给出某个 IP 前缀所属的 AS、这个 AS 的上下游关系、它宣告了哪些前缀。做网络排障的时候我习惯先查一遍目标 IP 的 AS 归属确认问题出在我的 AS 里还是别人的 AS 里这一步能省掉大量无效排查——因为如果问题在别人的 AS 里你能做的其实只有反馈和等把时间花在自己这边找是没有意义的。最后提醒一个实操细节traceroute 的结果只是某一瞬间的采样。BGP 每时每刻都在收敛尤其是发生链路抖动的时候同一条路你连续跑三次可能得到三个结果。要做对比最好固定时间窗口、多跑几轮取共性而不是拿一次的输出去下结论。7. 期末、408 与软考里关于 AS 的高频踩坑点最后把考场上最容易栽的地方捋一遍。这些坑我自己踩过也看别人踩过属于不点破就一定会错的类型。坑一把 AS 和路由域混为一谈。路由域是运行同一种路由协议的范围AS 是同一管理实体、统一策略的网络集合。一个 AS 内部可以跑多种 IGP核心跑 IS-IS接入跑 OSPF中间做重分发但它们属于同一个 AS。反过来同一个路由域通常不会跨 AS。看到题目里说OSPF 的区域 0 是一个自治系统那是错的。坑二以为 AS_PATH 长就等于慢。AS_PATH 长度只影响选路偏好不代表物理时延。一条 AS_PATH 有 4 跳但都是直连对等可能比 2 跳但中间绕远路的路径更快。题目如果问哪条路径最优默认按 BGP 选路规则答不要自作聪明用地理直觉。坑三网桥转发表的知识点串到 AS 上。这两块毫无关系但复习的时候很容易混。网桥转发表靠自学习收到帧时记录源 MAC 和入接口查表命中就转发、未命中就泛洪条目有老化时间。考试常考转发表初始为空收到某帧后表里有什么这种推导题做法就是按时间顺序一条条记别跳步。AS 是网络层的概念网桥是链路层的概念层次都不一样。坑四BGP 用 TCP且端口固定。BGP 建立邻居走 TCP179端口这是硬知识。有人会答 UDP属于没抓住BGP 靠 TCP 保证可靠性这个设计点。另外 eBGP 默认 TTL 为 1 也考过问为什么 eBGP 邻居通常要求直连答案就在这。坑五私有 ASN 的范围。64512 到 65534这个区间要么记住要么理解它和私有 IP 的设计思路一致——内部随便用出门要转换AS 层面叫 AS 覆写/移除。题目里让判断某个 AS_PATH 中出现了 65001是否合法答案是不应在公网出现。顺带说一句热搜里那个我们的系统检测到您的计算机网络中存在异常流量请稍后重新发送请求的报错跟 AS 没有直接关系。这类提示一般是应用层或中间的安全设备做的拦截返回的通常是 HTTP 4xx 状态码属于应用层现象。很多人搜它是因为分不清网络不通和被拦截——前者是链路或路由问题后者链路完全是通的只是请求内容被判定为异常。排障时先分清层次比什么都重要。答题上还有个通用建议遇到 AS 相关的主观题先写定义三要素单一管理实体、统一路由策略、网络集合再补一句ASN 的作用全球唯一标识最后按题目问的方向展开。这个结构稳阅卷的一眼就能看到得分点剩下就是填充细节。如果让我用一句话概括整个 AS 体系的价值我会说它把技术上的可达和商业上的愿意这两件事分开了——IGP 解决前者BGP 和 AS 之间的策略解决后者。想通这一点再回头看那些属性、那些选路顺序、那些看起来奇怪的路径就都有了解释。我自己每次配完一套 BGP 策略看着流量按预期从某个出口走掉的时候那种感觉和写完一段优雅的代码是同一种。