📚 第七章 路由协议
📄 一句话概括

自治系统(AS)= 一个人管的一大片网,全球有唯一编号。 AS 号描述的是「谁管」,不是「管多少」。

📝 本节和前面几节的关系

7.2.1 讲「机构分层」,这一节讲「分层之后怎么在协议里表示」。 AS 是 7.2.3 的 IGP/EGP 分界,也是 7.6 的 BGP 的基础。

一、AS 的定义:管得动才算

自治系统的定义不是「一个网段」,而是「由单一机构管理、对外用统一的路由策略」的一组网络。 关键词是「统一策略」—— 一个公司有十个分公司、二十个网段,只要路由策略是一个人定的,就是一个 AS。 反过来,一栋楼里两家公司各拉一条线、各配各的路由,那就是两个 AS。 所以「AS 的边界」不是地理边界,是「管理边界」。 这一点很容易误解:同一个机房里的两台设备,也可能属于不同 AS。 「管得动」还有一个含义:AS 内部的路由细节,外面不需要知道。 外面只要知道「这个 AS 在哪个方向」,进去之后怎么走是它自己的事。 这种「内外有别」正是 AS 存在的价值—— 它把「一个 AS 内部的复杂度」封装起来,不让它扩散到全球路由表。

二、AS 号有多大

AS 号原本是 16 位,也就是最多 65536 个。 后来不够用了,扩展到 32 位,约 42.9 亿个。

类型 取值范围 总量 现状
2 字节 1 ~ 65535 65535 个 已分完
4 字节 1 ~ 4294967295 约 42.9 亿 在用

「已分完」这件事发生在 2010 年前后—— 分配机构把最后一批 2 字节号段发出去之后,新申请的只能用 4 字节。 但设备不是一夜换完的, 所以有一段过渡期,协议要用「asdot」这种写法让老设备也能表示大号—— 把 32 位拆成「高 16 位点低 16 位」。 两段私有号段也是这个思路:2 字节的 64512 到 65534、4 字节的 4200000000 到 4294967294。 内部随便用,出门前换成公有的——和私有 IP 地址是完全一样的套路。

三、AS 号和 IP 地址没有换算关系

这是最常被误解的一点:AS 号不是「IP 地址的前缀」,两者之间没有算术关系。 一个大 AS 可能只握着几个 /24,一个小 AS 也可能有一整个 /16。 为什么容易误解: 因为经常看到「AS 4134 宣告了 1.2.3.0/24」,看起来像是「AS 号加前缀」组成一个地址。 其实那是「一条 BGP 通告」的写法—— 意思是「这个前缀由这个 AS 起源」,不是「地址的前几位是 AS 号」。 这个区分在排查时很有用:「这个 IP 属于哪个 AS」要查 whois 或 BGP 表, 不能靠「地址反推 AS 号」。 同一个 AS 里的地址,前缀可能完全不连续——因为它可能是多年间陆续买来的。

四、一个 AS 里能跑几种协议

能跑好几种,而且经常不止一种。 常见组合是「内部 OSPF 加边界 BGP」:OSPF 负责 AS 内部选路,BGP 负责跟外面交换。 为什么不全用 BGP:BGP 收敛慢、配置复杂,内部用它属于杀鸡用牛刀。 为什么不全用 OSPF:OSPF 不适合跨管理域,而且撑不住全球路由表的规模。 两个协议各管一段,是这个尺度的最优解。 还有一种情况叫「BGP 在 AS 内部跑」(iBGP):同一 AS 里的边界路由器之间也要交换外部路由, 但它们不直接用 OSPF 传(因为 OSPF 不懂 AS 路径)。 所以一个中等规模的网络里,同时跑着 OSPF 和 iBGP 是常态。

五、动手 Demo:AS 号有多大

算一下 2 字节和 4 字节 AS 号的总量,以及两段私有号段的个数。 看「扩了 65536 倍」这个数字是怎么来的。

print('2 字节可用:', 65535)
print('4 字节可用:', 2 ** 32 - 1)
print('倍数:', (2 ** 32 - 1) / 65535.0)

priv2 = 65534 - 64512 + 1
priv4 = 4294967294 - 4200000000 + 1
print('2 字节私有:', priv2)
print('4 字节私有:', priv4)

实跑输出:

--------------------------------------------------------------------
AS 号有多大
--------------------------------------------------------------------
**自治系统(AS)就是「一个人管的一大片网」。**
**每个 AS 有个编号,叫 AS 号。**
**它是全球唯一的,由分配机构发。**

  类型             取值范围           总量             现状
  ----------------------------------------------------------------------
  2 字节 AS 号     1 ~ 65535          65535 个可用     早期标准,已分完
  4 字节 AS 号     1 ~ 4294967295     约 42.9 亿个     现在在用

**为什么从 2 字节扩到 4 字节**:**65536 个号在 2010 年前后就见底了。**
**扩到 4 字节,数量变成 65536 倍**——**从六万五涨到四十二亿。**

**有两段是「自己用、不上公网」的**:

  段             范围                        个数
  ------------------------------------------------------
  2 字节私有     64512 ~ 65534               1,023
  4 字节私有     4200000000 ~ 4294967294     94,967,295

**私有 AS 号和私有 IP 地址是同一个思路**:**内部随便用,出门前换成公有的。**
**这样「内部结构」就不会泄露到外面**——**这也是 5.6 节 NAT 那套想法在路由层的翻版。**

**注意 AS 号和 IP 地址没有换算关系**:**一个大 AS 可能只有几个 /24,一个小 AS 也可能握着 /16。**
**AS 号描述的是「谁管」,不是「管多少」。**

扩到 4 字节,数量变成 65536 倍——从六万五涨到四十二亿。 这个「65536 倍」不是巧合:位宽从 16 涨到 32,正好多 16 位,而 2 的 16 次方就是 65536。 两段私有号段的个数差得很远:2 字节私有只有 1023 个,4 字节私有接近 9500 万个。 所以「私有 AS 号够不够用」这件事,2 字节时代是真的紧张—— 一个大型企业内部分几十个 AS,一千个号很快就不够了。 注意 AS 号和私有 IP 的相似性不是巧合:两者都是「内部用一套、出门换一套」的思路, 都是为了让「内部结构」不外泄。 区别在于:私有 IP 靠 NAT 转换,私有 AS 号靠 BGP 的 as-path 过滤。

30 秒实验

  1. 算一下:2 的 32 次方除以 2 的 16 次方等于多少?
  2. 想一下:一个公司有二十个网段,是不是就是二十个 AS?
  3. 想一下:为什么不能从 IP 地址反推出 AS 号?

常见误区

  1. 以为「一个网段就是一个 AS」。 AS 是管理边界,一个 AS 可以有很多网段, 一个机房里也可以有两个 AS。
  2. 以为「AS 号就是地址前缀」。 两者没有算术关系,只是经常一起出现在 BGP 通告里。
  3. 以为「私有 AS 号用不完」。 2 字节只有 1023 个,大型企业内部分几十个 AS 很快就紧张。
自测三问(点开对答案) 1. AS 的边界是按什么划的? —— **按「谁管」划**,也就是「路由策略是否统一」,不是按地理位置。 2. 为什么 AS 号从 16 位扩到 32 位? —— **65536 个号在 2010 年前后分完了**,扩到 32 位正好多 16 位,涨 65536 倍。 3. 私有 AS 号拿来干什么? —— **内部划分子域用,出门时靠 BGP 过滤掉**,不外泄内部结构。

下一节看「AS 内部」和「AS 之间」为什么必须用不同的协议。

相关笔记