README · computer-networks
计算机网络
计算机网络研究的是:一台机器上的程序,如何可靠、可控、高效地和另一台机器上的程序交换数据。
对 CS 学生来说,网络不是“会上网”这么简单。网页访问、远程登录、文件传输、分布式系统、在线游戏、视频会议、云服务,本质都是进程跨机器交换信息。
本模块适合写成的博客问题
| 问题 | 对应章节 |
|---|---|
| 一次请求为什么要经过这么多层? | 00-01 从 0 理解网络、分层与封装 |
| 为什么知道 IP 还要知道 MAC? | 02-04 链路层、IP、ARP |
| 为什么 TCP 连接成功了,读取响应仍然会超时? | 06-07 TCP 基础与性能 |
| 为什么域名改了,还有人访问旧地址? | 08 DNS |
| HTTPS 到底保护了什么,又不保护什么? | 10 TLS/HTTPS |
| 502、503、504 到底是谁返回的? | 11-12 代理、网关、CDN 与网络排障 |
学习路线
| 顺序 | 章节 | 核心问题 |
|---|---|---|
| 00 | 从 0 开始理解计算机网络 | 一次请求到底经过了什么 |
| 01 | 分层、封装与解封装 | 为什么网络要分层 |
| 02 | 物理层、链路层与以太网 | 比特如何在相邻设备间传输 |
| 03 | IP、子网与路由 | 包如何跨网络找到目标机器 |
| 04 | ARP、ICMP 与 NAT | 地址解析、诊断、内外网转换 |
| 05 | UDP | 不保证可靠的传输为什么仍然有用 |
| 06 | TCP 基础 | 可靠字节流、握手、挥手、重传 |
| 07 | TCP 流量控制、拥塞控制与性能 | 为什么网络不是你想发多快就发多快 |
| 08 | DNS | 域名如何变成 IP |
| 09 | HTTP/1.1、HTTP/2、HTTP/3 | 应用协议如何表达请求响应 |
| 10 | TLS/HTTPS | 加密、身份认证和完整性如何实现 |
| 11 | 代理、网关、负载均衡与 CDN | 多个服务如何被组织成统一入口 |
| 12 | 网络排障 | 超时、连接失败、慢请求如何定位 |
本模块固定观察点
- 数据在每层长什么样。
- 这一层解决什么问题,依赖下一层提供什么能力。
- 出错时能看到什么现象。
- 真实系统如何配置、调优、排障。
本模块读法
网络必须按“路径”读,不要按孤立名词背:
应用数据
-> 应用协议 HTTP/DNS/TLS
-> 传输层 TCP/UDP
-> 网络层 IP/路由/NAT
-> 链路层 Ethernet/Wi-Fi
-> 物理介质
-> 反向解封装到对端进程
每一层都要问:
这一层的地址是什么?
这一层的数据单位是什么?
这一层解决什么问题?
这一层不保证什么?
失败时应用能看到什么现象?