输入URL到网页显示中间发生了什么

1.精简版回答:

当浏览器输入 URL 后,整个流程大致如下:

  1. URL 解析:浏览器解析 URL,提取协议、主机名、端口和路径信息。

  2. DNS 解析:通过本地缓存或 DNS 查询将域名解析为目标服务器的 IP 地址。

  3. 建立 TCP 连接(三次握手):使用解析到的 IP 地址,通过 TCP 协议与目标服务器建立连接。

  4. IP 层处理与路由寻址:TCP 报文封装进 IP 数据报,由 IP 层根据路由表选择路径发往目标地址。

  5. MAC 地址解析(ARP):在局域网内,IP 包需映射为 MAC 地址;若未知则发起 ARP 请求获取目标或网关 MAC。

  6. 发送 HTTP 请求:建立连接后,浏览器发送 HTTP 请求获取网页资源。

  7. 服务器响应:服务器处理请求后返回响应(状态码、响应头和响应体)。

  8. 浏览器渲染页面:浏览器解析 HTML,构建 DOM,加载 CSS、JS 等资源,并渲染最终页面。

  9. TCP 连接断开(四次挥手):页面加载完成后,TCP 连接被释放。

时序图

2.DNS解析过程

假设访问 www.example.com,但系统没有缓存,DNS 会经历以下步骤:

2.1 详细过程

1. 浏览器缓存查询

  • 浏览器会先查自己的 DNS 缓存(上次解析过的域名-IP 记录)

2. 操作系统缓存查询

  • 若浏览器无缓存,会查询本地操作系统缓存(如 Windows 的 DNS Client)

3. hosts 文件

  • 如果缓存无命中,操作系统会查 hosts 文件(静态配置域名-IP 对应)

4. 本地 DNS 服务器查询(递归开始)

  • 若本地都查不到,系统向配置的 本地 DNS(递归解析器) 发起请求
  • 一般是运营商或公共 DNS(如 114.114.114.114 / 8.8.8.8)

本地 DNS 执行“递归查询”过程:

4.1 根域名服务器(Root Server)
  • 本地 DNS 向 根服务器 请求 .com 的解析方式
  • 根服务器返回 .com 顶级域服务器的 IP
4.2 顶级域服务器(TLD Server)
  • 本地 DNS 向 .com 服务器请求 example.com 的信息
  • TLD 返回 example.com 的权威 DNS 服务器地址
4.3 权威 DNS 服务器(Authoritative Server)
  • 本地 DNS 向权威 DNS 请求 www.example.com 的 A 记录
  • 返回对应 IP,如 93.184.216.34

5. 结果返回并缓存

  • 本地 DNS 把解析结果返回给操作系统
  • 操作系统返回给浏览器
  • 同时结果会被浏览器、操作系统、本地 DNS 分别缓存(通常 60~86400 秒)

2.2 精简版回答:

DNS 解析的过程是将域名转换为 IP 地址,通常包括以下步骤:

  1. 浏览器先查本地缓存;
  2. 如果缓存没有,操作系统会查 hosts 文件,再向配置的本地 DNS 服务器发起请求;
  3. 本地 DNS 服务器采用递归方式查询,过程如下:
    • 向根服务器查询 → 得到顶级域服务器地址
    • 向顶级域服务器查询 → 得到权威 DNS 地址
    • 向权威 DNS 查询 → 得到目标域名的 IP 地址
  4. 本地 DNS 把解析结果返回给客户端,并缓存以加速后续解析。

如果使用 CDN,还可能解析出 CNAME,再继续查询其对应的 A 记录。

整个过程基于 UDP(53端口),但若响应过大或需可靠性,则会使用 TCP。


2.3 DNS递归解析图示

DNS递归解析

3.DNS 用的是哪种协议?为什么?

DNS 默认使用的是 UDP 协议(端口 53),因为 DNS 查询本身数据量很小、请求响应模型简单,而且 UDP 无需连接建立,效率更高,适合高并发和实时性强的域名解析场景。

但在以下情况下 DNS 会使用 TCP

  • 响应过大导致 UDP 被截断(TC 位被置位);
  • 主辅 DNS 区域传输;
  • 启用安全传输(如 DNS over TLS);
  • 或服务端强制 TCP 连接以防攻击等。

UDP 是无连接的,因此不需要三次握手和四次挥手。如果切换为 TCP,则会使用完整的连接建立与关闭流程。

4.CNAME 出现在 DNS 查询的哪个阶段?它会被缓存吗?

CNAME(Canonical Name)记录用于将一个域名设置为另一个域名的别名,它本身不指向 IP 地址,而是跳转去解析目标域名的 IP。
比如,www.example.com 设置为 CNAME 指向 example.com,那么解析请求会被转向后者,最终返回 IP 地址。
CNAME 的主要作用是统一域名解析管理、接入 CDN 或服务提供商系统等。但它有两个限制:

  • 不能用于根域名;
  • 设置 CNAME 的域名不能再配置其他记录(如 A、MX 等)。

解析 CNAME 时客户端需要多一次 DNS 查询跳转,但带来的灵活性和管理便利在实际生产环境中非常常见和重要。

CNAME 是一种由 权威 DNS 服务器返回的记录类型,表示某个域名是另一个域名的别名。它不会出现在操作系统或 hosts 缓存中,而是在 DNS 查询过程中由权威服务器返回。
当本地 DNS 服务器收到 CNAME 记录时,它会继续递归查询被指向的域名,直到最终解析出 IP 地址(A 或 AAAA 记录),然后把结果返回给客户端。
结果包括原始 CNAME 和最终的 IP 地址,一起缓存到本地 DNS 中,以加快后续解析。

5.IP 协议的主要作用是什么?

IP 协议工作在 OSI 网络层,主要负责逻辑寻址与数据包的路由转发。它为网络中的每个设备分配唯一的 IP 地址,并将上层(如 TCP/UDP)传下来的数据封装为 IP 数据包。
IP 协议的核心职责包括:

  • 提供逻辑地址(源 IP、目标 IP)用于通信寻址;
  • 根据路由表选择下一跳,跨网络转发数据包;
  • 若数据包过大,负责分片与接收端重组;
  • 控制 TTL 防止路由环路;
  • 配合 ICMP 报文反馈网络错误信息。

需要注意的是,IP 协议是无连接、尽力而为的,它不保证数据一定送达、也不保证顺序,可靠性由上层协议(如 TCP)来处理。

6.有了IP协议为什么还要存在MAC协议,它的存在必要性是什么?

IP 协议虽然提供了逻辑寻址(跨网络识别设备),但在真实的物理网络中,数据最终还是要通过链路层(如以太网)进行传输。而链路层不认识 IP 地址,它只通过 MAC 地址进行数据帧的收发

MAC 地址的存在是因为网络通信中:

  1. 链路层负责点到点传输

    • 网络中的数据必须以帧的形式从一台设备“准确送达”到另一台设备;
    • 而帧的目标只能是设备的 MAC 地址,这才是真实网络中实际传输使用的地址
    • MAC头部是每跳更新
  2. IP 地址不适用于物理传输

    • IP 是逻辑地址,不固定,可能动态变化(如 DHCP);
    • 但物理设备识别和收发数据,需要固定的唯一标识(MAC);
    • 路由器在不同子网间转发包时会重写帧头中的 MAC 地址,但保留 IP 地址不变
  3. MAC + IP 分层设计更灵活

    • 这种分层使得 IP 层关注逻辑路由、寻址;
    • MAC 层负责局部帧传输,分离职责,便于扩展(如 VLAN、ARP、广播隔离等);
    • 如果 IP 直接负责物理传输,那每个网络设备都要感知整个链路细节,会极度复杂。

总结起来就是

IP 地址解决“去哪里”(路由),而 MAC 地址解决“怎么到达”(链路层传输) —— 两者缺一不可。

IP 像是“收件人地址”,MAC 就是“快递员找你门牌号的方式”

IP 确定目标在哪个城市/公司,MAC 是你办公桌的编号,快递送进楼后靠 MAC 找人

那为什么不能直接用MAC传输?

MAC 地址只能在同一个局域网中有效,它不具备跨网段转发能力,交换机只能根据 MAC 转发数据,而无法实现多跳传输。

IP 是为了解决大规模网络的跨子网通信问题,支持:

  • 路由寻址
  • 子网划分
  • 动态分配
  • 网络层转发控制

因此,IP + MAC 是 OSI 模型中跨网络通信 + 物理交付的最佳组合设计。
IP 寻址 + MAC 传输(跨局域网转发)

7.ARP寻址过程是什么?

ARP寻址过程
ARP(地址解析协议)工作在数据链路层与网络层之间,主要作用是:将 IP 地址解析为对应的 MAC 地址。

当一台主机要发送数据时,它会先检查本地 ARP 缓存是否有目标 IP 的 MAC。如果没有,就会发送一个 ARP 请求广播,询问:“谁是这个 IP?请告诉我你的 MAC 地址”。

网络中拥有该 IP 的主机会单播回复自己的 MAC 地址。主机收到响应后更新 ARP 缓存,并用该 MAC 地址封装以太网帧完成通信。

ARP 是局域网中 IP 和 MAC 协同工作的关键机制。
ARP 使用 以太网帧直接传输,不依赖 IP,不属于 TCP/UDP 之上

8.ARP 是否可以跨网段?如果目标 IP 不在局域网中怎么办?

ARP 只能在同一个局域网中工作,因为它使用的是二层广播,而广播帧不会被路由器转发。

当目标 IP 不在本地子网中时,主机会将数据交给默认网关。此时主机会先通过 ARP 获取网关的 MAC 地址,然后把封装好的数据帧(目标 MAC 是网关的)发送给路由器。

路由器再根据目标 IP 的路由信息,转发到目标网络。整个过程中,ARP 始终只在本地子网中使用,用来解析“下一跳”的 MAC。

跨网段ARP