本文是《计算机网络学习笔记》系列的第十三篇。「从输入 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 协议》


参考资料:《计算机网络:自顶向下方法》

标签: none

添加新评论