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物理层、链路层与以太网比特如何在相邻设备间传输
03IP、子网与路由包如何跨网络找到目标机器
04ARP、ICMP 与 NAT地址解析、诊断、内外网转换
05UDP不保证可靠的传输为什么仍然有用
06TCP 基础可靠字节流、握手、挥手、重传
07TCP 流量控制、拥塞控制与性能为什么网络不是你想发多快就发多快
08DNS域名如何变成 IP
09HTTP/1.1、HTTP/2、HTTP/3应用协议如何表达请求响应
10TLS/HTTPS加密、身份认证和完整性如何实现
11代理、网关、负载均衡与 CDN多个服务如何被组织成统一入口
12网络排障超时、连接失败、慢请求如何定位

本模块固定观察点

  1. 数据在每层长什么样。
  2. 这一层解决什么问题,依赖下一层提供什么能力。
  3. 出错时能看到什么现象。
  4. 真实系统如何配置、调优、排障。

本模块读法

网络必须按“路径”读,不要按孤立名词背:

应用数据
-> 应用协议 HTTP/DNS/TLS
-> 传输层 TCP/UDP
-> 网络层 IP/路由/NAT
-> 链路层 Ethernet/Wi-Fi
-> 物理介质
-> 反向解封装到对端进程

每一层都要问:

这一层的地址是什么?
这一层的数据单位是什么?
这一层解决什么问题?
这一层不保证什么?
失败时应用能看到什么现象?

延伸阅读