Network · Chapter 04

第 4 章 · 一次访问的旅程

The Journey of One Visit · From URL to Pixels

前三章你学了一堆零件:HTTP 怎么说话、TCP 怎么握手、IP 怎么认路、分层怎么分工。这一章不添新零件,只做一件事——把它们装成一台能跑的机器。你按下回车那一瞬间,这些东西会依次登场、各干一段活儿,最后在屏幕上拼出一个页面。这一章就带你从头到尾走一遍。

生活场景
📦 你在手机上点开一个商品页

你正躺在沙发上刷手机,朋友发来一个链接:https://shop.example.com/item/8848
你点了一下。屏幕白了小半秒,然后商品图、价格、评价一块块冒出来。你的感觉是"点一下就开了"。

但在这小半秒里,你的手机干了七件截然不同的事:看懂这串字 → 查这个名字对应哪台机器 → 跟那台机器接上线 → 互相验明身份并商定密语 → 把要求说出去 → 收下回话 → 把收到的文字画成画面
七件事,七套完全不同的规矩,涉及至少四层协议和三四台你从没听说过的中间设备。

这一章要做的,就是把这半秒钟拉长成一部慢动作电影,让你看清每一帧里谁在动。

本章要回答什么

说白了,这一章要回答的只有一个问题:"点一下就开了"这句话,中间被省略掉的是什么?拆开来是六个小问题,正好对应六节:

把这一次访问想成"一次跨城取货"
你在便利店门口的自提柜前,想取一件从外地寄来的东西。

第一步,你得看懂取件码——那串字符里哪几位是柜子编号、哪几位是格口号、哪几位是校验位。看错一位就开错柜门。这是 § 4.1 URL 解析

第二步,你手上只有店名没有地址——"城东那家老李杂货店"在哪条路几号?你得先查一下。这是 § 4.2 DNS 查询:你只记名字,它帮你查门牌号。

第三步,你得先跟对方接上头——打个电话:"在吗?""在。""行,我到了。"三句话确认双方都听得见,才好办事。这是 § 4.3 TCP 三次握手

第四步,如果这是贵重物品,双方还要互相验证身份:对方出示营业执照(还得是有公章的、公章还得能被工商局认),然后你俩当面约定一句只有彼此知道的暗语,后面说话全用暗语说。这是 § 4.4 TLS 握手

第五步,你终于可以开口了:"我要取 8848 号那件,我是老客户,能不能给我发轻一点的包装。"对方回:"给你,这是货,另外提醒你这货三天后降价。"这是 § 4.5 请求与响应

第六步,货到手了但还没能用——它是散件加一本说明书,你得照着图纸拼起来才成为一个能看的东西。这是 § 4.6 浏览器渲染

最要紧的一点:这六步是严格串行的——前一步没拿到结果,后一步压根开不了工。所以网页慢的原因往往不是"网速不够",而是这条链子上某一环卡住了。学会这一章,你就能指着说"卡在第几环"。

七个阶段的全流程地图

先看地图,再走路。下面这张表把从按下回车到画面出现的整个过程列成七个阶段。耗时那一栏只给量级不给精确数字——因为它严重依赖你的网络环境、离服务器多远、有没有缓存,任何"平均 X 毫秒"的说法都不可靠。

#阶段这一步在干什么耗时量级讲在哪
0浏览器自己的准备判断你输的是网址还是搜索词、补全协议、查自己的各级缓存、检查是否强制 HTTPS微秒到毫秒级(本机操作)§ 4.1
1URL 解析把一整串字拆成协议、主机、端口、路径、查询、片段等七个零件微秒级(纯字符串处理)§ 4.1
2DNS 查询把域名换成 IP。命中缓存几乎不耗时;要往外问就是一到几个来回命中缓存约等于零;未命中通常几十毫秒级,跨国或递归多跳会更久§ 4.2
3TCP 三次握手跟服务器建立一条可靠通道,双方各自记下连接状态约一个 RTT(往返时间);同城常在十毫秒级,跨洲可达百毫秒级§ 4.3
4TLS 握手验证服务器证书、协商加密套件与会话密钥TLS 1.3 约一个 RTT,TLS 1.2 约两个 RTT;会话复用可更短§ 4.4
5发请求 + 等响应发出请求报文,服务器处理后返回状态码与 HTML一个 RTT 的往返 + 服务器处理时间(快的毫秒级,慢的可到秒级)§ 4.5
6浏览器渲染解析 HTML/CSS → 构建 DOM/CSSOM → 渲染树 → 布局 → 绘制 → 合成简单页面毫秒级;复杂页面加上脚本执行可到数百毫秒甚至更久§ 4.6

这张表里最值得先记住的一句话是:前六个阶段几乎全在"等来回",最后一个阶段几乎全在"算"。换成大白话——网络阶段慢是因为路远,渲染阶段慢是因为活多。这两种慢的治法完全不同:路远要靠把服务器搬近(CDN),活多要靠少干活儿(精简页面)。整章会反复回到这个区分上。

本章的六节

§ 4.1

输入网址与 URL 解析

URL 的七个部分、浏览器在联网之前先干的那几件事、以及中文域名与百分号编码。

§ 4.2

DNS 查询

浏览器缓存 → 系统缓存 → hosts 文件 → 递归解析器 → 根 → 顶级域 → 权威,一路问到 IP。

§ 4.3

建立 TCP 连接

三次握手在真实访问里的位置、源端口是怎么分配的、连接复用为什么这么重要。

§ 4.4

TLS 握手

证书链怎么验、密钥怎么在明面上商定、TLS 1.3 为什么比 1.2 少一个来回。

§ 4.5

发送请求与服务器响应

请求行与请求头的每个字段在干什么、服务器那头经过几道手、响应头怎么影响后面的一切。

§ 4.6

浏览器渲染

DOM 与 CSSOM、渲染树、布局与绘制、合成,以及重排与重绘到底差在哪。

学之前先记住这一点

这一章的性质和前三章不一样。前三章是"认识零件",这一章是"看装配线"。所以读法也不同:不要求你记住新术语,只要求你记住顺序依赖关系说白了,前三章告诉你螺丝刀和扳手长什么样,这一章告诉你它们按什么次序上场。下面五条是全章的骨架,先记住它们,读起来会轻松很多。

Recap · 收束

这一章是网络篇的"合流点"——前三章的零散知识在这里汇成一条完整的数据流。
七个阶段:准备 → 解析网址 → 查 IP → 建连接 → 加密握手 → 请求响应 → 渲染。严格串行,前一步的产物就是后一步的输入。
读完这一章,你应该能做到一件很实用的事:页面打不开或者很慢时,你能把问题定位到七步中的哪一步——是域名解析不了、是连不上、是证书有问题、是服务器返回慢,还是页面自己画得慢。这五种毛病的排查方法完全不同,而绝大多数人只会说一句"网卡了"。

☰ 主页
Xue Hai Wu Ya · Network · Chapter 04