互联网是「一层层租出来的」,每一层归不同机构管。 所以「网慢」要先判断卡在哪一层,而不是笼统地说「网不好」。
7.1 讲的是「技术」,这一节讲「谁在管」。 不理解这一层,就看不懂 7.2.2 的 AS 和 7.6 的 BGP 为什么要那样设计。
一、从家里到服务器,中间有六级
一个包从你家到网站,大致要过六级: 家里的路由器、楼道的交换机、运营商的城域网、运营商的骨干、国家级骨干或国际出口、 对端所在的网络。 这六级里只有第一级是你的,从第二级开始就归别人管,你只能「用」,不能「改」。 所以「我家网慢」这句话,可能的原因分布在这六级里的任何一级。
| 层级 | 典型设备 | 归谁 | 影响范围 |
|---|---|---|---|
| 家庭网 | 无线路由器 | 你自己 | 一家人 |
| 接入网 | 楼道交换机 | 物业或运营商 | 一个小区 |
| 城域汇聚 | BRAS、城域路由 | 运营商市公司 | 一个城市 |
| 省网骨干 | 核心路由器 | 运营商省公司 | 几个省 |
| 国际出口 | 骨干互联设备 | 国家级运营商 | 全国 |
| 对端网络 | 对方的服务器 | 别人 | 管不着 |
这张表最有用的是最后一列:「影响范围」决定了「你能不能修」。 一家人断了,自己重启就行;一个城市断了,只能等。 判断「是我这儿还是运营商那儿」的方法很简单: ping 网关通、ping 外网不通,就往上找一级;能找到哪一级断,就知道该找谁。
二、ISP 也是分层的
运营商不是一个平面,是一棵树:最上面是少数几家「一级运营商」(Tier 1), 它们之间互相免费互联,不需要向任何人付钱。 下面是二级、三级运营商,它们要向上游付「转接费」。 这个「谁付钱给谁」的关系,直接决定了 BGP 的策略: 「客户来的流量」和「上游来的流量」在 BGP 里的处理方式完全不同——因为一个赚钱、一个花钱。 所以 BGP 里才有 Local Preference 这种「人工偏好」的参数,而不是单纯比路径长短。 这也解释了「为什么两个网络之间要绕远路」: 两家二级运营商之间没有直连(因为直连要花钱),它们的流量必须都上到共同的上游再下来。 物理上很近,路由上绕了一大圈——这不是技术问题,是商业问题。
三、IX:让流量不用绕远路
互联网交换中心(IX)就是一个大交换机: 很多家运营商把口子接到同一台设备上,互相直接交换流量,不经过上游。 这样「两家二级运营商之间」就不用绕到上游再下来。 IX 的存在解释了「为什么同一个城市里两家运营商之间延迟能差很多」: 在 IX 有互联,延迟几毫秒;没有互联,绕到外地再回来,几十毫秒。 所以「换运营商要测延迟」不是玄学,是在测「它跟你的目标网络在哪儿互联」。 国内常见的 IX 形态是「国家级互联网交换中心」,加上运营商之间的直连专线。 这也是为什么「南方电信、北方联通」的老说法在今天还部分成立—— 互联带宽是有限的,跨网流量多了就会挤。
四、为什么要分层:算一下就懂
如果全网扁平互联,n 个网络两两直连要拉 n 乘 (n 减 1) 除 2 条线。 一百万个网络就是约五千亿条链路——这显然不可能。 分层之后,每个网络只需要往上连一条,链路数变成线性的。 这就是「层次化」存在的全部理由, 而路由协议的分层(区域、AS)用的是同一个思路——不是为了概念漂亮,是为了把平方变成线性。 7.5.4 讲 OSPF 划区域、7.2.2 讲 AS,都是这件事的不同尺度。
五、动手 Demo:一个包出门要过几层「组织」
把「六层」列成表,再算一下「如果不分层,链路数会是多少」。 重点看最后那个数字的量级。
for n in (10, 100, 10000, 1000000):
links = n * (n - 1) // 2
print('%-12s %s' % (format(n, ','), format(links, ',')))
实跑输出:
--------------------------------------------------------------------
一个包出门要过几层「组织」
--------------------------------------------------------------------
**互联网不是「一张大网」,是「一层层租出来的网」。**
**你家的宽带、楼里的接入设备、城市骨干、国家级骨干,全是不同机构的。**
位置 典型设备 层级 影响范围
-------------------------------------------------------------------
第 1 跳 家里的无线路由器 家庭网 换掉不影响别人
第 2 跳 楼道/小区交换机 接入网 一个小区共用
第 3 跳 运营商城域网 城域汇聚 一个城市共用
第 4 跳 运营商骨干网 省网/大区 几个省共用
第 5 跳 国家级骨干/国际出口 骨干 全国共用
第 6 跳 对端所在网络 另一个 AS 归别人管
**这六级里,只有第 1 跳是你的。**
**第 2 跳开始就归别人管,你只能「用」,不能「改」。**
**所以「家里网速慢」和「网站慢」是两件事**,**要先判断卡在哪一级。**
**为什么要分层,算一下就知道**:
网络个数 两两直连要拉的线
-------------------------------
10 45
100 4,950
10,000 49,995,000
1,000,000 499,999,500,000
**最后一行是「如果全网扁平互联」的代价**:**一百万个网络两两拉线,需要约五千亿条链路。**
**分层之后,每个网络只需要往上连一条**——**这就是「层次化」存在的全部理由。**
**路由协议的分层(区域、AS)用的是同一个思路。**
最后一行是「如果全网扁平互联」的代价:一百万个网络两两拉线,需要约五千亿条链路。 分层之后,每个网络只需要往上连一条——这就是「层次化」存在的全部理由。 这个数字还解释了一个现象: 为什么「新运营商」进不来—— 它不需要跟一百万个网络拉线,但它必须跟「上游」谈成互联,而上游是否愿意接、按什么价格接, 是商业谈判不是技术问题。 所以互联网的「开放」是有限度的:协议开放,接入不开放。
30 秒实验
- 算一下:一万个网络两两直连要多少条链路?
- 想一下:为什么「两家运营商之间绕远路」通常不是技术问题?
- 想一下:IX 的存在为什么能降低延迟?
常见误区
- 以为「互联网是一张平的大网」。 它是一棵树,每一层归不同机构管。
- 以为「跨网慢是技术不行」。 多数是互联带宽和商业关系,不是设备不够快。
- 以为「换个 DNS 就能变快」。 DNS 只影响「找地址」那一步,数据传输走的路一点没变。
自测三问(点开对答案)
1. 一个包从家到服务器大致过几级? —— **六级**:家庭网、接入网、城域汇聚、省网骨干、国际出口、对端网络。 2. 为什么 BGP 里要有「人工偏好」? —— **因为运营商之间有付费关系**,「客户流量」和「上游流量」的成本不同。 3. IX 解决了什么问题? —— **让多家网络在同一台设备上直接交换流量**,不必绕到共同上游再下来。下一节看「自治系统」怎么把这张树切成一段一段。
- ☐ (本节完,下一节 7.2.2 自治系统与路由协议)