访问一个网站的全过程

本文最后更新于 2025年8月12日 14:36

1. URL 解析

用户输入的 https://www.example.com 包含多个部分:

  • 协议https://,使用 HTTPS(安全的 HTTP)
  • 主机名www.example.com,需要解析为 IP 地址。
  • 端口号(隐含):默认 HTTPS 使用 443 端口,HTTP 使用 80 端口。
  • 路径(如 /index.html):指向服务器的具体资源。

2. DNS 解析(域名解析 -> 获取 IP 地址)

由于计算机只能识别 IP 地址,浏览器需要将 www.example.com 解析为服务器的 IP 地址。这涉及 DNS(Domain Name System),具体流程如下:

(1) 浏览器缓存检查

浏览器会先检查 本地缓存(浏览器 DNS 缓存、操作系统缓存,如 hosts 文件)中是否已有 www.example.com 的 IP 地址。

(2) 递归 DNS 查询(DNS 服务器)

如果缓存中没有,浏览器向 本地 DNS 服务器(LDNS,通常由 ISP 提供) 发送 DNS 查询请求。

  • 如果本地 DNS 服务器已有缓存,则直接返回 IP。
  • 如果没有,本地 DNS 服务器执行 递归查询,向上级 DNS 服务器请求解析。
    • 根 DNS 服务器(**.** 返回 .com 顶级域(TLD)DNS 服务器的地址。
    • 顶级域 DNS 服务器(如 **.com** 返回 example.com权威 DNS 服务器 地址。
    • 权威 DNS 服务器 直接返回 www.example.comIP 地址(如 192.0.2.1)。
  • 本地 DNS 服务器将 IP 地址缓存一段时间,以提高解析速度。

最终,浏览器获取 www.example.com -> 192.0.2.1,DNS 解析完成。


3. ARP 协议(获取 MAC 地址)

现在,浏览器准备向 192.0.2.1 发送数据,但 IP 地址无法直接用于本地网络通信。此时,计算机需要获取服务器的 MAC 地址(物理地址),过程如下:

(1) 检查 ARP 缓存

主机检查本地 ARP 表(arp -a)是否已有 192.0.2.1 的 MAC 地址。

(2) 发送 ARP 请求(如果 MAC 地址未知)

如果没有,计算机会发送 ARP 请求(广播):

text
1
2
3
4
源 MAC: 发送方网卡 MAC
目标 MAC: FF:FF:FF:FF:FF:FF(广播地址)
源 IP: 本机 IP
目标 IP: 192.0.2.1

广播意味着所有局域网设备都会收到这个请求

(3) 服务器响应 ARP

服务器收到 ARP 请求后,返回 ARP 响应,包含 192.0.2.1 的 MAC 地址。

text
1
2
3
4
源 MAC: 服务器网卡 MAC
目标 MAC: 发送方网卡 MAC
源 IP: 192.0.2.1
目标 IP: 本机 IP

本机收到 MAC 地址后,会将其缓存到 ARP 表中。


4. 建立 TCP 连接(三次握手)

现在,我们已经有了服务器的 IP 地址和 MAC 地址,可以使用 TCP 建立连接。TCP 通过 三次握手 确保连接可靠:

  1. 客户端 → 服务器:发送 SYN 包,请求建立连接:SYN=1, Seq=X
  2. 服务器 → 客户端:服务器响应 SYN-ACK,确认连接:SYN=1, ACK=1, Seq=Y, Ack=X+1
  3. 客户端 → 服务器:客户端发送 ACK,连接建立:ACK=1, Seq=X+1, Ack=Y+1

5. TLS 握手(HTTPS 加密通信)

如果是 HTTPS,则进行 TLS(传输层安全协议) 握手,以建立加密通道:

  1. 客户端 → 服务器:发送 ClientHello,包括支持的加密算法。
  2. 服务器 → 客户端:发送 ServerHello 和 SSL 证书。
  3. 密钥交换:客户端验证证书,生成共享密钥。
  4. 建立安全通道,后续通信被加密。

6. 发送 HTTP 请求

客户端向服务器发送 HTTP 请求,如:

text
1
2
3
4
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
  • **GET**:请求网页资源
  • **Host**:目标服务器
  • **User-Agent**:浏览器信息

7. 服务器处理请求并返回响应

服务器接收到 HTTP 请求后,执行以下操作:

  1. 检查资源是否存在,如果 /index.html 找不到,则返回 404 Not Found

  2. 查询数据库,如果请求动态内容(如用户信息)。

  3. 返回 HTTP 响应

    text
    1
    2
    3
    4
    5
    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 1234

    <html>...</html>

8. 数据传输过程(IP 数据包 + 物理传输)

(1) IP 分片

如果数据包过大(超过 MTU,通常 1500 字节),IP 层会进行 分片,以便在网络上传输。

(2) 数据链路层封装

  • IP 数据包 添加 MAC 头部,形成 以太网帧

    text
    1
    目标 MAC | 源 MAC | 以太网类型 | 数据(IP 包)
  • 以太网帧通过 交换机(Switch) 进行转发。

(3) 物理层传输

  • 数据以 电信号(有线)或 无线信号(Wi-Fi)发送到服务器。

9. 浏览器解析 HTML 并渲染

  • 构建 DOM 树(解析 HTML)
  • 解析 CSS 并应用样式
  • 执行 JavaScript(如动态加载)
  • 绘制页面,显示给用户

10. 连接关闭(TCP 四次挥手)

  1. 客户端 → 服务器:发送 FIN,请求关闭连接。
  2. 服务器 → 客户端:返回 ACK,确认关闭。
  3. 服务器 → 客户端:发送 FIN,请求关闭。
  4. 客户端 → 服务器:返回 ACK,连接断开。

访问一个网站的全过程
http://example.com/2024/11/20/访问一个网站的全过程/
作者
Moonike
发布于
2024年11月20日
更新于
2025年8月12日
许可协议