Computer Networks (CS3611)

Aronkk

这篇笔记按自顶向下的方法整理计算机网络:先看应用怎样使用网络,再向下理解传输层、网络层和链路层分别解决什么问题。

总览

互联网的核心目标是把不同主机上的进程连接起来。分层设计的意义在于把复杂问题拆开:应用层关心语义,传输层关心端到端通信,网络层关心跨网络寻址和转发,链路层关心一跳之内的帧传输。

常见五层模型:

层次 典型协议 核心问题
应用层 HTTP, DNS, SMTP 应用数据如何表示、请求和响应
传输层 TCP, UDP 进程到进程的数据交付
网络层 IP, ICMP, OSPF, BGP 主机到主机的路径选择与转发
链路层 Ethernet, Wi-Fi, ARP 相邻节点之间的帧传输
物理层 光纤、电信号、无线电 比特如何变成物理信号

端到端时延可以粗略分解为

其中传输时延和传播时延分别为

是分组长度, 是链路速率, 是链路长度, 是信号传播速度。注意二者含义不同:传输时延是“把分组推上链路”的时间,传播时延是“信号在链路上跑”的时间。

应用层

Web 和 HTTP

  • HTTP 是一个无状态协议(stateless protocol),即服务器不会默认保存客户端的会话状态。Cookie、Session 和 Token 是在无状态协议之上人为维护状态的机制。
  • 非持续连接:每个对象传输前都要建立 TCP 连接,用完即断,如下图:

HTTP-Connection

  • 持续连接:多个对象复用同一个 TCP 连接,一段时间不使用后再关闭连接。HTTP/1.1 默认使用持续连接。
  • HTTP/2 在一个 TCP 连接上引入多路复用,减少 HTTP/1.1 队头阻塞;HTTP/3 基于 QUIC,把可靠传输和拥塞控制搬到 UDP 之上。

HTTP 请求报文

HTTP Request HTTP Response
  • 请求行方法:
    • GET:请求对象,最常用,应尽量保持幂等。
    • POST:使用**实体体(entity body)**提交表单或资源。
    • HEAD:类似 GET,但不返回对象主体,常用于检查元信息。
    • PUT:上传或替换对象,语义上通常是幂等的。
    • DELETE:删除对象。
  • 常见状态码:
    • 200 OK:请求成功。
    • 301 Moved Permanently:永久重定向。
    • 304 Not Modified:缓存仍然有效。
    • 404 Not Found:资源不存在。
    • 500 Internal Server Error:服务器内部错误。

若一个 HTML 页面引用 个小对象,且每次建立 TCP 连接都需要一次 RTT,非持续 HTTP 的理想化时间近似为

持续连接则可以减少重复握手,近似为

这个估计忽略了浏览器并行连接、服务器处理、拥塞控制慢启动等因素,但有助于理解为什么复用连接很重要。

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)的核心思想是把内容复制到靠近用户的边缘节点,用空间换时间。命中缓存时,请求可以在边缘节点返回;未命中时,边缘节点再回源拉取。

缓存命中率为 ,命中时延为 ,回源时延为 ,则平均时延可写作

因为通常 ,所以提升命中率对大规模 Web 服务非常关键。

传输层

UDP

UDP 提供无连接、不可靠、面向报文的传输服务。它没有拥塞控制、流量控制和重传机制,因此开销小,适合 DNS、实时音视频、QUIC 等场景。

UDP 校验和使用一补和(one’s complement sum)。若所有 16-bit 字相加后得到的和为 ,则校验和为

接收端把数据和校验和一起相加,若结果全为 1,则认为没有检测到错误。

TCP

TCP 提供可靠、按序、面向字节流的传输服务,核心机制包括:

  • 序号与确认号:标识字节流位置。
  • 超时重传:丢包后重发。
  • 快速重传:收到多个重复 ACK 后提前重传。
  • 流量控制:接收方通过 advertised window 限制发送方。
  • 拥塞控制:根据网络拥塞程度调整发送速率。

估计 RTT 常用指数加权移动平均:

超时时间通常设为

其中 描述 RTT 波动。这个设计体现了一个原则:网络不稳定时,超时阈值要更保守。

TCP 拥塞控制

TCP 发送窗口大致满足

其中 是拥塞窗口, 是接收窗口。经典 TCP Reno 的核心阶段:

  • 慢启动(slow start):每个 RTT 后 近似翻倍。
  • 拥塞避免(congestion avoidance):每个 RTT 后 线性增加。
  • 丢包处理:超时通常更严重,三次重复 ACK 通常触发快速重传和快速恢复。

若忽略慢启动和超时,TCP Reno 的吞吐量可粗略近似为

其中 是丢包率。这个公式说明:丢包率上升会显著降低 TCP 吞吐量,高 RTT 链路也更难跑满带宽。

网络层

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)检测比特错误。发送方把数据多项式 左移 位后除以生成多项式 ,得到余数 ,发送

接收端用同一个 去除 ,如果余数为 0,则认为没有检测到错误。CRC 不能保证发现所有错误,但对突发错误很有效。

多路访问

共享介质需要解决多个节点同时发送的问题:

  • 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、多路访问和差错检测。

网络的每一层都在限定范围内解决“把数据交给谁、怎样交、错了怎么办、太多人抢怎么办”的问题。