Computer Networks (CS3611)
这篇笔记按自顶向下的方法整理计算机网络:先看应用怎样使用网络,再向下理解传输层、网络层和链路层分别解决什么问题。
总览
互联网的核心目标是把不同主机上的进程连接起来。分层设计的意义在于把复杂问题拆开:应用层关心语义,传输层关心端到端通信,网络层关心跨网络寻址和转发,链路层关心一跳之内的帧传输。
常见五层模型:
| 层次 | 典型协议 | 核心问题 |
|---|---|---|
| 应用层 | HTTP, DNS, SMTP | 应用数据如何表示、请求和响应 |
| 传输层 | TCP, UDP | 进程到进程的数据交付 |
| 网络层 | IP, ICMP, OSPF, BGP | 主机到主机的路径选择与转发 |
| 链路层 | Ethernet, Wi-Fi, ARP | 相邻节点之间的帧传输 |
| 物理层 | 光纤、电信号、无线电 | 比特如何变成物理信号 |
端到端时延可以粗略分解为
其中传输时延和传播时延分别为
应用层
Web 和 HTTP
- HTTP 是一个无状态协议(stateless protocol),即服务器不会默认保存客户端的会话状态。Cookie、Session 和 Token 是在无状态协议之上人为维护状态的机制。
- 非持续连接:每个对象传输前都要建立 TCP 连接,用完即断,如下图:

- 持续连接:多个对象复用同一个 TCP 连接,一段时间不使用后再关闭连接。HTTP/1.1 默认使用持续连接。
- HTTP/2 在一个 TCP 连接上引入多路复用,减少 HTTP/1.1 队头阻塞;HTTP/3 基于 QUIC,把可靠传输和拥塞控制搬到 UDP 之上。
HTTP 请求报文
- 请求行方法:
- GET:请求对象,最常用,应尽量保持幂等。
- POST:使用**实体体(entity body)**提交表单或资源。
- HEAD:类似 GET,但不返回对象主体,常用于检查元信息。
- PUT:上传或替换对象,语义上通常是幂等的。
- DELETE:删除对象。
- 常见状态码:
200 OK:请求成功。301 Moved Permanently:永久重定向。304 Not Modified:缓存仍然有效。404 Not Found:资源不存在。500 Internal Server Error:服务器内部错误。
若一个 HTML 页面引用
持续连接则可以减少重复握手,近似为
这个估计忽略了浏览器并行连接、服务器处理、拥塞控制慢启动等因素,但有助于理解为什么复用连接很重要。
DNS
- DNS 是一个由分层 DNS server 实现的分布式数据库,DNS 协议通常运行在 UDP 上,使用 53 号端口。
- DNS 解析过程常涉及 root server、TLD server、authoritative server 和 local DNS server。
- 常见记录类型:
A:域名到 IPv4 地址。AAAA:域名到 IPv6 地址。CNAME:别名到规范域名。MX:邮件服务器。NS:权威 DNS 服务器。
DNS 缓存通过 TTL 控制有效时间。TTL 越大,缓存命中率越高,解析时延越低;但域名迁移或故障切换的生效速度越慢。
SMTP(简单邮件传输协议)
- 与 HTTP 不同,SMTP 使用前需要将多媒体数据编码为 ASCII 码,例如通过 MIME 封装附件。
- SMTP 主要负责邮件服务器之间的推送,用户读取邮件通常使用 POP3、IMAP 或 Webmail。
- HTTP 是 pull 型协议,客户端主动拉取对象;SMTP 是 push 型协议,发送方主动把邮件推给接收方邮件服务器。
CDN 与缓存
CDN(Content Delivery Network)的核心思想是把内容复制到靠近用户的边缘节点,用空间换时间。命中缓存时,请求可以在边缘节点返回;未命中时,边缘节点再回源拉取。
缓存命中率为
因为通常
传输层
UDP
UDP 提供无连接、不可靠、面向报文的传输服务。它没有拥塞控制、流量控制和重传机制,因此开销小,适合 DNS、实时音视频、QUIC 等场景。
UDP 校验和使用一补和(one’s complement sum)。若所有 16-bit
字相加后得到的和为
接收端把数据和校验和一起相加,若结果全为 1,则认为没有检测到错误。
TCP
TCP 提供可靠、按序、面向字节流的传输服务,核心机制包括:
- 序号与确认号:标识字节流位置。
- 超时重传:丢包后重发。
- 快速重传:收到多个重复 ACK 后提前重传。
- 流量控制:接收方通过 advertised window 限制发送方。
- 拥塞控制:根据网络拥塞程度调整发送速率。
估计 RTT 常用指数加权移动平均:
超时时间通常设为
其中
TCP 拥塞控制
TCP 发送窗口大致满足
其中
- 慢启动(slow start):每个 RTT 后
近似翻倍。 - 拥塞避免(congestion avoidance):每个 RTT 后
线性增加。 - 丢包处理:超时通常更严重,三次重复 ACK 通常触发快速重传和快速恢复。
若忽略慢启动和超时,TCP Reno 的吞吐量可粗略近似为
其中
网络层
IP 与转发
IP 提供 best-effort 服务:尽力而为,但不保证可靠、不保证按序、不保证时延。路由器根据目的 IP 和转发表做最长前缀匹配(longest prefix matching)。
IPv4 地址由网络号和主机号组成。CIDR 写法如
192.168.1.0/24,表示前 24 位是网络前缀。一个
/k 网络最多包含
个 IPv4 地址,其中部分地址可能保留作网络地址、广播地址或特殊用途。
NAT
NAT(Network Address Translation)把私有地址映射成公网地址和端口。它缓解了 IPv4 地址不足,也让内网主机默认不直接暴露在公网,但会破坏端到端可达性,使 P2P、VoIP 等应用需要额外穿透机制。
路由算法
Dijkstra 算法
链路状态路由中,每个路由器知道全网拓扑,用 Dijkstra
算法计算最短路。若从源点
Distance Vector
距离向量路由使用 Bellman-Ford 思想。节点
它的优点是分布式、实现简单;缺点是收敛可能较慢,并可能出现 count-to-infinity 问题。
链路层
差错检测
链路层常用 CRC(Cyclic Redundancy
Check)检测比特错误。发送方把数据多项式
接收端用同一个
多路访问
共享介质需要解决多个节点同时发送的问题:
- TDMA:按时间片划分。
- FDMA:按频段划分。
- CSMA/CD:以太网早期半双工冲突检测。
- CSMA/CA:Wi-Fi 中避免冲突,因为无线环境中冲突检测更困难。
ALOHA 的吞吐量可以用一个简单模型理解。Pure ALOHA 在总负载为
最大值出现在
Slotted ALOHA 的脆弱区间减半,因此
ARP
ARP 用于在同一局域网内把 IP 地址解析成 MAC 地址。若主机只知道目的 IP,不知道目的 MAC,会广播 ARP request;目标主机单播 ARP reply。ARP 表缓存解析结果,减少重复广播。
总结
- 应用层:协议语义、报文格式、缓存和 DNS。
- 传输层:UDP 的简单性,TCP 的可靠传输、流量控制和拥塞控制。
- 网络层:IP 的 best-effort 服务、最长前缀匹配、NAT 和路由算法。
- 链路层:帧、MAC 地址、ARP、多路访问和差错检测。
网络的每一层都在限定范围内解决“把数据交给谁、怎样交、错了怎么办、太多人抢怎么办”的问题。