「从输入 URL 到页面显示,中间发生了什么?」 这是互联网领域的一道经典面试题,考察候选人对计算机网络的整体认知深度。本文以一次完整的 Web 页面请求为例,将 DHCP、ARP、DNS、TCP、HTTP 等核心协议串联起来,自底向上逐步拆解数据在网络中传输的完整过程,帮助读者建立系统化的网络知识体系。

注意:为降低复杂度,本文使用的是明文 HTTP 协议,不涉及 HTTPS / TLS 握手过程。在实际生产环境中,绝大多数网站已启用 HTTPS,在 TCP 三次握手完成后还会进行 TLS 握手以建立加密信道,后续文章会单独介绍。

场景中包含 3 个网络(IP 地址均使用 RFC 文档保留段,仅作示意):

  • Web 服务器网络:其中运行着目标 Web 服务器,地址为 203.0.113.10
  • ISP 网络:互联网服务提供商(如运营商)的网络,其中运行着 DNS 服务器,地址为 198.51.100.1
  • 本地网络:用户所在的局域网(如家庭、办公室、校园网等)。

现在从一台笔记本接入本地网络开始:

DHCP 分配 IP 的完整流程为 DISCOVER → OFFER → REQUEST → ACK 四步:

  1. 笔记本为了获取 IP 地址,生成一个 DHCP DISCOVER 报文(广播发现局域网内的 DHCP 服务器),该报文使用 UDP、IP 协议:

    • 源端口:68
    • 源 IP 地址:0.0.0.0
    • 目的端口: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、网关、子网掩码等信息。

至此,笔记本完成了网络组件的初始化。

然后在笔记本的浏览器中输入 www.example.com 并按回车:

  1. 笔记本不知道目标 Web 服务器的 IP,生成 DNS 查询报文,使用 UDP:

    • 问题段:www.example.com
    • 端口:53
    • 目的 IP:198.51.100.1(DNS 服务器)
    • 源 IP:192.168.1.101
  2. 笔记本将 DNS 报文依次封装:DNS → UDP → IP → 以太网帧。然而,笔记本并不知道路由器的 MAC 地址(虽然第 5 步获取到了路由器的 IP),需要先用 ARP 协议获取网关路由器的 MAC 地址;
  3. 笔记本生成 ARP 查询报文:

    • 目的 IP:192.168.1.1
    • 目的 MAC 地址:FF:FF:FF:FF:FF:FF(广播)

    然后向交换机发送该以太网帧,交换机转发给网关路由器;

  4. 网关路由器接收到后,生成 ARP 回答:

    • MAC 地址:00:22:6B:45:1F:1B
    • IP 地址:192.168.1.1
    • 目的 MAC 地址:00:16:D3:23:68:8A
  5. 笔记本接收到 ARP 回答报文,获取到网关路由器的 MAC 地址;
  6. 笔记本现在可以发送 DNS 查询报文了:

    • 目的 IP 地址:198.51.100.1(DNS 服务器)
    • 目的 MAC 地址:00:22:6B:45:1F:1B(网关路由器)
  7. 网关路由器接收到该帧,抽取 DNS 查询,根据转发表将该数据包转发到 ISP 网络中的路由器;
  8. ISP 网络中的路由器接收到该帧,根据转发表将其转发到 DNS 服务器;
  9. DNS 服务器接收到该帧,提取查询信息,生成 DNS 回答报文:

    • IP 地址:203.0.113.10(目标 Web 服务器地址,来源于权威 DNS 服务器)

    然后数据报一路返回,到达笔记本;

  10. 笔记本从 DNS 报文中抽取到目标 Web 服务器的 IP 地址。

至此,笔记本获取到目标 Web 服务器的 IP 地址,准备建立连接。

  1. 笔记本生成 TCP 套接字,用于向 www.example.com 发送 HTTP GET 报文。先生成 TCP SYN 报文:

    • 目的 IP 地址:203.0.113.10(目标 Web 服务器地址)
    • 目的 MAC 地址:00:22:6B:45:1F:1B(网关路由器)
  2. TCP SYN 报文沿着本地网络、ISP 网络、Web 服务器网络依次转发(由 BGP 协议决定路径);
  3. TCP SYN 报文到达 Web 服务器的监听套接字,服务器生成连接套接字,产生 TCP SYNACK 报文;
  4. TCP SYNACK 报文依次通过 Web 服务器网络、ISP 网络、本地网络,最终到达笔记本;
  5. 笔记本回复 TCP ACK 报文,三次握手完成,TCP 连接正式建立;
  6. 笔记本发送 HTTP GET 报文;
  7. 服务器读取 GET 报文,生成 HTTP 响应报文,并将请求的 Web 页内容放入 HTTP 响应体中;
  8. HTTP 响应报文的数据通过 Web 服务器网络、ISP 网络、本地网络,最终到达笔记本,浏览器从套接字中读取 HTTP 响应,从响应体中抽取 HTML,渲染并显示 Web 网页。

至此,网页显示完成。

标签: none

添加新评论