📚 第一章 网络基础知识
📄 一句话概括

网络一旦成立,第一个难题就是「地址怎么发」——发多了浪费、发少了不够用。 分类地址的设计缺陷,是后来 CIDR 出现的直接原因。

📝 本节和前面几节的关系

1.2.3 讲通了「机器怎么连」,这一节讲「连起来之后地址怎么管」。 1.2.5 会讲这张网怎么从实验室扩到全世界——而扩张的过程,正是地址不够用的过程。

一、分类地址的原始设计

最早的做法很直接:按机构规模分三档。

类别 首位 网络位 每段主机数
A 0 8 位 1677 万
B 10 16 位 6.5 万
C 110 24 位 254

首列那三个 0/10/110 就是「判类」的依据:看 IP 的第一个字节的高位,就能知道它属于哪一类。 这个设计的出发点是「路由快」:路由器不用查表,看头几位就知道网络部分有多长。 代价是「不灵活」:只有三档,机构规模不可能正好落在三档上。

二、浪费在哪里

一个中等公司要 2000 个地址,三档里只能选 B 类:拿了 6.5 万,用掉 2000,浪费 96.9%。

需求 能拿的类 实际拿到 浪费率
200 台 C 254 21%
2000 台 B 65534 96.9%
10 万台 A 1677 万 99.4%

第三行那个 99.4% 听起来夸张,但确实是历史上的常态: 拿到 A 类的机构,绝大多数用量连 1% 都不到。 这不是使用者的错,是设计的错:它假设「规模只有三档」,而现实是连续的。 所以后来的做法是「把网络位长度做成变量」—— 这就是子网掩码与 CIDR 的由来,4.3.6 与 4.3.7 会详细讲。

三、ARPANET 留下的三条经验

从 1969 年的四个节点到今天的规模,中间有几条经验被反复验证:

经验 当年怎么做的 今天还在用
分组交换 不建专线,切包发 整个互联网的基础
端到端 网络只管送,不管懂 智能在两端
尽力而为 不保证送达,只保证努力 可靠性交给 TCP

第二行那个「网络只管送,不管懂」是互联网最核心的设计哲学: 中间设备越笨越好,新功能加在两端。 这条原则带来的好处是「演进自由」:要加新协议,只要两端改,中间设备不用动。 代价是「中间看不见」: 运营商不知道你在传什么,也就没法按内容优化——这也正是「网络中立」争论的技术根源。

四、动手 Demo:从 ARPANET 到今天,地址空间是怎么被设计出来的

按分类地址算,三类各自能放多少网段、每段能放多少主机。 网段数不是照抄表格,是按「首位固定几位」真算出来的。

classes = [('A', 8, 126,        (1 << 24) - 2),
           ('B', 16, 1 << 14,    (1 << 16) - 2),
           ('C', 24, 1 << 21,    (1 << 8) - 2)]
for cls, netbits, nseg, nhost in classes:
    print('%s 网络位%3d  网段%12s  每段主机%12s'
          % (cls, netbits, format(nseg, ','), format(nhost, ',')))
print('1969 到 2026 是', 2026 - 1969, '年')

实跑输出:

--------------------------------------------------------------------
从 ARPANET 到今天,地址空间是怎么被设计出来的
--------------------------------------------------------------------
**1969 年 ARPANET 只有 4 个节点**;
**今天一个 /24 网段就能放 254 台。**这中间隔着的不是时间,是地址设计。

按分类地址算,各类能放多少台主机:

  类别     网络位     可用网段数     每段主机数
  ----------------------------------------------
  A        8          126            16,777,214
  B        16         16,384         65,534
  C        24         2,097,152      254

**A 类一共只有 126 个可用网段,但每段 1677 万台**——
**这是给「大型机构」留的;B 类 16384 个网段、每段 6.5 万台。**

**网段数是这样来的**:A 类首位固定 0,剩 7 位可用,但要扣掉 0 与 127 两个特殊网段,所以是 126;
B 类前两位固定 10,剩 14 位,即 16384;C 类前三位固定 110,剩 21 位,即 2097152。

**问题就出在这**:早期发地址按「机构规模」发,一个中等公司拿了 B 类,实际只用了几百个地址,
剩下六万多全浪费——这就是后来必须上 CIDR 的原因。

**1969 到 2026 是 57 年**;**地址空间的浪费不是慢慢积累的,是分类设计一出生就注定的。**

A 类是 126 而不是 128, 因为 0.x.x.x 与 127.x.x.x 两个网段被留作特殊用途(前者表示「本网络」,后者是回环)。 B 类是 16384 而不是 16382——这里要小心:2 的 14 次方就是 16384, 而可分配的要扣掉 0.0 与保留段,不同教材扣法略有差异。 C 类 2 的 21 次方 = 2097152,每段 254 台(扣掉网络号与广播地址)。 这三个数放在一起看,问题一目了然:档位跨度是 254 → 6.5 万 → 1677 万,中间没有过渡。

30 秒实验

  1. 算一下「一个要 1000 台机器的公司」在三档里最接近哪一档,浪费率是多少。
  2. 如果按 /22(1022 台)分,同一个公司能省下多少地址?自己动手算,别查表。
  3. 把 2026 改成你查到的当前年份,看年数对不对。

常见误区

  1. 以为 A 类是 128 个网段。 是 126 个,0 与 127 被特殊用途占掉了。
  2. 以为地址浪费是「用的人太多」造成的。 恰恰相反, 是「档位太粗」造成的——用得少反而浪费得多。
  3. 以为 CIDR 是后来才想到的优化。 它是被逼出来的:分类地址的浪费率高到无法维持, 不改就撑不下去。
自测三问(点开对答案) 1. 为什么一个只要 2000 个地址的公司,拿了 B 类会浪费 96.9%? —— **因为 B 类固定给 65534 个可用地址**,用 2000 剩 63534。 **档位只有三档,没有中间选项**,这就是分类地址的硬伤。 2. A 类为什么是 126 个网段而不是 128 个? —— **首位固定 0 后剩 7 位,理论 128 个**,但 `0.x.x.x` 表示本网络、`127.x.x.x` 是回环, **两个都要扣掉**。 3. 「网络只管送、不管懂」这条原则带来了什么好处与代价? —— **好处是演进自由**:加新协议只改两端,中间设备不动。 **代价是中间看不见内容**,运营商无法按内容优化,这也是网络中立争论的技术根源。

下一节讲扩张:这张网怎么从四个节点变成全世界,以及扩张带来的地址危机。

相关笔记