1 题型 - HTTP连接
408 学习笔记:1 题型 - HTTP连接。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。
本页目录
描述: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 解题步骤
- 圈出协议版本和
Connection条件,判断非持久还是持久。 - 找出“流水线、非流水线、并行连接”条件;没有明确流水线时不要擅自使用。
- 明确计时起点:DNS 前、TCP 建连前、还是已经发出 HTTP 请求。
- 按题设先画主 HTML,再画引用对象;若题目采用本节经典模型,引用对象请求晚于主 HTML 完整到达。
- 小对象题按 RTT 公式;给出 MSS、窗口或文件大小时,按 TCP 发送轮次逐 RTT 计算。
- 检查能否把第三次握手与 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 图像当成瞬间到达的小对象。
相关知识
- 科目导航:计算机网络导航
- 阅读顺序:上一篇:SNMP 与网络管理 · 下一篇:DHCP 应用
- 关联专题:应用层总纲
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。