← Back to Learning Notes

1 题型 - HTTP连接

Chinese-language Computer Science 408 note: 1 题型 - HTTP连接. Original source available where applicable.

On this page

This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.

描述:HTTP 连接题的关键是先确定 TCP 连接是否复用、请求是否流水线、是否允许并行连接,再明确计时起点。小对象且忽略发送时延时,通常把一次 TCP 建连或一次请求-响应各计为 1 RTT。

TIP · 章节导航:返回第六章:应用层总纲

1.1 三种连接方式

1.1.1 非持久连接

非持久 HTTP 通常按 HTTP/1.0 模型处理:

  • 每传输一个对象,都新建一条 TCP 连接。
  • 一个对象传完后关闭该连接。
  • 若不允许并行 TCP 连接,各对象只能依次获取。
  • HTTP/1.1 即使通常使用持久连接,若明确设置 Connection: close,也按非持久连接处理。

在忽略 DNS、报文发送时间且对象很小的经典模型中,每个对象需要:

1 RTT:建立 TCP 连接
1 RTT:发送 HTTP 请求并收到响应

所以每个对象共 2 RTT。

1.1.2 持久、非流水线连接

  • 只建立一次 TCP 连接,后续对象继续复用。
  • 客户端必须收到前一个 HTTP 响应后,才发送下一个 HTTP 请求。
  • 在本节经典 RTT 模型中,假定主 HTML 完整到达并解析后才请求其中的引用对象。
  • 每个后续小对象依次增加 1 RTT。

1.1.3 持久、流水线连接

  • TCP 连接仍只建立一次。
  • 按本节 RTT 模型收到并解析主 HTML 后,客户端可连续发出多个引用对象请求,不必等待前一个响应返回。
  • 在忽略对象发送时间的题目模型中,一批流水线请求及响应可合计为 1 RTT。
  • 服务器应按请求顺序返回响应,便于客户端区分。

严谨地说,HTTP/1.1 默认的是持久连接,流水线是可采用的机制,不能只凭“HTTP/1.1”就断定题目一定启用流水线。原 PDF 将其简写为“默认带流水线”;考试计算应以题目明确写出的“流水线/非流水线”为准。

NOTE · 教材补充与纠错:完整 HTML 到达不是实际浏览器的统一门槛 P113 原 PDF 第 3 页的“收齐主 HTML 后才请求引用对象”是离散 RTT 题的简化时序。真实浏览器可边接收边解析 HTML,并在识别到引用对象地址后开始请求;预加载扫描还可能提前发现资源。因此下方公式只适用于题设假定的主对象先完成、后续对象再开始的模型,不能直接当作真实网页加载的普遍下界。参见 HTML Standard 的增量解析与预扫描。

1.2 经典 RTT 公式

设主 HTML 引用 $N$ 个小对象,不考虑 DNS、发送时延、慢开始和并行连接:

模式 从请求建立 TCP 连接开始
非持久、串行 $2(N+1)RTT$
持久、非流水线 $[1+1+N]RTT=(N+2)RTT$
持久、流水线 $1RTT$ 建连 $+1RTT$ 主 HTML $+1RTT$ 全部引用对象,即 $3RTT$

若计时起点已经是“TCP 连接建立后发送主 HTML 请求”,则不再计算第一个建连 RTT。

1.3 2011 年真题:持续非流水线

1.3.1 条件

  • HTTP/1.1 持久连接。
  • 明确使用非流水线方式。
  • 一次请求-响应为 1 RTT。
  • rfc.html 引用 5 幅 JPEG 小图像。
  • 计时从发出 Web 请求开始,不另计 TCP 建连。

1.3.2 计算

rfc.html:1 RTT
5 幅 JPEG:5 × 1 RTT

$$ T=(1+5)RTT=6RTT $$

答案:6 RTT。

如果题目改为从“请求建立 TCP 连接”开始,则还要再加 1 RTT;本题没有这样计时。

1.4 2022 年真题:HTTP 与 TCP 慢开始

1.4.1 条件

HTTP/1.1
主文件 news408.html = 1 MSS
引用图像 = 3 MSS
RTT = 10 ms
已完成 DNS
忽略 HTTP 响应首部和 TCP 段发送时延
从请求建立 TCP 连接时刻计时

题目要求最短时间,因此采用:

  • 一条持久 TCP 连接。
  • 第三次握手捎带主 HTML 的 HTTP 请求。
  • 接收窗口足够大,发送窗口由慢开始拥塞窗口决定。
  • TCP 确认可与下一个 HTTP 请求一起发送。

1.4.2 RTT 过程

RTT 过程
第 1 个 RTT 完成 TCP 建连的前两次握手
第 2 个 RTT H 发送第三次握手并捎带 HTML 请求;S 以 cwnd=1 MSS 发送 1 MSS HTML
第 3 个 RTT H 确认 HTML 并捎带图像请求;S 的窗口增至 2 MSS,发送图像前 2 MSS
第 4 个 RTT H 确认已收图像数据;S 的窗口增至 4 MSS,发送剩余 1 MSS

因此:

$$ T=4RTT=4\times10\ \mathrm{ms}=40\ \mathrm{ms} $$

答案:40 ms。

这里“确认”指 TCP ACK,不是 HTTP 协议单独定义的“HTTP 确认报文”。

1.5 2024 年真题:非持久 HTTP/1.0

1.5.1 条件

  • 浏览器不支持并行 TCP 连接。
  • 使用非持久 HTTP/1.0。
  • 1 个 Web 主页面引用同一网站的 7 个小图像。
  • 从为 Web 页面请求建立 TCP 连接开始计时。

一共需要获取:

$$ 1+7=8 $$

个对象。每个对象独占一条 TCP 连接并消耗 2 RTT:

$$ T=8\times2RTT=16RTT $$

答案:D,16 RTT。

“浏览器不支持并行 TCP 连接”是关键条件;若允许并行,7 幅图像可以分组并行,结果会不同。

1.6 模拟题:持久流水线请求 3 幅图像

1.6.1 条件

  • HTTP/1.1 持久连接。
  • 主页面引用同目录 3 幅 JPEG 小图像。
  • 每次请求-响应时间为 1 RTT。
  • 采用流水线,忽略其他时延。
  • 从请求建立运输层连接开始计时。

1.6.2 计算

建立 TCP 连接:1 RTT
请求并接收主页面:1 RTT
流水线请求并接收 3 幅图像:1 RTT

$$ T=3RTT $$

答案:A,3 RTT。

1.7 请求依赖与捎带

  • 在本节教材模型中,浏览器收齐主 HTML 并解析后才得知其中的引用对象;真实浏览器可在相关 HTML 片段到达后更早发现并请求资源。
  • 按题设的离散 RTT 时序,非流水线逐个请求;流水线可把多个请求连续发出。
  • TCP 第三次握手可以在题目允许时捎带第一个 HTTP 请求,从而取得最短时间。
  • 收到一个对象数据后的 TCP ACK 可以与下一个对象的 HTTP 请求同段发送。
  • 响应中的数据量较大时,还要结合 MSS、拥塞窗口、接收窗口和传输轮次,不能只套“小对象 1 RTT”公式。

1.8 解题步骤

  1. 圈出协议版本和 Connection 条件,判断非持久还是持久。
  2. 找出“流水线、非流水线、并行连接”条件;没有明确流水线时不要擅自使用。
  3. 明确计时起点:DNS 前、TCP 建连前、还是已经发出 HTTP 请求。
  4. 按题设先画主 HTML,再画引用对象;若题目采用本节经典模型,引用对象请求晚于主 HTML 完整到达。
  5. 小对象题按 RTT 公式;给出 MSS、窗口或文件大小时,按 TCP 发送轮次逐 RTT 计算。
  6. 检查能否把第三次握手与 HTTP 请求、TCP ACK 与后续 HTTP 请求捎带。

1.9 易错点

  • HTTP/1.1 默认持久连接,不等于题目必然启用流水线。
  • 持久连接只是复用 TCP;非流水线仍要等前一个响应返回后再发下一个请求。
  • 非持久连接中每个对象通常是 2 RTT,不是整张网页只算 2 RTT。
  • 主页面也算一个对象;“1 个页面引用 7 幅图”共有 8 个对象。
  • 题目若从“发出 Web 请求”计时,可能已经不需要计算 TCP 建连 RTT。
  • 经典 RTT 题假定引用对象等主 HTML 完整到达并解析后才请求;真实浏览器可流式解析并更早发现资源。
  • 大文件题需要计算 TCP 慢开始,不能把 3 MSS 图像当成瞬间到达的小对象。

相关知识

1.10 本节复盘

  • 非持久连接每个对象单独建 TCP,经典小对象模型每个对象耗时 2 RTT。
  • 持久非流水线只建一次 TCP,但每个后续对象仍依次增加 1 RTT。
  • 持久流水线可在收到主 HTML 后批量请求引用对象,经典模型从建连开始共 3 RTT。
  • 2011 年题从 Web 请求开始计时,主页面 1 RTT 加 5 幅图 5 RTT,共 6 RTT。
  • 2022 年题结合慢开始,共 4 RTT,即 40 ms。
  • 2024 年非持久串行获取 1 个页面和 7 幅图,共 $8\times2=16$ RTT,答案 D。
  • 模拟题的 3 幅图采用持续流水线,从建连开始共 3 RTT,答案 A。