📚 第二章 TCP/IP基础知识
📄 一句话概括

互联网没有唯一中心,但有层级:接入层 → 区域层 → 骨干层。 分层把链路数从平方级降到线性级,代价是最远要多绕几跳。

📝 本节和前面几节的关系

2.3.2 讲的是「靠什么连」,这一节讲「怎么连成一张网」。 这一节会算跳数与链路数,两个数的对比很说明问题。

一、三层结构

从你家到骨干,大致这么几层:

层 典型设备 连接方式
接入层 家用路由器、楼道交换机 星型,接终端
区域层 城域网汇聚设备 环型或双星,接多个接入
骨干层 核心路由器 网状,少而粗

第一行是「星型」:终端到接入点只有一条路,断了就断。 这一层不做冗余,因为成本太高、影响面太小。 第二行开始做冗余:城域网常见「双环」或「双星」,保证任一段断了还能绕。 第三行是「少而粗」:骨干层的链路数量很少,但每条都是几十上百 G。 所以骨干断一条,影响的是整个区域。

二、两个数的对比

同一批节点,两种连法:

连法 链路数 最远几跳
全连(网状) 45 1
分层 9 6

10 个节点全连要 45 条链路,分层只要 9 条:从平方级降到线性级,这就是分层的收益。 代价是最远要绕 6 跳:每跳都要经过一台设备,每台都有一点时延。 所以「分层」是用「跳数」换「链路数」——这笔交易在节点数少时不划算,节点一多就必赚。 这也是「为什么不能把所有路由器都直连」的答案: 10 个节点 45 条线还能接受,100 个节点就是 4950 条,没有哪个机房放得下这么多线。

三、骨干断了会怎样

三层结构有一个必然的脆弱点:

断在哪 影响范围 能绕吗
接入层 一户或一栋 不用绕
区域层 一个片区 通常能绕
骨干层 一个区域甚至一国 绕不了,只能等修

第三行是真实发生过的事:海底光缆被渔船挖断、被地震震断,都会让某个国家的国际出口骤降。 这不是「设计失败」,是「成本与风险的折中」——要把骨干做到完全冗余,成本会高到没人愿意付。 所以「互联网没有单点」这句话要打个折扣:它在「逻辑上」没有单点(任何两点之间有多条路径), 但在「物理上」有(某些海缆就是独一份)。 这也解释了为什么大公司要自建海缆、要多个运营商接入:它们买的不是带宽,是「路径多样性」。

四、动手 Demo:三层 ISP 拓扑,任意两点最多几跳

建一个三层小拓扑,算任意两个接入端之间的跳数。 同时对比「全连」需要多少条链路。

edges = [('骨干A', '骨干B'), ('骨干B', '骨干C'),
         ('骨干A', '区域1'), ('骨干B', '区域2'), ('骨干C', '区域3'),
         ('区域1', '接入1a'), ('区域1', '接入1b'),
         ('区域2', '接入2a'), ('区域3', '接入3a')]
nodes = sorted({x for e in edges for x in e})
g = {n: [] for n in nodes}
for a, b in edges:
    g[a].append(b)
    g[b].append(a)

def hops(s, t):
    dist, q = {s: 0}, [s]
    while q:
        v = q.pop(0)
        for w in g[v]:
            if w not in dist:
                dist[w] = dist[v] + 1
                q.append(w)
    return dist.get(t)

leaves = [n for n in nodes if n.startswith('接入')]
mx = max(hops(a, b) for a in leaves for b in leaves if a != b)
print('节点 %d、链路 %d、最远 %d 跳' % (len(nodes), len(edges), mx))
print('全连要 %d 条' % (len(nodes) * (len(nodes) - 1) // 2))

实跑输出:

--------------------------------------------------------------------
三层 ISP 拓扑,任意两点最多几跳
--------------------------------------------------------------------
**互联网是分层的:接入层 → 区域层 → 骨干层。**下面建一个三层小拓扑,算任意两点之间的跳数。

**节点 10 个、链路 9 条,两个最远的接入端之间是 6 跳。**

**这就是「分层」在拓扑上的收益**:**全网 10 个节点,如果全连要 45 条链路;分层只要 9 条。**
**链路数从平方级降到线性级,代价是最远要多绕几跳。**
**所以「互联网没有中心」这句话要修正一下**:
**它没有「唯一中心」,但有「层级」**——**骨干层就那么几条,断了影响很大。**
**这也是「海底光缆被挖断导致某国全网变慢」的原因。**

10 个节点、9 条链路、最远 6 跳:全连要 45 条。 所以分层用 1/5 的链路换来了 6 跳的距离。 最远的那一对是「接入1b 到 接入3a」: 接入1b → 区域1 → 骨干A → 骨干B → 骨干C → 区域3 → 接入3a,数一下正好 6 跳。 这个拓扑里骨干只有三个节点:这是刻意的——现实里的骨干层也是「少而粗」。 所以「骨干断了影响大」不是设计缺陷,是结构性必然。

30 秒实验

  1. 加一个「区域1 直连 区域2」的链路,看最远跳数会不会降到 4。
  2. 把骨干减到两个节点,看最远跳数变成多少、链路数变成多少。
  3. 想一下:为什么海底光缆这么重要?用「链路数 vs 跳数」解释。

常见误区

  1. 以为互联网是「网状全连」。 它是分层的,骨干少而粗,接入多而细。
  2. 以为「没有单点」等于「绝对可靠」。 逻辑上无单点,物理上有,某些海缆就是独一份。
  3. 以为分层只是为了省钱。 它还用「跳数」换「可管理性」,全连的拓扑连配置都写不完。
自测三问(点开对答案) 1. 互联网的三层结构是什么? —— **接入层(星型接终端)、区域层(环型或双星)、骨干层(网状,少而粗)。**越往上链路越少越粗。 2. 分层在链路数上买到什么?代价是什么? —— **10 个节点从 45 条降到 9 条**(平方级降为线性级),**代价是最远要绕 6 跳。** 3. 为什么说「互联网物理上有单点」? —— **某些海底光缆是某个国家/地区的唯一出口**,断了就绕不了。 逻辑上有多条路径,物理上可能是独一份。

下一节把「谁在运营这些层」说清楚:ISP 与区域网。

相关笔记