主题
第七章 从输入网址到页面显示:一次完整的请求
1. 为什么要有这一章
前六章把网络切成一层层单独讲,这是学习的需要;但真实世界里,你在浏览器敲下 www.example.com 回车的那一瞬间,所有层、所有协议是同时协作的。"从输入网址到页面显示发生了什么"也因此成为面试和考试的经典综合题——它一道题就能检查你整个知识体系有没有连成网。
这一章就以这次回车为主线,把 DHCP、DNS、ARP、TCP、TLS、HTTP 全部串起来。每一步都标注:它属于哪一层,用到第几章的知识。
先看全程总图,后面逐段拆解:
2. 阶段零:DHCP——上网资格是怎么来的(应用层,第五章)
故事其实在你回车之前就开始了。设备刚连上 WiFi 时一无所有:没有 IP 地址,不知道网关是谁,也不知道 DNS 服务器在哪。它靠 DHCP 四步广播对话取得"上网套餐":
- 发现:设备广播"有没有 DHCP 服务器?"(此时没有 IP,只能广播,源地址填 0.0.0.0)。
- 提供:DHCP 服务器(通常就是家用路由器)回应"我这有个 192.168.1.100 你要不要"。
- 请求:设备广播"我要这个地址"。
- 确认:服务器确认,并附赠三样关键配置——子网掩码、默认网关地址、DNS 服务器地址。
这四样东西正好对应后面每一步:掩码用来判断目标在不在本网段(第三章),网关是出网的必经之门(第三章),DNS 地址马上就要用(第五章)。DHCP 基于 UDP(第四章:还没有 IP 时谈不上建立连接)。
为什么第三步还要广播?因为局域网里可能有多台 DHCP 服务器同时给出提供,设备广播"我选了某台的地址",既通知被选中的服务器确认,也让落选的服务器收回各自的候选地址。地址是租来的(有租期),到期前设备要续租——所以叫"发牌",不叫"卖断"。
3. 第一步:DNS 解析——把域名换成 IP(应用层,第五章)
浏览器拿到 www.example.com,但 IP 分组的目的地址栏只认数字。查询按"就近原则"层层升级:
- 先查浏览器和操作系统的缓存,命中就结束。
- 没有,则向 DHCP 告知的本地 DNS 服务器发起递归查询(UDP,53 端口)。
- 本地服务器缓存也没有,就代替你做迭代查询:问根服务器 → 被指向 com 顶级域服务器 → 被指向 example.com 权威服务器 → 拿到最终答案。
- 结果
93.184.216.34逐级缓存并返回浏览器。
层次归属:DNS 是应用层协议,但它是为网络层(IP 地址)服务的"前置翻译"。
4. 第二步:判断网段与 ARP——找到出门的路(网络层+链路层,第二、三章)
拿到目标 IP 后,本机用第三章的方法做判断:把目标 IP 和自己的 IP 分别与子网掩码相与。93.184.216.34 显然和 192.168.1.100/24 不同网段,结论:这个分组必须交给默认网关。
于是问题从"IP 层的远方"落到"链路层的眼前":把帧发给网关,需要网关的 MAC 地址。本机查 ARP 缓存,没有就发 ARP 广播"谁是 192.168.1.1",路由器单播回应自己的 MAC(第三章)。
现在可以完成第一跳的封装(第一章的封装过程实战):
| 层 | 填写内容 | 关键点 |
|---|---|---|
| 网络层 IP 首部 | 源 192.168.1.100,目的 93.184.216.34 | 目的 IP 是最终服务器,全程基本不变 |
| 链路层帧头 | 源 本机 MAC,目的 网关的 MAC | 目的 MAC 是下一跳,每过一跳换一次 |
这就是全篇最重要的一个对比:IP 地址端到端不变,MAC 地址逐跳更换。分组每到一台路由器,路由器拆掉旧帧、查路由表做最长前缀匹配、TTL 减 1,再用下一跳的 MAC 封一个新帧发出去(第三章)。出家门时,路由器还会做 NAT,把私有源地址改写成公网地址(第三章)。
变式:如果目标就在同一局域网
考题常出的对照场景:访问的是隔壁工位的打印机(同网段)而不是远方服务器。流程立刻简化:
| 对比项 | 目标在本网段 | 目标在外网 |
|---|---|---|
| 掩码相与判断 | 网络地址相同 | 网络地址不同 |
| ARP 询问对象 | 目标主机本身的 MAC | 默认网关的 MAC |
| 帧的目的 MAC | 目标主机 | 网关 |
| 是否经过路由器 | 否 | 是 |
| 是否发生 NAT | 否 | 通常是 |
一句话总结:掩码相与的结果,决定了 ARP 去问谁——这是把第三章两个知识点拧在一起的枢纽。
5. 第三步:TCP 三次握手——先接通再说话(传输层,第四章)
IP 只保证"尽力送",网页传输不容许缺斤短两,所以用 TCP(第一章端到端原则:可靠性放在两端)。浏览器随机选一个临时端口,向服务器的 443 端口(HTTPS)发起三次握手:
- 客户端发 SYN,带上自己的起始序号。
- 服务器回 SYN+ACK,确认客户端序号并送出自己的序号。
- 客户端回 ACK,连接建立。
三个来回后,双方都确认了"对方在线、序号已同步、可以开始计数每一个字节"(第四章)。此后传输中的丢包靠序号、确认与超时重传兜底,速度由滑动窗口、流量控制和拥塞控制共同调节——刚建立的连接正处在慢启动阶段,窗口从小到大指数爬升。
6. 第四步:TLS 握手——把通道升级成加密的(第六章)
网址是 https 开头,所以 HTTP 报文发出之前,先在 TCP 连接之上完成 TLS 握手:
- 双方交换随机数,协商加密算法。
- 服务器出示数字证书,浏览器沿信任链验到预装的根 CA,确认"对面真是 example.com"(第六章:身份认证)。
- 浏览器用证书里的服务器公钥加密密钥材料发过去,双方各自算出相同的对称会话密钥(第六章:非对称送钥匙)。
- 此后所有数据用会话密钥对称加密(第六章:对称传数据)。
7. 第五步:HTTP 请求与响应——正题只占一瞬(应用层,第五章)
万事俱备,浏览器终于发出那条真正的请求:
GET / HTTP/1.1
Host: www.example.com服务器返回 200 OK 与 HTML 正文。浏览器边解析边发现页面里还引用了 CSS、JS、图片,于是复用连接(HTTP/1.1 持久连接或 HTTP/2 多路复用)继续请求这些资源(第五章)。若返回 301/302 则跳转新地址重来,404 则显示资源不存在。
8. 第六步:浏览器渲染——网络的终点(本机行为)
浏览器把 HTML 解析成文档树,结合 CSS 计算样式与布局,执行 JS,最终把像素画上屏幕。这一步已不属于网络协议的范畴,但考试偶尔会考顺序:解析 HTML 的过程中才会发现并加载外部资源,所以一个页面通常触发几十次 HTTP 请求。用户关闭页面后,TCP 连接经四次挥手关闭,主动关闭方进入 TIME_WAIT(第四章)。
9. 效率视角:缓存无处不在,往返能省则省
把整条链路再走一遍,你会发现设计者在每一段都埋了"抄近道"的机制,这也是一类考点:
| 缓存/优化 | 省掉了什么 | 所在章节 |
|---|---|---|
| 浏览器与系统的 DNS 缓存 | 重复的域名解析 | 第五章 |
| 本地 DNS 服务器缓存 | 到根和顶级服务器的迭代查询 | 第五章 |
| ARP 缓存 | 每次发帧前的广播询问 | 第三章 |
| HTTP 持久连接与多路复用 | 反复的 TCP 三次握手 | 第五章 |
| 浏览器 HTTP 缓存与 304 | 重复下载没变化的资源 | 第五章 |
| TLS 会话复用 | 重复的完整 TLS 握手 | 第六章 |
它们共同的思想只有一句话:网络最贵的开销是"往返",凡是问过的就记下来,凡是建好的连接就复用。第一次访问一个网站要经历完整流程,第二次访问快得多,就是这些缓存集体生效的结果。
反过来这也解释了首次打开页面前的"白屏时间"花在哪里:DNS 一个来回、TCP 握手一个来回、TLS 握手一到两个来回,真正的 HTTP 请求发出之前就已经消耗了三四个 RTT——第一章讲的传播时延在这里被成倍放大,这正是 HTTP/3 用 QUIC 压缩握手次数的动机。
10. 总复习大表:层—协议—设备—地址—数据单元
这张表把七章内容压缩成一屏,考前最后过一遍:
| 层次 | 本章故事里做的事 | 协议 | 典型设备 | 地址/标识 | 数据单元 |
|---|---|---|---|---|---|
| 应用层 | 讨要配置、翻译域名、请求网页、加密协商 | DHCP、DNS、HTTP、TLS | — | 域名、URL | 报文 |
| 传输层 | 三次握手、可靠传输、拥塞控制 | TCP、UDP | — | 端口号(16 位) | 段 / 数据报 |
| 网络层 | 判网段、NAT、逐跳选路、TTL | IP、ICMP、ARP、OSPF/BGP | 路由器 | IP 地址(32 位) | 分组 / 包 |
| 数据链路层 | ARP 问 MAC、封帧、交换机转发 | 以太网、WiFi | 交换机、网桥 | MAC 地址(48 位) | 帧 |
| 物理层 | 比特变电信号光信号电磁波 | 各类介质规范 | 集线器、中继器 | — | 比特 |
11. 这条主线上的常见考法归纳
- 排序题:给出"DNS 解析、TCP 握手、发送 HTTP 请求、ARP 解析、浏览器渲染",要求排先后。正确主线:(DHCP 已就绪)→ DNS → ARP/逐跳转发 → TCP 握手 → (TLS)→ HTTP → 渲染。注意 ARP 发生在"把帧发给网关"之时,与 DNS 之后的首个分组发送相伴。
- 地址变化题:分组穿越多台路由器,"源/目的 IP 是否变化、源/目的 MAC 是否变化"。答案:IP 端到端不变(NAT 场景除外),MAC 逐跳都换。
- 层次归属题:DNS/HTTP/DHCP 属应用层,TCP/UDP 属传输层,IP/ICMP 属网络层,ARP 介于网络层与链路层之间(教材多归入网络层),交换机链路层、路由器网络层。
- 协议配对题:这次访问用到 UDP 的有 DHCP 和 DNS,用到 TCP 的有 HTTP/HTTPS;"网页浏览全程只用 TCP"是错的——前置的 DNS 查询走 UDP。
- 故障定位题:ping IP 通但访问域名失败 → 大概率 DNS 问题;同网段通、跨网段不通 → 检查网关配置;能建 TCP 连接但页面报 404/500 → 网络没问题,是应用层的事。
- 综合简答:"输入网址后发生了什么"按本章六步作答:DHCP 前置 → DNS 解析 → ARP 与逐跳路由 → TCP 三次握手 → TLS 握手 → HTTP 请求响应 → 渲染,每步点出所在层次即可拿满要点分。
12. 例题演练
例题一:主机 A 访问网站过程中,下列事件的正确先后顺序是?① 建立 TCP 连接 ② 域名解析 ③ 发送 HTTP 请求 ④ 浏览器解析渲染页面。
解析:没有 IP 无法握手,所以 ② 最先;连接是发请求的前提,① 在 ③ 前;渲染最后。顺序为 ② ① ③ ④。若选项再混入"ARP 解析网关 MAC",把它放在 ② 之后、首个分组发出之时即可。
例题二:判断:"数据包每经过一台路由器,其源 IP 地址和目的 IP 地址都会被修改。"
解析:错误。常规转发中路由器只修改帧头(源目的 MAC 换成本跳与下一跳)并将 TTL 减 1,IP 首部的源目的地址保持不变;只有 NAT 设备才改写 IP 地址。这是"IP 端到端、MAC 逐跳换"结论的直接应用。
例题三:用户能用 ping 93.184.216.34 连通服务器,但在浏览器输入 www.example.com 无法打开页面。最可能的原因是?
解析:IP 直连可达,说明物理链路、路由、服务器主机都正常,问题出在"域名到 IP"这一环——DNS 解析故障(本地 DNS 配置错误或 DNS 服务器不可用)。这类"分层排除法"故障题,按物理连通 → IP 连通 → 域名解析 → 应用服务的顺序逐层检查。
例题四:一次 HTTPS 网页访问中,下列协议与传输层承载的对应关系哪个是错的?A. DNS 查询使用 UDP B. HTTP 报文承载于 TCP C. DHCP 使用 TCP D. TLS 建立在 TCP 之上。
解析:C 错。DHCP 工作时客户端尚无 IP 地址,不可能建立 TCP 连接,它基于 UDP 广播完成;A、B、D 均正确。
本章要点回顾
| 步骤 | 层次 | 关键动作 | 回看章节 |
|---|---|---|---|
| DHCP 取配置 | 应用层(UDP) | 广播四步拿到 IP、掩码、网关、DNS | 第三、五章 |
| DNS 解析 | 应用层(UDP 53) | 缓存 → 递归问本地 → 本地迭代问根/顶级/权威 | 第五章 |
| 判网段 + ARP | 网络层 + 链路层 | 掩码相与判跨网,ARP 广播求网关 MAC | 第二、三章 |
| 逐跳路由 | 网络层 | 最长前缀匹配、TTL 减 1、NAT、MAC 逐跳换 | 第三章 |
| TCP 握手 | 传输层 | 三次握手同步序号,慢启动起步 | 第四章 |
| TLS 握手 | 应用层/表示层 | 验证书、非对称换钥匙、对称传数据 | 第六章 |
| HTTP 收发 | 应用层(TCP 443) | GET 请求、状态码、持久连接复用 | 第五章 |
| 渲染与关闭 | 本机 + 传输层 | 解析渲染;四次挥手,TIME_WAIT | 第四章 |
做题提醒
- 顺序题记牢主线:DNS 在 TCP 握手之前(没有 IP 无法握手),TLS 在 TCP 之后 HTTP 之前,渲染永远最后。
- "分组经过路由器时源目的 IP 都会改变"是错误表述——常规转发只改 MAC 与 TTL;仅 NAT 会改 IP,答题看清有没有提 NAT。
- ARP 只在同一局域网内解析下一跳的 MAC,主机不会也不需要拿到远端服务器的 MAC 地址。
- 一次网页访问同时用到 UDP(DHCP、DNS)和 TCP(HTTP、HTTPS),"只用其一"的选项判错。
- TTL 每过一台路由器减 1,减到 0 丢弃并回 ICMP——这既是防环机制也是 traceroute 的原理,两个考点常互相引出。
- 层次归属混搭是综合题最大陷阱:看到"交换机根据 IP 转发""路由器根据 MAC 寻路""HTTP 工作在传输层"直接排除。
