从输入 URL 到页面显示:DHCP、ARP、DNS、TCP、HTTP 全流程串讲
本文是《计算机网络学习笔记》系列的第十三篇。「从输入 URL 到页面显示,中间发生了什么?」这是互联网领域的一道经典面试题,考察候选人对计算机网络的整体认知深度。本文以一次完整的 Web 页面请求为例,将 DHCP、ARP、DNS、TCP、HTTP 等核心协议串联起来,自底向上逐步拆解数据在网络中传输的完整过程,帮助读者建立系统化的网络知识体系。
注意:为降低复杂度,本文使用的是明文 HTTP 协议,不涉及 HTTPS / TLS 握手过程。在实际生产环境中,绝大多数网站已启用 HTTPS,在 TCP 三次握手完成后还会进行 TLS 握手以建立加密信道,详见第5篇《TLS:HTTPS 背后的加密握手》。
场景设定
场景中包含 3 个网络(IP 地址均使用 RFC 文档保留段,仅作示意):
[ 本地网络 ] [ ISP 网络 ] [ Web 服务器网络 ]
笔记本 DNS 服务器 Web 服务器
192.168.1.101 198.51.100.1 203.0.113.10
网关路由器
192.168.1.1- Web 服务器网络:其中运行着目标 Web 服务器,地址为
203.0.113.10; - ISP 网络:互联网服务提供商(如运营商)的网络,其中运行着 DNS 服务器,地址为
198.51.100.1; - 本地网络:用户所在的局域网(如家庭、办公室、校园网等)。
第一阶段:DHCP — 获取 IP 地址
现在从一台笔记本接入本地网络开始。笔记本刚接入时还没有 IP 地址,需要通过 DHCP 协议自动获取。
DHCP 分配 IP 的完整流程为 DISCOVER → OFFER → REQUEST → ACK 四步:
步骤 1:笔记本为了获取 IP 地址,生成一个 DHCP DISCOVER 报文(广播发现局域网内的 DHCP 服务器),该报文使用 UDP、IP 协议:
- 源端口:68
- 源 IP 地址:
0.0.0.0(还没有 IP,只能填全零) - 目的端口:67
- 目的 IP 地址:
255.255.255.255(广播)
步骤 2:将包含 DHCP DISCOVER 报文的 IP 数据包放置到以太网帧中:
- 目的 MAC 地址:
FF:FF:FF:FF:FF:FF(链路层广播)
步骤 3:该以太网帧从笔记本发送到交换机,交换机将其广播到所有出端口,到达路由器。
步骤 4:路由器接收到该以太网帧,层层剥取:以太网帧 → IP 数据报 → UDP → DHCP,获取到 DHCP DISCOVER 报文,并回复 DHCP OFFER 报文,提供可用的 IP 配置(含 IP、DNS、网关、子网掩码),该报文封装后发回笔记本。
步骤 5:笔记本收到 DHCP OFFER 后,广播发送 DHCP REQUEST 报文,正式请求使用该 IP 配置(同一局域网内可能有多个 DHCP 服务器,广播是为了通知其他服务器放弃分配)。
步骤 6:路由器收到 DHCP REQUEST 后,回复 DHCP ACK 报文,确认分配,其中包含:
- IP:
192.168.1.101 - DNS:
198.51.100.1 - 网关(gateway):
192.168.1.1 - 子网掩码:
192.168.1.0/24
该报文依次封装:DHCP ACK → UDP → IP 数据报 → 以太网帧,经交换机到达笔记本。
步骤 7:笔记本层层剥取协议,获得 IP、DNS、网关、子网掩码等信息。
至此,笔记本完成了网络组件的初始化。
第二阶段:ARP — 获取网关 MAC 地址
然后在笔记本的浏览器中输入 www.example.com 并按回车:
步骤 8:笔记本不知道目标 Web 服务器的 IP,生成 DNS 查询报文,使用 UDP:
- 问题段:
www.example.com - 端口:53
- 目的 IP:
198.51.100.1(DNS 服务器) - 源 IP:
192.168.1.101
步骤 9:笔记本将 DNS 报文依次封装:DNS → UDP → IP → 以太网帧。然而,笔记本并不知道路由器的 MAC 地址(虽然第 7 步获取到了路由器的 IP),需要先用 ARP 协议获取网关路由器的 MAC 地址。
步骤 10:笔记本生成 ARP 查询报文:
- 目的 IP:
192.168.1.1 - 目的 MAC 地址:
FF:FF:FF:FF:FF:FF(广播)
然后向交换机发送该以太网帧,交换机转发给网关路由器。
步骤 11:网关路由器接收到后,生成 ARP 回答:
- MAC 地址:
00:22:6B:45:1F:1B - IP 地址:
192.168.1.1 - 目的 MAC 地址:
00:16:D3:23:68:8A(笔记本的 MAC)
步骤 12:笔记本接收到 ARP 回答报文,获取到网关路由器的 MAC 地址,并存入本地 ARP 缓存表。
第三阶段:DNS — 域名解析
步骤 13:笔记本现在可以发送 DNS 查询报文了:
- 目的 IP 地址:
198.51.100.1(DNS 服务器) - 目的 MAC 地址:
00:22:6B:45:1F:1B(网关路由器,因为 DNS 服务器不在本地网络,帧先发给网关)
步骤 14:网关路由器接收到该帧,抽取 DNS 查询,根据转发表将该数据包转发到 ISP 网络中的路由器。
步骤 15:ISP 网络中的路由器接收到该帧,根据转发表将其转发到 DNS 服务器。
步骤 16:DNS 服务器接收到该帧,提取查询信息,生成 DNS 回答报文:
- IP 地址:
203.0.113.10(目标 Web 服务器地址,来源于权威 DNS 服务器)
然后数据报一路返回,到达笔记本。
步骤 17:笔记本从 DNS 报文中抽取到目标 Web 服务器的 IP 地址。
至此,笔记本获取到目标 Web 服务器的 IP 地址,准备建立连接。
第四阶段:TCP — 建立连接
步骤 18:笔记本生成 TCP 套接字,用于向 www.example.com 发送 HTTP GET 报文。先生成 TCP SYN 报文:
- 目的 IP 地址:
203.0.113.10(目标 Web 服务器地址) - 目的 MAC 地址:
00:22:6B:45:1F:1B(网关路由器)
步骤 19:TCP SYN 报文沿着本地网络、ISP 网络、Web 服务器网络依次转发(由 BGP 协议决定路径)。
步骤 20:TCP SYN 报文到达 Web 服务器的监听套接字,服务器生成连接套接字,产生 TCP SYNACK 报文。
步骤 21:TCP SYNACK 报文依次通过 Web 服务器网络、ISP 网络、本地网络,最终到达笔记本。
步骤 22:笔记本回复 TCP ACK 报文,三次握手完成,TCP 连接正式建立。
第五阶段:HTTP — 请求与响应
步骤 23:笔记本发送 HTTP GET 报文:
GET / HTTP/1.1
Host: www.example.com步骤 24:服务器读取 GET 报文,生成 HTTP 响应报文,并将请求的 Web 页内容放入 HTTP 响应体中:
HTTP/1.1 200 OK
Content-Type: text/html
<html>...</html>步骤 25:HTTP 响应报文的数据通过 Web 服务器网络、ISP 网络、本地网络,最终到达笔记本,浏览器从套接字中读取 HTTP 响应,从响应体中抽取 HTML,渲染并显示 Web 网页。
至此,网页显示完成。
全流程一览
笔记本上电,接入网络
│
▼
① DHCP(步骤 1-7)
笔记本广播 DISCOVER → 路由器 OFFER → 笔记本 REQUEST → 路由器 ACK
获得:IP / 网关 / DNS / 子网掩码
│
▼
② ARP(步骤 9-12)
笔记本广播查询网关 MAC → 路由器单播回复
获得:网关路由器的 MAC 地址
│
▼
③ DNS(步骤 13-17)
笔记本 UDP 查询 DNS 服务器 → 层层转发 → 权威服务器解析
获得:www.example.com → 203.0.113.10
│
▼
④ TCP 三次握手(步骤 18-22)
SYN → SYNACK → ACK
建立:可靠的全双工连接
│
▼
⑤ HTTP(步骤 23-25)
GET 请求 → 服务器处理 → 200 OK + HTML
结果:页面渲染完成小结
| 协议 | 层次 | 作用 |
|---|---|---|
| DHCP | 应用层(UDP) | 自动分配 IP 地址、网关、DNS |
| ARP | 网络层/链路层 | IP 地址 → MAC 地址 |
| DNS | 应用层(UDP) | 域名 → IP 地址 |
| TCP | 传输层 | 建立可靠连接(三次握手) |
| HTTP | 应用层(TCP) | 请求与响应网页内容 |
每一层都只做自己分内的事,协议之间通过严格的封装/解封装交接数据——这正是分层设计的精髓。
本系列前十二篇:
· 第1篇:《TCP 协议格式详解》
· 第2篇:《TCP 三次握手与四次挥手》
· 第3篇:《TCP 可靠数据传输》
· 第4篇:《TCP 流量控制与拥塞控制》
· 第5篇:《TLS:HTTPS 背后的加密握手》
· 第6篇:《HTTP 协议进化史》
· 第7篇:《DNS:互联网的电话簿》
· 第8篇:《IPv4 与 IPv6:网络层的寻址与路由》
· 第9篇:《NAT:家里的路由器如何帮你"上网"》
· 第10篇:《UDP 协议详解》
· 第11篇:《ICMP:ping 和 traceroute 背后的协议》
· 第12篇:《链路层:以太网帧与 ARP 协议》
参考资料:《计算机网络:自顶向下方法》