📖 Day 2 / 15 · 《计算机网络:自顶向下方法》阅读笔记
昨天 Day 1 我们搞清楚了”互联网是什么”——终端设备、通信链路、分组交换。今天,我们要钻进互联网的心脏:网络核心,然后搞懂计算机网络最重要的一张图——分层模型。
一、网络核心:互联网的心脏#
1.1 什么是网络核心?#
如果网络边缘是”用户的地盘”,那网络核心就是”快递公司的转运中心”。
你在家用手机打开 bicheng 的博客,一个 HTTP 请求从你的手机发出,到达阿里云 ECS,再被 frp 转发到 Mac mini 上的 nginx。这中间——从你的运营商到阿里云机房之间——数据穿越的那个由无数路由器交织而成的网状结构,就是网络核心(Network Core)。
1 | 你的手机(边缘) 阿里云 ECS(边缘) |
网络核心的核心任务只有两个字:转发。
数据进来了,路由器看一眼目的地,然后丢给下一个路由器,就像快递到了中转站,分拣员扫一下面单,扔到对应的传送带上。
🏭 生活类比:快递转运中心
你寄一个包裹从上海到北京,包裹不会直达。它先到片区驿站→区级分拣中心→上海市转运中心→(走高速公路)→北京市转运中心→区级分拣中心→收件人小区驿站。网络核心就是那些”转运中心 + 高速公路”的组合。
1.2 网络核心的两种基本工作方式#
这里就是本 Day 2 的第一个重头戏——网络核心怎么转发数据?历史上出现了两条路线:
- 分组交换(Packet Switching) —— 现代互联网的选择
- 电路交换(Circuit Switching) —— 传统电话网的选择
这场对决,堪称网络界的”关公战秦琼”。
二、分组交换 vs 电路交换:世纪对决#
2.1 电路交换:老大哥的独占专线#
电路交换是最早的通信方式,源于电话网络。
它的工作流程分三步:
- 建立连接:通信前,先在收发双方之间预留一条端到端的物理路径
- 数据传输:独占这条路径传输数据
- 释放连接:通信结束后,释放资源
☎️ 生活类比:打电话
你拨通老王的电话,运营商在你的电话和老王的电话之间建立了一条专用电路。这条电路是你俩独享的——就算你们俩都不说话(静默),这条线路的资源也一直被占着,别人用不了。挂电话后,资源才释放。
电路交换的关键特点: 资源预留,链路独占。
电路交换的致命问题#
- 资源浪费严重:通话时 50% 时间是沉默的,但这些带宽白白浪费了
- 建立连接慢:每次通信前要建立端到端路径,延迟高
- 可扩展性差:如果 1000 个人同时打电话,就需要预留 1000 条电路
2.2 分组交换:互联网的选择#
分组交换是现代互联网的核心技术。
它不做资源预留,所有用户共享网络链路。数据被切分成一个个分组(Packet),每个分组独立路由,到达目的地后重新组装。
📦 生活类比:寄快递
你要寄 100 本书,不包一辆专车(电路交换),而是分成 100 个包裹,每个包裹贴上收件地址,通过快递网络分别投递。有的包裹走北京,有的走上海中转,但最终都能到达。收件人收到后按编号拼好就行。
分组交换的关键特点: 资源共享,链路竞争,存储转发。
存储转发(Store and Forward)#
还记得 Day 1 提过的吗?路由器必须完整接收一个分组后,才能开始转发。这就是存储转发机制。
这意味着每个分组在经过的每个路由器上,都要经历”接收→检查→转发”的过程。
排队延迟和丢包#
因为链路是共享的,如果多个分组同时到达同一条链路,就需要排队等待。路由器的缓冲区(队列)长度有限,如果队列满了——后来的分组就会被丢弃(Drop)。
这就是网络中丢包(Packet Loss) 的根本原因。
1 | 分组A ──→ ┌─────────┐ ┌─────────┐ |
🚗 生活类比:高速公路收费站
节假日高速免费,大量车涌向收费站(路由器)。收费站的通过速率是有限的,车多了就排队。如果排队排到匝道都满了(缓冲区满),新来的车直接被劝返(丢包)。
2.3 两种交换方式的深度对比#
| 对比维度 | 电路交换 | 分组交换 |
|---|---|---|
| 资源分配 | 独占预留 | 统计共享 |
| 建立连接 | 需要先建立电路 | 不需要,直接发送 |
| 传输方式 | 比特流直接通过 | 分组存储转发 |
| 延迟特性 | 固定延迟(稳) | 可变延迟(抖动) |
| 丢包可能 | 不会丢(有保障) | 会丢包(无保障) |
| 资源利用率 | 低(沉默也占资源) | 高(共享,按需使用) |
| 适用场景 | 实时语音/传统电话 | 数据传输(网页、文件、视频) |
| 可扩展性 | 差 | 极好 |
🤔 思考一下
为什么互联网最终选择了分组交换?
因为数据传输天然就是突发性的(Bursty)。你看网页的时候,点一下发送请求,然后读 10 秒页面,再点一下。大部分时间链路是空闲的。分组交换让所有人共享链路,利用率远高于独占模式。
电话就不一样了,通话期间持续产生数据流,独占反而合理。但现代 VoLTE 其实也用分组交换了——技术进步就是这么无情。
2.4 分组交换实战:你的 frp 隧道#
你的博客架构本身就是分组交换的绝佳案例:
1 | 用户浏览器 |
你的每一个 HTTP 请求,都不是一条”专线”走到底。它被切成几十个分组,在网络核心中和无数其他人的分组挤在同一条光纤上,排队、转发、排队、转发……最终到达你的 Mac mini。
如果你在 Mac mini 上跑 tcpdump 或 Wireshark,你可以亲眼看到这些分组的到达:
1 | # 在 Mac mini 上抓包看看 |
你会看到分组是一个一个到达的,中间有微小的时间间隔——那就是排队延迟和传播延迟的真实体现。
三、分层模型:互联网的”千层饼”#
终于来了!分层模型是整个计算机网络最重要的概念框架。理解了分层,你就理解了互联网设计的哲学。
3.1 为什么要分层?#
先讲个故事。
假设你在写一个博客系统(你现在确实在做这件事)。你的技术栈可能是这样的:
1 | Hexo(生成 HTML 静态文件) |
每一层只关心自己的事情,不操心其他层:
- 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 | # 从 Mac mini 看看到达百度服务器的路由 |
第 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 | ┌─────────────────┐ ┌─────────────────┐ |
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 | 用户请求到达 nginx,nginx 准备返回 HTML: |
每层的专业术语:
| 层 | 数据单元名称 | 类比 |
|---|---|---|
| 应用层 | 报文(Message) | 信纸上写的信 |
| 传输层 | 报文段(Segment)(TCP)/ 数据报(Datagram)(UDP) | 装进信封的信 |
| 网络层 | 数据报(Datagram) | 贴了邮票和地址的信封 |
| 链路层 | 帧(Frame) | 放进邮袋的包裹 |
✉️ 生活类比:俄罗斯套娃信封
你写了一封信(HTML 数据),装进一个 TCP 信封(加了端口号),再装进一个 IP 信封(加了 IP 地址),最后装进一个以太网信封(加了 MAC 地址)。每到一个路由器,拆掉最外层信封,看看地址,再装一个新的外层信封继续转发。
3.7 实战:你的博客系统中的分层#
让我们把分层模型映射到你的实际系统:
1 | 用户在浏览器输入 bc970321.cn |
你可以在 Mac mini 上验证这一切:
1 | # 查看 MAC 地址(数据链路层) |
每条命令都在验证一个不同的层——这就是分层的力量,你可以独立地观察和调试每一层。
四、ISP 与互联网的结构#
最后补充一个概念:互联网不是一个单一的网络,而是由多个 ISP(Internet Service Provider,互联网服务提供商) 互联而成的”网络的网络”。
1 | ┌──────────────┐ |
- 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) |
🎯 关键知识点回顾#
- 网络核心 = 路由器 + 链路构成的网状结构,核心任务是转发分组
- 电路交换 = 建立连接→传输→释放,资源独占(传统电话)
- 分组交换 = 数据切块独立传输,资源共享(现代互联网)
- 互联网选择分组交换,因为数据传输天然是突发的
- OSI 七层 = 应、表、会、传、网、链、物(教学模型)
- TCP/IP 四层 = 应用、传输、网际、网络接口(工程模型)
- 封装 = 数据从上到下经过每层时被加上头部,像套娃一样
- ISP 层级 = 互联网是”网络的网络”,由多层级 ISP 互联而成
📌 Day 3 预告:应用层概述、Web & HTTP 协议
从明天开始,我们正式进入 TCP/IP 的第一层——应用层!我们会聊聊:
- 应用层是干什么的?网络应用架构(C/S 和 P2P)
- HTTP 协议详解——你的 nginx 天天在处理的东西
- HTTP 请求和响应的格式,Cookie、缓存机制
- 为什么 HTTPS 比 HTTP 多了一层 TLS?
明天见!👋
本文是基于《计算机网络:自顶向下方法》(第8版)的读书笔记,结合实际操作经验编写。