当我们在浏览器输入:
google.com
按下回车之后,这一瞬间都发生了什么? 以此为例,我们来聊聊计算机网络。
一、五层模型
计算机网络常用一个简化模型来理解通信过程:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
可以把它理解为:
一条请求,从“人能理解的信息”,逐层被包装,最终变成“电信号”传出去
二、整体流程(先建立直觉)
整个过程可以先用一句话描述:
浏览器发起请求 -> 数据逐层封装 -> 发到路由器 -> 经互联网转发 -> 到达Google -> 再逐层拆解
重点在于:
- 发送时:从上到下封装
- 接收时:从下往上解析
三、逐层拆解:每一层在做什么
下面我们把“访问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时,真正发送的不是一次简单请求,而是一系列跨层协作的结果。
首先,在真正发起请求之前,设备已经通过 DHCP 获得了自己的网络身份,包括IP地址、默认网关和DNS服务器。这一步属于应用层,为后续通信提供基础环境。
当用户输入域名后,浏览器会先通过DNS将google.com解析为一个具体的IP地址。这一过程同样发送在应用层,它解决的是“目标在哪里”的问题。
接下来,浏览器构造HTTP请求,并交给传输层处理。传输层通过 TCP 建立连接,并负责将数据拆分、编号和保证可靠传输。这一层解决的是“数据如何稳定送达”。
随后进入网络层。此时数据已经带有源 IP (NAT转换后的公网IP)和目标 IP。设备会判断目标地址不在本地网络,因此将呼叫发送给默认网关。路由器在这一层根据路由表决定“下一跳是谁”,数据在互联网中通过多台路由器逐跳转发,直到接近目标服务器。
但在真正把数据发到“下一跳设备”之前,还需要在链路层完成一次关键转换,通过 ARP 将“下一跳的 IP 地址”解析为对应的 MAC 地址。因为在局域网中,数据是通过 MAC 地址来实际传输的。这一层解决的是“这一跳交给谁”。
最后,数据在物理层被转换为电信号或无线信号,通过网线或WiFi发出。
整个过程可以理解为一次逐层封装:
应用层定义请求内容,传输层保证可靠传输,网络层决定路径方向,链路层完成局部投递,物理层负责实际发送。
当数据到达 Google 服务器后,会按照相反的顺序逐层解包,还原出原始的HTTP请求,服务器处理后再将响应按同样路径返回。
从这个角度看,之前看似零散的概念———DNS、TCP、IP、ARP、NAT、路由———其实并不是独立存在的知识点,而是分布在不同层中、共同完成一次通信的协作机制。
也正因为这种分层设计,互联网才能在规模不断扩大的同时,依然保持可扩展和稳定运行。