网络通信过程
从浏览器输入网址到页面显示:数据包的OSI模型之旅
题目:请你结合OSI模型,详细描述一下从你在浏览器输入一个网址到页面显示出来,这个过程中数据包都经历了哪些"旅程"?
TCP/IP模型自上而下
摘要:本文以TCP/IP模型自上而下的视角,系统梳理了应用层(HTTP、DNS)、传输层(TCP、UDP)、网络层(IP)和网络接口层(物理层)的核心协议、数据包在各层的封装与处理流程,以及各层的主要作用。同时补充了OSI自下而上的接收端处理流程,涵盖物理层信号恢复、数据链路层帧校验与MAC过滤、网络层路由决策、传输层协议分发与流量控制,以及会话层、表示层和应用层的完整处理链路。
应用层
主要协议:HTTP、DNS 协议
HTTP 协议:是客户端与服务器之间的通信规则与数据传输标准。
DNS 协议:是 HTTP 请求的前置步骤,是分布式的域名与 IP 地址映射数据库。其核心作用是将域名转化为 IP,同时也可以进行 IP 到域名的反向解析。
数据包在应用层的经历:DNS 协议通过域名解析将网址转化为 IP 地址,解析完成后通过 HTTP 构造请求报文进行请求。
作用:定义应用层的数据格式,DNS 实现域名到 IP 的映射,发起资源请求。
传输层
主要协议:TCP、UDP 协议
TCP 协议:在不可靠的网络中尽力为应用程序提供可靠的、面向连接的、有序的、基于字节流的端到端数据传输服务(优点:可靠传输;缺点:复杂、系统开销大、速度慢)。
UDP 协议:为程序提供一种简单的、无连接的、尽最大努力交付的、基于数据报的传输服务(优点:极低的延迟和极小的连接建立开销;缺点:无连接不可靠、面向数据报)。
以下是 TCP 与 UDP 的对比:
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠传输(确认、重传、排序) | 不可靠传输(无确认、无重传) |
| 传输方式 | 字节流 | 数据报(保留报文边界) |
| 流量控制 | 支持(滑动窗口) | 不支持 |
| 拥塞控制 | 支持 | 不支持 |
| 适用场景 | 可靠传输(网页、文件、邮件) | 实时传输(视频、语音、游戏) |
| 头部开销 | 较大(20~60 字节) | 较小(8 字节) |
数据包在传输层的经历:对应用层的数据进行封装,添加 TCP 头部(包含源目端口号、序号、确认号、标志位如 SYN/ACK)。
作用:提供端到端的可靠传输(流量控制、差错校验),通过端口区分同一设备的不同应用。
TCP 三次握手过程
TCP 建立连接时通过三次握手(Three-Way Handshake)确保双方收发能力正常,并同步初始序列号(ISN)。具体流程如下:
各阶段状态变化:
- 第一次握手(SYN):客户端发送
SYN=1, seq=x报文,客户端进入SYN_SENT状态,等待服务器确认。 - 第二次握手(SYN+ACK):服务器收到 SYN 后,回复
SYN=1, ACK=1, seq=y, ack=x+1,服务器进入SYN_RCVD状态。 - 第三次握手(ACK):客户端收到 SYN+ACK 后,发送
ACK=1, seq=x+1, ack=y+1,客户端进入ESTABLISHED状态;服务器收到后也进入ESTABLISHED状态,连接建立完成,开始传输数据。
TCP 四次挥手过程
TCP 断开连接时通过四次挥手(Four-Way Wavehand)确保双方数据全部传输完毕,并有序释放连接资源。具体流程如下:
各阶段状态变化:
- 第一次挥手(FIN):客户端发送
FIN=1, seq=u报文,表示数据发送完毕,请求关闭连接。客户端进入FIN_WAIT_1状态。 - 第二次挥手(ACK):服务器收到 FIN 后,回复
ACK=1, seq=v, ack=u+1,表示已收到关闭请求,但可能还有数据未发送完。服务器进入CLOSE_WAIT状态;客户端收到 ACK 后进入FIN_WAIT_2状态。 - 第三次挥手(FIN):服务器数据发送完毕后,发送
FIN=1, ACK=1, seq=w, ack=u+1报文,请求关闭连接。服务器进入LAST_ACK状态。 - 第四次挥手(ACK):客户端收到 FIN 后,回复
ACK=1, seq=u+1, ack=w+1报文。客户端进入TIME_WAIT状态,等待 2MSL(最大报文段生存时间)后自动进入CLOSED状态;服务器收到 ACK 后立即进入CLOSED状态,连接彻底关闭。
关键说明:
TIME_WAIT状态持续 2MSL(约 1~4 分钟),目的是确保最后一个 ACK 能被服务器收到,并让网络中残留的报文段自然消失。- 四次挥手比三次握手多一次交互,因为服务器收到 FIN 后不能立即关闭,需要先回复 ACK 确认,待自身数据发送完毕后再发送 FIN,因此 ACK 和 FIN 分开发送,共需四次。
- 实际场景中,seq 和 ack 序号基于三次握手时协商的初始序列号递增,上图中
u和v分别代表客户端和服务器的当前发送序列号。
网络层
主要协议:IP 协议
相关设备:路由器、三层交换机
IP 协议:寻址与编址的作用是为主机提供逻辑身份。IPv4 和 IPv6 是 IP 协议的两个版本。IP 协议是无连接的、不可靠的,它将可靠性问题交给上层协议(如 TCP)去解决,IP 协议本身保持极简和高效。IP 协议的核心任务是跨网的路由和寻址。
数据包在网络层的经历:对 TCP 报文段封装,添加 IP 头部(包含源目 IP、TTL 生存时间、协议类型)。路由器通过 IP 地址寻址,选择从本地网络到目标服务器网络的最佳路径。
作用:实现跨网络的数据包转发,通过 IP 地址标识网络中的设备。
网络接口层(数据链路层)
主要协议:以太网协议
相关设备:二层交换机
数据包在数据链路层的经历:对 IP 数据包封装,添加以太网头部(源目 MAC 地址、数据帧类型)。交换机通过 MAC 地址在本地网络中转发数据帧(基于 MAC 地址表,记录 MAC 地址与端口的对应关系)。
作用:在同一物理网络内传输数据,通过 MAC 地址标识同一网络中的设备,提供帧校验(FCS 字段)。
网络接口层(物理层)
主要协议:物理介质协议(如双绞线、光纤的电气/光学规范)
数据包在物理层的经历:将数据链路层的二进制数据帧转换为电信号/光信号,通过物理介质(网线、光纤)传输。
作用:实现物理介质上的比特流传输。
OSI 自下而上
物理层接收
服务器网卡检测物理信号、时钟恢复与同步、比特流重组,传递给数据链路层。
数据链路层处理
- 帧校验:计算 CRC,丢弃错帧(错误率约 10⁻¹²)
- MAC 过滤:检查目的 MAC(本机 MAC / 广播 / 组播)
- VLAN 处理:根据 802.1Q 标签确定所属 VLAN
- 解封装:剥离帧头尾,提取 IP 数据包
网络层处理
- IP 验证:检查版本、头部校验和长度
- 分片重组:根据标识、偏移、标志字段重组 IP 分片
- 路由决策:确定数据包是发往本机还是需转发
- 防火墙检查:检查安全策略,记录连接状态
传输层
- 协议分发:根据 IP 头部协议字段(6=TCP,17=UDP)分发给相应协议栈
- TCP 处理:按序号重组数据段、发送 ACK 确认、流量控制(调整接收窗口)、拥塞控制(根据网络状况调整发送速率)
- 端口分发:根据目的端口(80/443)传递给对应应用程序
会话层恢复
恢复会话上下文、检查会话有效性(超时、认证等)、管理会话状态。
表示层转换
- 解密:TLS 解密应用数据
- 解压缩:gzip 解压缩
- 编码转换:字符集转换(如 UTF-8 → Unicode)
- 数据格式化:将网络格式转换为应用可读格式
应用层处理
HTTP 服务器处理:
- 日志记录:记录访问日志
- 缓存检查:检查是否有缓存副本
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)