第 10 章 · 一次请求的完整旅程

追踪一次真实请求(https://example.com/page),看它在各层如何接力。

10.1 全链路:从 URL 到页面

1. DNS 解析        把 example.com 变成 IP        —— 第 2 章
2. TCP 三次握手    与服务器 443 端口建连          —— 第 3、4 章
3. TLS 握手        协商会话密钥,验证证书         —— 第 8 章
4. HTTP 请求       发出 GET /page               —— 第 2 章
5. 服务器处理      生成响应                      —— 第 2 章
6. HTTP 响应       状态码 + 正文返回             —— 第 2 章
7. 四次挥手        连接优雅关闭                  —— 第 4 章
8. 浏览器渲染      解析 HTML/CSS/JS 画页面        —— 浏览器层

第 2–6 步每次数据下发都再经过 TCP 分段 → IP 分组 → 以太网帧 → 物理信号 逐层封装,跨越多台路由器、交换机(见第 5、6、7 章)。

10.2 逐层拆解

  • ① DNS 解析(第 2 章):查缓存 → 本地 DNS 递归 → 根/顶级域/权威迭代,拿到 IP;命中缓存则跳过。
  • ② TCP 连接(第 3、4 章):随机端口(如 52000)向 443 发 SYN,三次握手建连(connect 在此完成,第 9 章)。
  • ③ TLS 握手(第 8 章):ClientHello → 服务器证书 → 验证 → 协商会话密钥,此后 HTTP 数据全用对称加密。
  • ④ HTTP 请求(第 2 章)
GET /page HTTP/1.1
Host: example.com
Accept: text/html
  • ⑤ 服务器响应(第 2 章):返回 200 OK + HTML。
  • ⑥ 可靠传输(第 4 章):响应被 TCP 分段编号、滑动窗口流水线发送,丢包靠快重传恢复,对应用层透明。
  • ⑦ 路由转发(第 5 章):沿途路由器查路由表选下一跳;跨网段靠 ARP(第 6 章)把下一跳 IP 映射成 MAC。
  • ⑧ 物理传输(第 7 章):比特编码(4B/5B、曼彻斯特)成信号走双绞线/光纤。
  • ⑨ 断开(第 4 章):HTTP/1.1 持久连接复用,空闲后四次挥手关闭,主动方进 TIME_WAIT。

10.3 用 curl 观察

curl -v https://example.com/page      # 打印 DNS、握手、请求全过程

-v 依次显示 Trying <IP>...(DNS 结果)、连接建立、TLS 握手(SSL connection using TLSv1.3)、请求头、响应头。用 tcpdump -i any port 443 抓包,能直接看到 SYN/FIN、TLS ClientHello、HTTP 报文。

10.4 各层知识点对照表

章节在这次请求中做了什么
应用层第 2 章DNS 解析、HTTP 请求/响应
安全层第 8 章TLS 握手、证书验证、加密
传输层第 3、4 章端口寻址、三次握手、可靠传输、拥塞控制
网络层第 5 章IP 寻址、路由转发、ICMP 诊断
链路层第 6 章MAC 寻址、ARP、帧封装
物理层第 7 章信号编码、介质传输