📄 一句话概括
一次网页访问里,DNS 管名字、TCP 管送达、HTTP 管格式、IP 管寻址。 四个协议各管一段,谁也不替代谁。
📝 本节和前面几节的关系
前面几节分别看了 IP、TCP、DNS。这一节把四个协议摆到一条时间轴上,这是第一章的收口。
一、一条时间轴上的四个角色
顺序是固定的:先问名字(DNS)→ 再建连接(TCP)→ 再发请求(HTTP)。 IP 不在这条轴上,它贯穿始终:每一个 DNS 包、每一个 TCP 包,都装在 IP 包里。 四者分工口诀:DNS 找门牌、IP 走路、TCP 保证不丢、HTTP 说人话。
二、数一数往返
Demo 里把一条完整链路拆成五步,往返次数加起来是 4 个:DNS 一次、TCP 握手一次、 HTTP 请求响应对一次、挥手一次。 跨城按 40 毫秒算,什么都不干就要 160 毫秒。这还没算服务端自己的处理时间。 所以优化网页速度的优先顺序通常是: 减少往返(复用连接、缓存、CDN)> 减少字节(压缩、图片优化)> 优化服务端计算。 往返是乘数,字节和计算只是加数。
三、每个协议只管自己那一段
| 协议 | 负责 | 不负责 |
|---|---|---|
| DNS | 名字 → 地址 | 连接、内容、加密 |
| IP | 逐跳转发到目的地址 | 顺序、重传、可靠性 |
| TCP | 可靠字节流、流量与拥塞控制 | 内容格式、身份 |
| HTTP | 请求响应的语义与格式 | 底下怎么送、送丢了怎么办 |
| 这张表要背下来。后面遇到任何「为什么这里不生效」,先问一句:这件事归哪一层管? | ||
| 归错了层,怎么改都没用。 | ||
| 比如「页面加载慢」——如果 DNS 慢,改图片没用;如果往返多,压缩正文收效有限; | ||
| 如果服务端慢,加带宽纯属浪费。 |
四、动手 Demo:把一条链路拆成五步,数往返
不测网络,只把步骤列出来、把往返数加起来, 再按跨城 40 毫秒折成毫秒——这是一个可以直接拿去估算的模型。
steps = [
(u'① 问 DNS', u'UDP 53', 1),
(u'② DNS 回答', u'UDP 53', 0),
(u'③ 建 TCP 连接', u'TCP 三次握手', 1),
(u'④ 发请求等响应', u'HTTP/1.1', 1),
(u'⑤ 关连接', u'TCP 四次挥手', 1),
]
trips = sum(r for _, _, r in steps)
print(trips, trips * 40, u'毫秒')
实跑输出:
--------------------------------------------------------------------
一次请求里,四个协议各自负责哪一段
--------------------------------------------------------------------
① 浏览器问 DNS:example.com 在哪 UDP 53,往返 1
② DNS 回答:93.184.216.34 UDP 53,往返 0
③ 和这个地址建 TCP 连接 TCP 三次握手,往返 1
④ 发 HTTP 请求、等响应 HTTP/1.1,往返 1
⑤ 关连接(或留着复用) TCP 四次挥手,往返 1
合计往返次数 4 个
跨城按 40 毫秒/往返 160 毫秒
DNS 管名字到地址 不管连接,也不管内容
TCP 管可靠传输 不管传的是什么
HTTP 管内容格式 不管底下怎么送
这张表就是第一章的骨架:先把「谁管哪一段」分清,后面十一章才不会混在一起。
合计往返次数 4 个、跨城按 40 毫秒/往返 160 毫秒——这条链路什么都没做,
光是走完协议就要一百六十毫秒。
注意 ② 的往返是 0:答案回来那一段已经算在 ① 的往返里了。数往返最容易数重,口径要先说清。
如果把 ⑤(挥手)去掉、把 ①(DNS)缓存掉、把 ③(握手)复用掉,
就只剩 ④ 的 40 毫秒——这就是 HTTP/2 + 连接复用 + DNS 缓存的效果。
30 秒实验
- 把跨城 40 毫秒改成同机房 1 毫秒,重算,看总耗时变成多少。
- 加上「DNS 缓存命中」和「连接复用」两个条件,重新数往返。
- 想一想:HTTP/3 把 TCP 换成 QUIC 之后,①③④ 各变成几次往返。
常见误区
- 「HTTP 自己会重传」——它不会,重传是 TCP 的事。
- 「DNS 每次都要查」——缓存命中时是零往返。
- 「少传字节就能变快」——往返数是乘数,字节是加数,先砍乘数。
自测三问(点开对答案)
1. 一次全新的页面访问,最少几个往返? —— DNS 一个、TCP 握手一个、请求响应一个,共三个。挥手算上就是四个。 2. 为什么说「往返是乘数」? —— 每个请求都要付往返的代价,请求越多乘得越狠;字节和计算只在单次里加。 3. 「页面慢」该先查哪一层? —— 先分段计时:解析、连接、首字节、传输。哪段占比高就查哪一层。链路走通了。最后两节把「地址」这个东西本身拆开:URI 到底由什么组成。
- ☐ (本节完,下一节 1.7.1 统一资源标识符)
相关笔记
- 12 课 · 计算机网络(协议栈全景)
- 19 课 · 网络与信息安全(每一层的攻击面)
- 📘 图解HTTP · 索引