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

互联网是「一层层租出来的」,每一层归不同机构管。 所以「网慢」要先判断卡在哪一层,而不是笼统地说「网不好」。

📝 本节和前面几节的关系

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 秒实验

  1. 算一下:一万个网络两两直连要多少条链路?
  2. 想一下:为什么「两家运营商之间绕远路」通常不是技术问题?
  3. 想一下:IX 的存在为什么能降低延迟?

常见误区

  1. 以为「互联网是一张平的大网」。 它是一棵树,每一层归不同机构管。
  2. 以为「跨网慢是技术不行」。 多数是互联带宽和商业关系,不是设备不够快。
  3. 以为「换个 DNS 就能变快」。 DNS 只影响「找地址」那一步,数据传输走的路一点没变。
自测三问(点开对答案) 1. 一个包从家到服务器大致过几级? —— **六级**:家庭网、接入网、城域汇聚、省网骨干、国际出口、对端网络。 2. 为什么 BGP 里要有「人工偏好」? —— **因为运营商之间有付费关系**,「客户流量」和「上游流量」的成本不同。 3. IX 解决了什么问题? —— **让多家网络在同一台设备上直接交换流量**,不必绕到共同上游再下来。

下一节看「自治系统」怎么把这张树切成一段一段。

相关笔记