在浏览器中输入一个网址(如baidu.com)并按下回车,网页瞬间呈现在眼前。这背后是简单的操作,其实着着复杂的网络通信流程。本文将基于网络拓扑图和OSI模型,带您一步步拆解数据包在网络中的奇妙旅程。
一、网络通信的理论基础:OSI模型 vs TCP/IP模型
在深入具体流程之前,我们需要理解数据是如何被“预留”和“解包”的。网络通信遵循一定的分层模型。
虽然理论上存在OSI七层模型,但在实际应用中,我们主要使用TCP/IP四层(或五层)模型。
- 应用层(Application Layer):直接为用户的应用程序(如浏览器)提供服务,常见协议有DNS、HTTP、FTP等。
- 传输层(Transport Layer):负责端到端的通信,引入了端口的概念,常见的协议有TCP、UDP。
- 网络层(Network Layer):负责数据包的路由和转发,引入了IP地址的概念。
- 数据仓库层(Data Link Layer):负责在同类内的节点间传输,使用MAC地址。
- 物理层(Physical Layer):负责比特流在物理介质(网线、器件)上的传输。
二、模拟环境与网络拓扑
为了清晰地演示数据流向,我们设置如下的网络环境:



设备配置详情:
- 用户电脑(客户端):
- IP地址:(
192.168.1.10内网IP) - MAC地址:(
AA-AA-AA-AA-AA简称AA) 网卡的唯一物理地址 - 网关(网关):
192.168.1.1通常是路由器 - DNS服务器:
8.8.8.8
- IP地址:(
- 路由器(网关路由器):
- LAN口(内网):IP
192.168.1.1、MACCC - WAN口(公网):IP
20.20.20.20、MACDD - 功能:负责路由转发和NAT(网络地址转换)。
- LAN口(内网):IP
- DNS服务器:IP
8.8.8.8,MACFF(假设的最终跳) - 百度Web服务器:IP
7.7.7.7
三、第一阶段:DNS解析——寻找百度的“门牌号”
当你在浏览器输入baidu.com时,电脑无法直接通过域名找到服务器,必须先获取其IP地址。
1. 查找存储
浏览器会按照以下顺序查找IP:
- 浏览器存储:之前是否访问过?
- 系统存储:是否有网络存储?
- Hosts文件:本地是否有强制映射?
如果都找不到,电脑就会向配置的DNS服务器(8.8.8.8)发起查询请求。
2. DNS请求的数据封装(Encapsulation)
电脑生成一个请求:“请告诉我 baidu.com 的 IP 地址”。这个数据包会从应用层开始,底层封装:
- 应用层:生成DNS查询报文。
- 传输层:封装端口。
- 源端口:随机生成(例如
404) - 目标端口:DNS默认端口
53
- 源端口:随机生成(例如
- 网络层:封装IP地址。
- 来源 IP :
192.168.1.10(本机) - 目标IP:
8.8.8.8(DNS服务器)
- 来源 IP :
- 数据地址存储层:封装MAC。
- 电脑发现目标IP
8.8.8.8不在同一个局域网,因此必须发给默认网关(路由器)。 - 通过ARP协议获取网关的MAC地址。
- 来源 MAC :
AA(本机) - 目标MAC:(
CC路由器的LAN口)
- 电脑发现目标IP
- 物理层:通过网线将数据发送给交换机,再由交换机转发给路由器。
四、第二阶段:数据传输与NAT转换
1.交换机(第2层)
交换机数据包,解析数据仓库层收到头部。看到目标MAC是CC,查表找到CC对应路由器的端口,然后将数据转发给路由器。
2. 路由器(第 3 层)和 NAT 的魔法
路由器数据后,进行以下操作:收到
- 解包:找到目标MAC是自己(
CC),接收并割掉二层头。 - 路由:检查网络层目标IP (
8.8.8.8),发现需要转发到公网(WAN口)。 - NAT(网络地址转换):这是关键的一步!
- 内网 IP (
192.168.1.10) 无法在公网路由。路由器预留源 IP 替换为自己的 WAN 口公网 IP (20.20.20.20)。 - 同时,路由器会建立一张NAT映射表:
- 转换前:
192.168.1.10:404(内网IP:源端口) - 转换后:(
20.20.20.20:505公网IP:路由器随机分配的新端口)
- 转换前:
- 现在,数据包的源IP变了
20.20.20.20,源端口变了505。
- 内网 IP (
- 重新封装:
- 源 MAC :
DD(路由器 WAN 口) - 目标 MAC:下一个跳路由器的 MAC(例如
XX) - 数据包通过WAN口飞向互联网。
- 源 MAC :
五、第三阶段:DNS服务器处理与回包
1. 到达DNS服务器
数据包经过互联网上的多次截图,最终到达DNS服务器( 8.8.8.8)。
- 服务器层解包,在应用层读懂了请求:“查询baidu.com的IP”。
- 服务器查找数据库,找到了百度IP:
7.7.7.7。
2. DNS响应回传
服务器生成响应包,原路返回。
- 传输层:源端口
53->目标端口505(路由器的映射端口)。 - 网络层:源IP
8.8.8.8-> 目标IP20.20.20.20(路由器的公网IP)。
六、第四阶段:归途与NAT逆向转换
1.回到路由器
数据包回到路由器的WAN口。
- 检查路由器数据包,目标是
20.20.20.20:505。 - 查NAT表:发现
505端口对应的是内网的192.168.1.10:404。 - 修改数据包:将目标IP改回
192.168.1.10,目标端口改回404。
2. 滨海湾
- 路由器重新封装二层头部:源 MAC
CC-> 目标 MACAA。 - 交换机将数据包发回给电脑。
3.获取IP
电脑数据包,层解包收到至应用层,浏览器终于获得了百度的IP地址:7.7.7.7。
七、最终阶段:HTTP请求(访问网页)
现在电脑知道了百度的IP,真正的网页请求才刚刚开始。
- 构造HTTP请求:浏览器生成“获取首页数据”的请求。
- 封装:
- 应用层:HTTP协议。
- 传输层:目标端口80(HTTP默认端口)。
- 网络层:目标IP 7.7.7.7。
- 传输:流程与上述DNS查询一致(封装 -> 路由 -> NAT -> 公网 -> 服务器)。
- 响应: 百度服务器 (
7.7.7.7) 收到请求,将网页 HTML 缓存代码返回。 - 渲染:浏览器收到回包,解析HTML,百度的首页就这样出现在你的屏幕上了。
总结
一次简单的网页访问,实际上是无数网络设备良好工作的结果。从DNS解析获取地址,到OSI模型的层封装,再到NAT技术的地址转换,每一个阶段都至关重要。希望这篇笔记能帮助彻底理解网络通信的基本原理!
Comments NOTHING