bc's club

This is Bc's club

计算机网络:自顶向下方法 - Day 2 | 网络核心与分层模型

📖 Day 2 / 15 · 《计算机网络:自顶向下方法》阅读笔记

昨天 Day 1 我们搞清楚了”互联网是什么”——终端设备、通信链路、分组交换。今天,我们要钻进互联网的心脏:网络核心,然后搞懂计算机网络最重要的一张图——分层模型

一、网络核心:互联网的心脏#

1.1 什么是网络核心?#

如果网络边缘是”用户的地盘”,那网络核心就是”快递公司的转运中心”。

你在家用手机打开 bicheng 的博客,一个 HTTP 请求从你的手机发出,到达阿里云 ECS,再被 frp 转发到 Mac mini 上的 nginx。这中间——从你的运营商到阿里云机房之间——数据穿越的那个由无数路由器交织而成的网状结构,就是网络核心(Network Core)

1
2
3
4
5
6
7
8
你的手机(边缘)           阿里云 ECS(边缘)
┌─────────────────────────────────┐
│ 网 络 核 心(一堆路由器) │
│ ●─────●─────●─────●─────● │
│ │ │ │ │ │ │
│ ●─────●─────●─────●─────● │
│ (这就是 ISP 的骨干网) │
└─────────────────────────────────┘

网络核心的核心任务只有两个字:转发

数据进来了,路由器看一眼目的地,然后丢给下一个路由器,就像快递到了中转站,分拣员扫一下面单,扔到对应的传送带上。

🏭 生活类比:快递转运中心

你寄一个包裹从上海到北京,包裹不会直达。它先到片区驿站→区级分拣中心→上海市转运中心→(走高速公路)→北京市转运中心→区级分拣中心→收件人小区驿站。网络核心就是那些”转运中心 + 高速公路”的组合。

1.2 网络核心的两种基本工作方式#

这里就是本 Day 2 的第一个重头戏——网络核心怎么转发数据?历史上出现了两条路线:

  1. 分组交换(Packet Switching) —— 现代互联网的选择
  2. 电路交换(Circuit Switching) —— 传统电话网的选择

这场对决,堪称网络界的”关公战秦琼”。


二、分组交换 vs 电路交换:世纪对决#

2.1 电路交换:老大哥的独占专线#

电路交换是最早的通信方式,源于电话网络。

它的工作流程分三步:

  1. 建立连接:通信前,先在收发双方之间预留一条端到端的物理路径
  2. 数据传输:独占这条路径传输数据
  3. 释放连接:通信结束后,释放资源

☎️ 生活类比:打电话

你拨通老王的电话,运营商在你的电话和老王的电话之间建立了一条专用电路。这条电路是你俩独享的——就算你们俩都不说话(静默),这条线路的资源也一直被占着,别人用不了。挂电话后,资源才释放。

电路交换的关键特点: 资源预留,链路独占

电路交换的致命问题#

  • 资源浪费严重:通话时 50% 时间是沉默的,但这些带宽白白浪费了
  • 建立连接慢:每次通信前要建立端到端路径,延迟高
  • 可扩展性差:如果 1000 个人同时打电话,就需要预留 1000 条电路

2.2 分组交换:互联网的选择#

分组交换是现代互联网的核心技术。

它不做资源预留,所有用户共享网络链路。数据被切分成一个个分组(Packet),每个分组独立路由,到达目的地后重新组装。

📦 生活类比:寄快递

你要寄 100 本书,不包一辆专车(电路交换),而是分成 100 个包裹,每个包裹贴上收件地址,通过快递网络分别投递。有的包裹走北京,有的走上海中转,但最终都能到达。收件人收到后按编号拼好就行。

分组交换的关键特点: 资源共享,链路竞争存储转发

存储转发(Store and Forward)#

还记得 Day 1 提过的吗?路由器必须完整接收一个分组后,才能开始转发。这就是存储转发机制。

这意味着每个分组在经过的每个路由器上,都要经历”接收→检查→转发”的过程。

排队延迟和丢包#

因为链路是共享的,如果多个分组同时到达同一条链路,就需要排队等待。路由器的缓冲区(队列)长度有限,如果队列满了——后来的分组就会被丢弃(Drop)

这就是网络中丢包(Packet Loss) 的根本原因。

1
2
3
4
5
6
分组A ──→ ┌─────────┐     ┌─────────┐
分组B ──→ │ 路由器1 │ ──→ │ 路由器2 │ ──→ 目的地
分组C ──→ │ 队列:ABC │ │ 队列:空 │
分组D ──→ └─────────┘ └─────────┘
↑ D 进来时队列满了
↓ D 被丢弃!💥

🚗 生活类比:高速公路收费站

节假日高速免费,大量车涌向收费站(路由器)。收费站的通过速率是有限的,车多了就排队。如果排队排到匝道都满了(缓冲区满),新来的车直接被劝返(丢包)。

2.3 两种交换方式的深度对比#

对比维度 电路交换 分组交换
资源分配 独占预留 统计共享
建立连接 需要先建立电路 不需要,直接发送
传输方式 比特流直接通过 分组存储转发
延迟特性 固定延迟(稳) 可变延迟(抖动)
丢包可能 不会丢(有保障) 会丢包(无保障)
资源利用率 低(沉默也占资源) 高(共享,按需使用)
适用场景 实时语音/传统电话 数据传输(网页、文件、视频)
可扩展性 极好

🤔 思考一下

为什么互联网最终选择了分组交换?

因为数据传输天然就是突发性的(Bursty)。你看网页的时候,点一下发送请求,然后读 10 秒页面,再点一下。大部分时间链路是空闲的。分组交换让所有人共享链路,利用率远高于独占模式。

电话就不一样了,通话期间持续产生数据流,独占反而合理。但现代 VoLTE 其实也用分组交换了——技术进步就是这么无情。

2.4 分组交换实战:你的 frp 隧道#

你的博客架构本身就是分组交换的绝佳案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
用户浏览器
│ HTTP 请求(被切分为多个 TCP 分组)

运营商网络核心(多跳路由器,存储转发)


阿里云 ECS:443(nginx SSL 终止)
│ frp 协议封装,再次切分为 TCP 分组

互联网骨干网(又是多跳路由器)


Mac mini(frps → nginx → Hexo 博客)

你的每一个 HTTP 请求,都不是一条”专线”走到底。它被切成几十个分组,在网络核心中和无数其他人的分组挤在同一条光纤上,排队、转发、排队、转发……最终到达你的 Mac mini。

如果你在 Mac mini 上跑 tcpdumpWireshark,你可以亲眼看到这些分组的到达:

1
2
# 在 Mac mini 上抓包看看
sudo tcpdump -i en0 port 443 -c 20

你会看到分组是一个一个到达的,中间有微小的时间间隔——那就是排队延迟和传播延迟的真实体现。


三、分层模型:互联网的”千层饼”#

终于来了!分层模型是整个计算机网络最重要的概念框架。理解了分层,你就理解了互联网设计的哲学。

3.1 为什么要分层?#

先讲个故事。

假设你在写一个博客系统(你现在确实在做这件事)。你的技术栈可能是这样的:

1
2
3
4
5
6
7
8
9
Hexo(生成 HTML 静态文件)

nginx(HTTP 服务器,处理请求响应)

TCP(保证数据可靠传输)

IP(把数据包从 A 送到 B)

以太网/WiFi(物理传输比特流)

每一层只关心自己的事情,不操心其他层:

  • Hexo 不关心 nginx 是怎么发 HTTP 响应的
  • nginx 不关心 TCP 是怎么保证可靠性的
  • TCP 不关心 IP 走了哪条路由
  • IP 不关心底层是光纤还是 WiFi

这就是分层的精髓:每层提供特定服务,对上层屏蔽下层细节。

🏢 生活类比:公司层级

想象一家公司:

  • CEO(应用层):决定公司战略——“我们要上线一个新功能”
  • 总监(传输层):分配任务——“前端组负责页面,后端组负责 API”
  • 经理(网络层):安排执行——“周三前完成,每天汇报进度”
  • 程序员(链路层):写代码——具体实现

CEO 不需要知道哪个程序员写了哪行代码,他只要结果。同样,应用层不需要知道数据在光纤上是怎么跑的,它只要”数据可靠到达了”。

3.2 OSI 七层模型#

OSI(Open Systems Interconnection) 参考模型是 ISO 在 1984 年提出的,把网络通信分成七层:

层号 层名 英文 核心职责 生活类比
7 应用层 Application 为用户应用程序提供网络服务 你在浏览器输入网址
6 表示层 Presentation 数据格式转换、加密压缩 翻译官,把中文翻成英文
5 会话层 Session 建立、管理、终止会话 会议主持人,控制谁先发言
4 传输层 Transport 端到端的可靠/不可靠数据传输 快递公司,保证包裹送达
3 网络层 Network 路由选择,把分组从源送到目的 快递中转站,决定包裹走哪条路
2 数据链路层 Data Link 相邻节点之间的可靠传输 两站之间的货车司机
1 物理层 Physical 比特流的透明传输 高速公路本身

记住七层的口诀(从下往上):物、链、网、传、表、会、应

或者用经典英文助记法(从上往下):All People Seem To Need Data Processing。

OSI 每层详解#

第 1 层:物理层(Physical Layer)

操心的是:比特 0 和 1 怎么变成物理信号在线缆上跑。

  • 电信号(铜线)、光信号(光纤)、电磁波(无线)
  • 你的 Mac mini 连 WiFi 时,物理层负责把数据变成无线电波
  • 阿里云 ECS 之间的通信,物理层是光纤中的光脉冲

第 2 层:数据链路层(Data Link Layer)

操心的是:相邻两个节点之间怎么可靠地传数据帧(Frame)。

  • MAC 地址寻址(网卡的身份标识)
  • 以太网协议(Ethernet)、WiFi 协议(802.11)
  • 你的 Mac mini 的 MAC 地址是 xx:xx:xx:xx:xx:xx,数据链路层用它和同网段设备通信

第 3 层:网络层(Network Layer)

操心的是:分组(Packet)从源到目的地走哪条路。

  • IP 地址寻址——你的阿里云 ECS 有公网 IP
  • 路由选择——OSPF、BGP 等协议决定数据包走哪条路径
  • 你用 traceroute 命令看到的每一跳,就是网络层的路由决策
1
2
# 从 Mac mini 看看到达百度服务器的路由
traceroute baidu.com

第 4 层:传输层(Transport Layer)

操心的是:端到端(进程到进程)的数据传输。

  • TCP:可靠传输,保证数据完整有序到达——你的 nginx 用 TCP
  • UDP:不可靠但快速——DNS 查询用的就是 UDP
  • 端口号寻址——nginx 默认监听 80/443 端口

第 5 层:会话层(Session Layer)

操心的是:会话的建立、维护和终止。

  • 在 OSI 模型中独立存在,但在实际互联网中,这一层的功能通常被合并到应用层

第 6 层:表示层(Presentation Layer)

操心的是:数据的表示、转换、加密、压缩。

  • SSL/TLS 加密——你博客的 HTTPS 就在这里
  • 数据编码——JSON、Protobuf、字符编码转换
  • 在 TCP/IP 模型中,这些功能也被合并到应用层

第 7 层:应用层(Application Layer)

操心的是:为用户应用程序直接提供网络服务。

  • HTTP/HTTPS——你的博客就是 HTTP 应用
  • DNS——把 bc970321.cn 解析成 IP 地址
  • SMTP/IMAP——邮件服务
  • SSH——你远程连接服务器用的协议

3.3 TCP/IP 四层模型#

OSI 七层很优雅,但实际互联网用的是 TCP/IP 模型,只有四层:

TCP/IP 层 对应 OSI 层 核心协议
应用层(Application) 应用层 + 表示层 + 会话层 HTTP, HTTPS, DNS, SSH, SMTP
传输层(Transport) 传输层 TCP, UDP
网际层(Internet) 网络层 IP, ICMP
网络接口层(Network Access) 数据链路层 + 物理层 Ethernet, WiFi, PPP

TCP/IP 模型更务实——它把 OSI 的上三层合为一个”应用层”,把下两层合为”网络接口层”。为什么?因为 TCP/IP 协议族本来就是为实际工程设计的,不需要那么精细的划分。

3.4 OSI vs TCP/IP:一图看清#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────┐    ┌─────────────────┐
│ OSI 七层模型 │ │ TCP/IP 四层模型 │
├─────────────────┤ ├─────────────────┤
│ 7. 应用层 │ │ │
│ 6. 表示层 │───→│ 应用层 │
│ 5. 会话层 │ │ │
├─────────────────┤ ├─────────────────┤
│ 4. 传输层 │───→│ 传输层 │
├─────────────────┤ ├─────────────────┤
│ 3. 网络层 │───→│ 网际层 │
├─────────────────┤ ├─────────────────┤
│ 2. 数据链路层 │ │ │
│ │───→│ 网络接口层 │
│ 1. 物理层 │ │ │
└─────────────────┘ └─────────────────┘

3.5 两种模型的核心差异#

对比维度 OSI 模型 TCP/IP 模型
层数 7 层 4 层
提出者 ISO(国际标准化组织) DoD(美国国防部)/ ARPAnet
提出时间 1984 年(理论先行) 1970s(实践先行)
设计哲学 先有理论模型,再有实现 先有实现,再总结模型
会话/表示层 独立存在 合并到应用层
链路/物理层 独立两层 合并为网络接口层
实际使用 主要用于教学和理解 实际互联网的标准

🔑 关键理解:

OSI 是”教科书模型”——帮我们理解网络通信的结构和原理。

TCP/IP 是”工程模型”——实际互联网跑的就是这一套。

学习时两种都要懂。面试时说”OSI 七层”,干活时心里想”TCP/IP 四层”。

3.6 数据封装:每层都加一个”信封”#

当你的 nginx 发送一个 HTTP 响应给用户时,数据会从上到下经过每一层。每经过一层,都会被加上一个头部(Header),这个过程叫封装(Encapsulation)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
用户请求到达 nginx,nginx 准备返回 HTML:

┌───────────────────────────────────────┐
│ HTML 数据(应用层) │ ← HTTP 报文
│ ┌─────────────────────────────────┐ │
│ │ HTTP Header + HTML 数据 │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ TCP Header + 数据 │ │ │ ← TCP 报文段
│ │ │ ┌─────────────────────┐ │ │ │
│ │ │ │ IP Header + 数据 │ │ │ │ ← IP 数据报
│ │ │ │ ┌────────────────┐ │ │ │ │
│ │ │ │ │ Frame Header │ │ │ │ │ ← 以太网帧
│ │ │ │ │ + 数据 + FCS │ │ │ │ │
│ │ │ │ └────────────────┘ │ │ │ │
│ │ │ └─────────────────────┘ │ │ │
│ │ └──────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└───────────────────────────────────────┘

每层的专业术语:

数据单元名称 类比
应用层 报文(Message) 信纸上写的信
传输层 报文段(Segment)(TCP)/ 数据报(Datagram)(UDP) 装进信封的信
网络层 数据报(Datagram) 贴了邮票和地址的信封
链路层 帧(Frame) 放进邮袋的包裹

✉️ 生活类比:俄罗斯套娃信封

你写了一封信(HTML 数据),装进一个 TCP 信封(加了端口号),再装进一个 IP 信封(加了 IP 地址),最后装进一个以太网信封(加了 MAC 地址)。每到一个路由器,拆掉最外层信封,看看地址,再装一个新的外层信封继续转发。

3.7 实战:你的博客系统中的分层#

让我们把分层模型映射到你的实际系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
用户在浏览器输入 bc970321.cn

▼ 【应用层】浏览器发起 HTTP 请求 / DNS 解析
│ → DNS 把域名解析成阿里云 ECS 的公网 IP
│ → 构造 HTTP GET /

▼ 【传输层】TCP 三次握手
│ → 源端口: 54321(随机) → 目的端口: 443
│ → TCP 保证 HTTP 报文可靠到达

▼ 【网际层】IP 路由
│ → 源 IP: 用户 IP → 目的 IP: ECS 公网 IP
│ → 经过多跳路由器,每跳都是存储转发

▼ 【网络接口层】变成电信号/光信号
│ → WiFi 无线电波 → 运营商光纤 → ...

=== 到达阿里云 ECS ===

▼ ECS 从下往上逐层拆解,交给 nginx
▼ nginx 返回 HTML → frp 封装 → 传输到 Mac mini
▼ Mac mini 上 nginx 处理请求 → 返回 Hexo 静态页面

你可以在 Mac mini 上验证这一切:

1
2
3
4
5
6
7
8
9
10
11
# 查看 MAC 地址(数据链路层)
ifconfig en0 | grep ether

# 查看 IP 地址(网络层)
ifconfig en0 | grep inet

# 查看 nginx 监听端口(传输层)
lsof -i :80 -i :443

# 抓取一个完整的 HTTP 请求(看分层封装)
sudo tcpdump -i en0 port 80 -A -c 10

每条命令都在验证一个不同的层——这就是分层的力量,你可以独立地观察和调试每一层。


四、ISP 与互联网的结构#

最后补充一个概念:互联网不是一个单一的网络,而是由多个 ISP(Internet Service Provider,互联网服务提供商) 互联而成的”网络的网络”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          ┌──────────────┐
│ Tier-1 ISP │ ← 国际骨干(如中国电信国际、AT&T)
│ 全球互联 │
└──────┬───────┘

┌───────────┼───────────┐
│ │ │
┌────┴────┐ ┌───┴────┐ ┌───┴────┐
│Tier-2 │ │Tier-2 │ │Tier-2 │ ← 区域级 ISP
│(省市级) │ │(省市级) │ │(省市级) │
└────┬────┘ └───┬────┘ └───┬────┘
│ │ │
┌────┴────┐ │ ┌────┴────┐
│Tier-3 │ │ │Tier-3 │ ← 接入级 ISP
│(小区宽带) │ │ │(手机基站)│
└─────────┘ │ └─────────┘
  • Tier-1:国际级骨干运营商(如中国电信、中国联通的骨干网)
  • Tier-2:区域级 ISP(如省市级运营商)
  • Tier-3:接入级 ISP(如你的宽带运营商、手机运营商)

你的阿里云 ECS 连接的是 Tier-1 或 Tier-2 级别的网络,你的 Mac mini 连接的是 Tier-3 级别的宽带网络。两者之间的数据传输,要穿越多层 ISP 的互联点——这些互联点叫 IXP(Internet Exchange Point)


五、今天学到了什么?用你的系统验证#

知识点 你的系统中的体现
网络核心 用户到 ECS 之间的多跳路由器就是网络核心
分组交换 你的 frp 隧道中的数据就是以分组形式传输的
存储转发 traceroute baidu.com 看到的每一跳都是存储转发
丢包可能 网络拥堵时 frp 连接断开,很可能就是中间路由器丢包了
分层模型 nginx(应用层)→ TCP(传输层)→ IP(网络层)→ WiFi(接口层)
数据封装 tcpdump 抓包能看到每一层的头部
ISP 层级 Mac mini 通过家宽(Tier-3)接入,ECS 直连骨干网(Tier-1/2)

🎯 关键知识点回顾#

  1. 网络核心 = 路由器 + 链路构成的网状结构,核心任务是转发分组
  2. 电路交换 = 建立连接→传输→释放,资源独占(传统电话)
  3. 分组交换 = 数据切块独立传输,资源共享(现代互联网)
  4. 互联网选择分组交换,因为数据传输天然是突发的
  5. OSI 七层 = 应、表、会、传、网、链、物(教学模型)
  6. TCP/IP 四层 = 应用、传输、网际、网络接口(工程模型)
  7. 封装 = 数据从上到下经过每层时被加上头部,像套娃一样
  8. ISP 层级 = 互联网是”网络的网络”,由多层级 ISP 互联而成

📌 Day 3 预告:应用层概述、Web & HTTP 协议

从明天开始,我们正式进入 TCP/IP 的第一层——应用层!我们会聊聊:

  • 应用层是干什么的?网络应用架构(C/S 和 P2P)
  • HTTP 协议详解——你的 nginx 天天在处理的东西
  • HTTP 请求和响应的格式,Cookie、缓存机制
  • 为什么 HTTPS 比 HTTP 多了一层 TLS?

明天见!👋


本文是基于《计算机网络:自顶向下方法》(第8版)的读书笔记,结合实际操作经验编写。