UDP 为什么属于传输层?从封装过程讲清网络模型

UDP 是传输层协议。在 OSI 七层模型中位于第四层,在 TCP/IP 模型中也位于传输层。

如果只记住这个答案,很容易过一段时间又把 UDP 与 IP 混淆。更稳妥的理解方式,是看数据在网络中如何被逐层封装,以及每一层究竟解决什么问题。

网络模型为什么要分层

网络通信要同时处理很多事情:应用如何组织数据、不同程序如何区分、目标主机在哪里、数据如何穿过网卡和物理线路。

如果把这些功能全部塞进一个协议,设计、实现和排错都会非常困难。分层模型把不同职责拆开,每一层只处理相对明确的问题。

在常见的 TCP/IP 模型中,可以分为四层:

层级 主要职责 常见协议
应用层 定义业务数据和交互规则 HTTP、DNS、SMTP
传输层 实现应用进程之间的数据传输 TCP、UDP
网际层 实现主机寻址与跨网络路由 IPv4、IPv6、ICMP
网络接口层 在具体网络介质上传输数据 Ethernet、Wi-Fi

UDP 位于应用层与网际层之间。它接收应用程序的数据,加上传输层首部,再交给 IP 协议。

一段 UDP 数据是怎么发出去的

假设应用程序准备向服务器发送一条数据。

第一步,应用层生成业务数据。

第二步,UDP 在数据前面添加首部,形成 UDP 数据报。首部中包含源端口、目标端口、数据报长度和校验和。

第三步,IP 协议在 UDP 数据报外添加 IP 首部,形成 IP 数据包。IP 首部中包含源 IP 地址和目标 IP 地址。

第四步,数据链路层继续封装,最终通过网线、光纤或无线信号发送出去。

整个过程可以写成:

应用数据 → UDP 数据报 → IP 数据包 → 数据帧

接收端会反向解封装。网卡收到数据帧后交给 IP 层,IP 层根据协议字段交给 UDP,UDP 再根据目标端口交给具体应用程序。

这就是 UDP 属于传输层的原因:它解决的是进程之间的数据交付,而不是主机寻址。

UDP 的数据报特征

UDP 面向数据报,每次发送都对应一个独立消息。

假设发送端连续发送两条 UDP 数据:

  • 第一条长度为 100 字节;

  • 第二条长度为 200 字节。

接收端正常收到时,看到的仍然是两个独立数据报,而不是一段没有边界的 300 字节数据。

TCP 则不同。TCP 面向字节流,不保留应用程序每次写入时的消息边界。发送端写入两次,接收端可能一次读完,也可能分多次读取。因此,基于 TCP 的应用协议通常需要通过长度字段、分隔符或固定格式识别消息边界。

UDP 的简单体现在哪里

UDP 首部固定为 8 字节,只包括四个字段。它不需要保存连接状态,也没有 TCP 中用于可靠传输的序号、确认号和窗口字段。

因此,UDP 本身不处理:

  • 连接建立与释放;

  • 数据送达确认;

  • 丢包自动重传;

  • 数据顺序恢复;

  • 流量控制;

  • TCP 式拥塞控制。

这些能力的缺失让 UDP 协议本身更简单,但也意味着应用程序要自己承担相应风险。

如果数据可以丢,应用可以不做额外处理;如果关键数据不能丢,应用就要增加确认和重传;如果数据必须有序,还要设置序号并处理乱序。

TCP 与 UDP 的设计思路不同

维度 UDP TCP
服务形式 无连接数据报 面向连接字节流
可靠传输 不内置 内置
数据排序 不提供 提供
消息边界 保留 不保留
流量控制 不提供 提供
拥塞控制 不提供 提供
首部长度 8 字节 最少 20 字节
广播和组播 可以支持 不支持

TCP 希望为应用程序提供一条可靠、有序的字节流。网络中即使出现丢包和乱序,TCP 也会尽量在传输层处理。

UDP 只提供基本的数据报交付能力,不替应用决定什么数据值得等待、什么数据可以放弃。

所以,TCP 和 UDP 并不是简单的高级与低级关系,而是两种不同的职责划分方式。

基于 UDP 的应用也能可靠

"UDP 不可靠"只描述 UDP 本身不提供可靠性机制。

应用层完全可以在 UDP 之上增加:

  • 数据序号;

  • 确认响应;

  • 超时重传;

  • 重复数据过滤;

  • 拥塞控制;

  • 加密与身份验证。

QUIC 就建立在 UDP 之上,同时提供可靠传输、拥塞控制和安全连接。HTTP/3 使用 QUIC,也具备可靠的数据传输能力。

这类设计选择 UDP,不是为了放弃可靠性,而是为了绕开 TCP 固定的传输方式,在更高层重新组织连接和数据流。

哪些业务更适合 UDP

UDP 常用于对实时性较敏感的业务,例如:

  • 实时语音;

  • 视频直播;

  • 在线游戏状态同步;

  • 普通 DNS 查询;

  • 网络发现;

  • 基于 QUIC 的通信。

TCP 更常用于必须保证内容完整的场景,例如网页数据、文件传输、邮件和数据库连接。

但应用场景只是参考,不是绝对规则。语音业务也可能对关键控制消息做可靠传输,DNS 在某些情况下也会使用 TCP。

判断时应该回到业务要求:数据是否允许丢失,顺序是否重要,旧数据是否仍有价值,以及应用是否愿意自行实现可靠机制。

UDP 属于传输层,因为它负责通过端口实现应用进程之间的数据交付。它和 TCP 的根本区别,是对连接状态和可靠传输责任的划分不同,而不只是一个快、一个慢

相关推荐
虎头金猫11 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
wuyk55513 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
XUEYUAN521215 小时前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
QYRdata16 小时前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK16 小时前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
chshang199216 小时前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖17 小时前
Netty 核心组件与 Reactor 模型详解
网络·架构
ITxiaobing202317 小时前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk55517 小时前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
z落落17 小时前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp