跳转至

从输入 URL 到页面出现

0. 网络接入已经准备了什么

笔记本关联 Wi-Fi 接入点并完成链路认证后,通常通过 DHCP 或 IPv6 自动配置获得:

  • 本机 IP 地址与前缀长度。
  • 默认网关。
  • DNS 递归解析器。
  • 租约和其他网络参数。

如果这里失败,后续连 DNS 都可能无法进行。操作系统先根据路由表决定目的是否本地可达,而不是“所有流量先发给 DNS”。DNS 只负责名称解析,不负责转发业务分组。

1. 浏览器解析 URL

用户输入:

https://www.example.com/

浏览器识别 scheme 为 HTTPS、主机名为 www.example.com、默认端口为 443、路径为 /。它还会检查 HSTS、安全策略、代理设置、Service Worker 和缓存。若缓存中已有仍新鲜的页面,部分网络步骤可能被跳过。

URL 片段不会发往服务器,用户名密码等敏感信息也不应放在 URL 查询中,因为 URL 可能进入历史、日志和引用来源。

2. DNS 把名称变成候选地址

浏览器和操作系统先查本地缓存,没有结果时询问递归 DNS。解析器可能从缓存直接返回,也可能逐级询问根、顶级域和权威服务器,得到 A、AAAA 或指向 CDN 的 CNAME 链。

浏览器可能同时获得 IPv4 与 IPv6 候选,并以小时间差并行尝试,选择更快成功的路径。DNS 返回多个地址也不保证浏览器按列表第一个连接;客户端策略、网络可用性和历史性能都会影响选择。

此阶段典型失败:NXDOMAIN、解析器超时、返回陈旧地址、IPv6 地址存在但路径不可用。证据来自 dig、系统解析结果和浏览器网络日志。

3. 路由选择与下一跳解析

假设选中的服务器 IPv4 为 198.51.100.20。操作系统用最长前缀匹配查询本机路由表。它发现目的不在家庭子网,于是选择默认网关 192.168.1.1

若 ARP 缓存没有网关条目,主机广播 ARP 请求,获得网关 MAC。随后准备的第一跳帧为:

以太网/Wi-Fi 目的:默认网关的链路层地址
IP 目的:198.51.100.20
TCP 目的端口:443

注意三个目的标识同时存在,却属于不同作用域。接入点与交换机在局域网内转发帧,家庭网关解封装后可能执行 NAT,再把 IP 数据报送往运营商。

此阶段典型失败:错误子网掩码、无默认路由、ARP 冲突、Wi-Fi 已关联但未真正接入上游、网关策略阻断。

4. 路由器逐跳转发

每台路由器读取目的 IP、降低 TTL、执行最长前缀匹配,再为出链路重新封装。域内路由和 BGP 已提前把控制平面的结果安装进转发表;单个数据报通常不会现场运行全网最短路径算法。

途中可能经过运营商 NAT、防火墙、负载均衡和 CDN 边缘。队列带来变化的等待,MTU 不匹配可能触发路径发现问题,路由收敛期间可能绕路或丢包。

5. TCP 建立连接

客户端选择临时源端口,向服务器 443 发送 SYN。服务器返回 SYN+ACK,客户端确认。握手同步序号、验证双向可达并协商最大段大小、窗口扩大和 SACK 等选项。

如果 SYN 重传后仍无响应,可能是服务器没监听、防火墙静默丢弃、回程路由错误或严重丢包。若立即收到 RST,通常说明目标可达但该端口没有接受连接,或中间设备主动拒绝。

TCP 建立后只提供可靠字节流,仍不知道对方是不是 www.example.com,也没有加密 HTTP 内容。

6. TLS 建立可信通道

客户端发送 TLS ClientHello,包含支持的版本、密码套件、临时密钥份额、SNI 与 ALPN。服务器选择参数,返回证书链和对握手的签名。浏览器检查证书链、有效期和域名,双方派生会话密钥并验证握手完整性。

ALPN 可选出 HTTP/2。握手成功后,HTTP 首部与主体进入认证加密记录。旁观者可能看到 IP、端口、时序和数据量,但不能轻易读取或修改应用内容。

此阶段典型失败:证书过期、主机名不匹配、客户端时间错误、协议或密码套件不兼容、中间代理替换证书但根未受信任。

7. 浏览器发送 HTTP 请求

在 HTTP/2 场景中,请求被编码为二进制帧;首部语义可概括为:

:method: GET
:scheme: https
:authority: www.example.com
:path: /
accept: text/html
accept-encoding: gzip, br

浏览器还可能发送 Cookie、缓存验证字段和语言偏好。服务器或 CDN 根据主机名、路径、方法、首部与身份选择响应。边缘缓存命中时无需回源;未命中时 CDN 连接源站并缓存允许共享的结果。

反向代理可能终止 TLS、执行限流与负载均衡,再把请求交给应用。应用查询缓存或数据库,生成 HTML,返回状态码、内容类型、缓存策略和主体。

8. 响应穿过协议栈

服务器把 HTTP/2 帧交给 TLS 加密,TCP 按字节序号分段,IP 加网络层首部,链路层按每一跳重新封装。路由器转发数据报,家庭 NAT 根据映射把返回流量还原给笔记本。

若某个 TCP 段丢失,接收方的确认和 SACK 帮助发送方发现缺口并重传;拥塞控制可能同时降低发送速率。客户端 TCP 恢复有序字节,TLS 验证并解密,HTTP/2 将帧分派到正确流。

9. 浏览器解析与渲染

收到 HTML 后,浏览器不一定等全部下载完才开始工作。它逐步解析 HTML,构建 DOM;解析 CSS 构建样式信息;两者形成渲染树,再布局和绘制。遇到 CSS、JavaScript、字体、图片等外部资源会触发更多请求。

同源资源可复用现有 HTTP/2 或 HTTP/3 连接,不同域名通常需要新的 DNS、连接与 TLS 状态。阻塞脚本、巨大 CSS、慢字体和主线程计算都可能让“网络已经返回”但页面仍迟迟不可见。

因此页面性能至少包含:

网络连接时间
+ 服务器处理时间
+ 资源传输时间
+ 浏览器解析、脚本、布局与绘制时间

10. 缓存与连接改变下一次访问

第二次访问通常更短:DNS 和 ARP 可能命中,TLS 可恢复会话,HTTP 可复用连接,资源可从浏览器缓存或 CDN 获取。缓存也可能成为故障来源:旧 DNS 指向已下线地址,旧 Service Worker 返回过期资源,错误 CDN 缓存键泄漏内容。

HTTP/3 的替代路径

若浏览器与服务器支持 HTTP/3,客户端可能使用 QUIC over UDP。QUIC 把传输握手与 TLS 1.3 紧密结合,多个流不共享同一个有序字节流,并支持连接迁移。DNS、IP 路由、链路层和浏览器渲染等大部分步骤仍然存在;改变的是传输与安全握手的组织方式。

把故障映射到层次

现象 优先检查 不应立即下结论
域名不存在 DNS 答案、搜索域、拼写 “服务器宕机”
IP 可达但 443 超时 路由、防火墙、监听、回程 “TLS 证书坏了”
TLS 主机名错误 SNI、DNS、证书与代理 “TCP 不可靠”
HTTP 503 反向代理、上游健康、过载 “本地 Wi-Fi 一定坏了”
HTML 很快但页面白屏 脚本、CSS、子资源、主线程 “带宽不足”

综合自测

DNS 已返回正确 IP,ping 也成功,但浏览器仍打不开页面,说明什么?

只说明名称解析和某种 ICMP 可达性可能正常。还需验证目标端口、TCP 或 QUIC、TLS、HTTP 状态、代理和浏览器执行。不同协议可能被不同策略处理。