手机打开浏览器访问 google.com,网络底层都发生了什么?一张图看懂

2 阅读6分钟

当我们在浏览器输入:

google.com

按下回车之后,这一瞬间都发生了什么? 以此为例,我们来聊聊计算机网络。

一、五层模型

计算机网络常用一个简化模型来理解通信过程:

  1. 应用层
  2. 传输层
  3. 网络层
  4. 数据链路层
  5. 物理层

可以把它理解为:

一条请求,从“人能理解的信息”,逐层被包装,最终变成“电信号”传出去

二、整体流程(先建立直觉)

整个过程可以先用一句话描述:

浏览器发起请求 -> 数据逐层封装 -> 发到路由器 -> 经互联网转发 -> 到达Google -> 再逐层拆解

Gemini_Generated_Image_yx2ipayx2ipayx2i.png

重点在于:

  • 发送时:从上到下封装
  • 接收时:从下往上解析

三、逐层拆解:每一层在做什么

下面我们把“访问Google”这个过程,逐层拆开。

1.应用层:你在“请求网页”

这是你唯一能直接感知的一层。 浏览器会构造一个HTTP请求,例如:

GET / HTTP/1.1
Host: google.com

这里要做的事情是:

  • 定义你要什么数据
  • 用什么协议(HTTP/HTTPS)
  • 目标是谁(域名)

同时,这一层会触发DNS查询:

google.com转换成IP地址

这一层解决的是:

"我要什么内容"

2.传输层:建立可靠连接(TCP)

应用层的数据会交给传输层处理。 在访问网页时,通常使用TCP协议。 会发生:

  • 三次握手建立连接
  • 分段发送数据
  • 确保数据可靠、有序到达

简单理解:

应用层是一段完整的话
传输层把它拆成一段一段发送

这一层解决的是:

"数据如何可靠送达?"

3.网络层:决定往哪里走(IP)

这一层引入你熟悉的概念:

  • IP地址
  • 路由

比如:

  • 源IP:你的设备
  • 目的IP:Google服务器

路由器在这一层做决策:

"这个包下一步该往哪个方向走?"

注意一个关键点:

  • IP在整个过程中基本不变(除了NAT)

这一层解决的是:

"数据应该发往哪个目标?"

4.数据链路层:这一跳怎么送(MAC)

当数据准备发到“下一跳设备”时,就进入这一层。 这里用的是:

  • MAC地址
  • ARP协议

你会做:

  • 通过ARP找到网关的MAC地址
  • 把数据封装成"帧"发给路由器

关键理解:

IP是"最终目的地"
MAC是"这一跳要交给谁"

这一层解决的是:

"在当前网络里,交给哪台设备?"

5.物理层:变成电信号/无线信号

最后一层就是:

  • 网线里的电信号
  • WiFi的无线电波

所有数据都会被转换为:

0 和 1 的物理信号

这一层不关心"数据是什么",只关心:

"怎么把比特传进去"

四、一次完整发送的“封装过程”

可以用一个结构来理解:

应用层:HTTP请求
↓
传输层:加TCP头
↓
网络层:加IP头
↓
链路层:加MAC头
↓
物理层:变成信号发送

每一层都在"加一层包装"。

五、到达 Google 后会发生什么?

当数据到达 Google 服务器时,过程是反过来的:

物理层 → 链路层 → 网络层 → 传输层 → 应用层

逐层"拆包":

  • 去掉MAC
  • 去掉IP
  • 去掉TCP
  • 最终还原出 HTTP 请求

服务器处理后,再按同样路径返回响应。

六、把你之前理解的知识放进五层模型

你之前学的那些概念,放到这五层里:

  • DNS:应用层
  • HTTP:应用层
  • TCP:传输层
  • IP:网络层
  • NAT:网络层
  • ARP:链路层
  • MAC:链路层

这样你就发现:

你不是在记零散知识,而是在理解一套"分层系统"

那为什么要分层呢? 因为每一层都只解决一个问题:

  • 应用层:我要什么
  • 传输层:怎么可靠送
  • 网络层:往哪里走
  • 链路层:这一条交给谁
  • 物理层:怎么传出去

这样带来的好处是:

系统可以扩展、替换、演进,而不影响整体结构

六、总结

在理解了五层模型之后,我们再来把一次“访问Google”的过程,重新用一条完整链路串起来看: 当用户在浏览器输入google.com时,真正发送的不是一次简单请求,而是一系列跨层协作的结果。

c9a64ece-be81-49fc-88b2-b1c8f9d14289.png

首先,在真正发起请求之前,设备已经通过 DHCP 获得了自己的网络身份,包括IP地址、默认网关和DNS服务器。这一步属于应用层,为后续通信提供基础环境。

当用户输入域名后,浏览器会先通过DNSgoogle.com解析为一个具体的IP地址。这一过程同样发送在应用层,它解决的是“目标在哪里”的问题。

接下来,浏览器构造HTTP请求,并交给传输层处理。传输层通过 TCP 建立连接,并负责将数据拆分、编号和保证可靠传输。这一层解决的是“数据如何稳定送达”。

随后进入网络层。此时数据已经带有源 IP (NAT转换后的公网IP)和目标 IP。设备会判断目标地址不在本地网络,因此将呼叫发送给默认网关。路由器在这一层根据路由表决定“下一跳是谁”,数据在互联网中通过多台路由器逐跳转发,直到接近目标服务器。

但在真正把数据发到“下一跳设备”之前,还需要在链路层完成一次关键转换,通过 ARP 将“下一跳的 IP 地址”解析为对应的 MAC 地址。因为在局域网中,数据是通过 MAC 地址来实际传输的。这一层解决的是“这一跳交给谁”。

最后,数据在物理层被转换为电信号或无线信号,通过网线或WiFi发出。

整个过程可以理解为一次逐层封装:
应用层定义请求内容,传输层保证可靠传输,网络层决定路径方向,链路层完成局部投递,物理层负责实际发送。

当数据到达 Google 服务器后,会按照相反的顺序逐层解包,还原出原始的HTTP请求,服务器处理后再将响应按同样路径返回。

从这个角度看,之前看似零散的概念———DNS、TCP、IP、ARP、NAT、路由———其实并不是独立存在的知识点,而是分布在不同层中、共同完成一次通信的协作机制。

也正因为这种分层设计,互联网才能在规模不断扩大的同时,依然保持可扩展和稳定运行。