UDP 是哪一层协议?为什么它不是网络层协议

简介: UDP是传输层协议,位于OSI第四层和TCP/IP模型的传输层。它通过端口号实现进程间通信,与IP(网络层)协同工作:IP寻址主机,UDP定位应用。首部仅8字节,无连接、不可靠,但低延迟、高效率,适用于实时音视频、游戏等场景。

UDP 是传输层协议。

在 OSI 七层网络模型中,UDP 位于第四层;在 TCP/IP 模型中,它同样位于传输层。TCP 也在这一层,两者负责的都是应用进程之间的数据传输。

有人看到 UDP 可以直接发包,不需要提前建立连接,就把它归到网络层。这个判断混淆了“工作方式”和“协议职责”。无连接是 UDP 的传输方式,不代表它负责网络寻址和路由。

先区分 IP 地址和端口号

理解 UDP 所在层级,关键是分清 IP 地址与端口号各自解决什么问题。

IP 协议通过 IP 地址定位目标设备,主要负责主机之间的寻址与路由,属于网络层。

UDP 通过端口号定位设备中的具体应用程序,负责进程之间的数据交付,属于传输层。

例如,一条数据发往某台服务器时:

  • IP 地址负责找到服务器;
  • 目标端口负责找到服务器上的具体服务;
  • UDP 负责承载应用数据并提供端口信息。

数据进入网络时,会经过下面几步:

应用数据 → UDP 首部 → IP 首部 → 数据链路层帧

从封装关系也能看出,UDP 位于应用数据与 IP 协议之间。

UDP 为什么叫用户数据报协议

UDP 的全称是 User Datagram Protocol,也就是用户数据报协议。

“数据报”意味着 UDP 面向一条条独立消息。应用程序发送一次数据,UDP 就把这段数据视为一个完整数据报。接收端同样按数据报接收,消息边界会被保留。

这和 TCP 不同。TCP 面向字节流,应用程序连续发送的数据进入 TCP 后,会被视为一串连续字节。接收端一次读到多少字节,不一定与发送端每次写入的数据长度一致。

因此,使用 UDP 时,应用程序更容易区分每条消息;使用 TCP 时,应用层往往需要自行设计消息长度或分隔规则。

UDP 首部为什么只有 8 字节

UDP 首部固定为 8 字节,包含四个字段:

  • 源端口;
  • 目标端口;
  • 长度;
  • 校验和。

UDP 不维护连接状态,也没有序号、确认号和窗口等字段,所以首部比 TCP 简单。

简单带来的结果是固定开销较小,但协议本身不提供以下保证:

  • 数据一定送达;
  • 数据只到达一次;
  • 数据按照发送顺序到达;
  • 网络拥塞时自动降低发送速度;
  • 接收方来不及处理时自动协调发送速度。

这也是 UDP 被称为“不可靠传输协议”的原因。这里的“不可靠”是一个技术定义,不等于 UDP 不能用于重要业务。

如果应用层自行增加确认、重传、排序和拥塞控制,仍然可以在 UDP 之上实现可靠传输。

TCP 比 UDP 多做了什么

TCP 是面向连接的可靠传输协议。

正式传输数据前,TCP 通常需要建立连接。传输过程中,它会使用序号与确认机制判断数据是否到达;发现数据丢失时,可以进行重传;收到乱序数据后,会按照序号重新整理。

功能 UDP TCP
建立连接 不需要 需要
确认数据送达 不提供 提供
丢包重传 不提供 提供
数据排序 不提供 提供
流量控制 不提供 提供
拥塞控制 不提供 提供
消息边界 保留 不保留
首部大小 8 字节 最少 20 字节

两者的差别不只是速度。TCP 替应用程序处理了大量可靠性问题,UDP 则让应用程序自己决定哪些问题需要处理。

UDP 为什么适合实时场景

直播、语音和在线游戏中的部分数据具有很强的时效性。

例如,一个表示游戏角色位置的数据包晚了两秒才到。即使它完整无误,也可能已经没有使用价值,因为角色早已移动到新位置。

对于这类数据,等待重传未必是好事。应用程序更可能选择跳过旧数据,直接处理最新状态。

UDP 不会因为前面的数据没有到达,就强制后面的数据等待,因此适合对实时性敏感的场景。但应用层仍然需要处理网络波动,不能认为换成 UDP 就能自动解决延迟问题。

实际性能还取决于:

  • 网络是否拥塞;
  • 路由是否稳定;
  • 单个数据报是否过大;
  • 应用是否控制发送速率;
  • 是否实现必要的丢包恢复。

DNS 为什么经常使用 UDP

普通 DNS 查询的数据量通常较小,而且一次查询只需要一问一答。使用 UDP 可以直接发送请求,减少单次查询的连接开销。

但“DNS 使用 UDP”不是绝对规则。当响应被截断、数据量较大或者进行区域传送时,DNS 也可能使用 TCP。

现在还有不同的加密 DNS 方案,例如 DoH、DoT 和 DoQ,它们的底层传输方式也不完全相同。因此,不能把某个应用层协议永远固定到 TCP 或 UDP 中。

UDP 和 TCP 的选择标准

可以用两个问题来判断:

第一,数据丢失或乱序是否可以接受?

第二,业务是否愿意在应用层自行处理可靠性?

文件下载、邮件传输和数据库连接要求数据完整,通常更适合 TCP。实时语音、视频和游戏状态同步更看重时效性,可以考虑 UDP。

如果业务既需要低延迟,又需要可靠传输,也不一定只能选择 TCP。QUIC 就构建在 UDP 之上,并在应用协议中实现了可靠传输、拥塞控制和加密。

所以,UDP 属于传输层而不是网络层。它与 TCP 的根本区别,在于 UDP 只提供较基础的数据报传输能力,TCP 则在传输层加入了连接管理与可靠性机制。

相关文章
|
2月前
|
缓存 开发工具 数据安全/隐私保护
Windows PowerShell 设置 HTTP 代理:系统级配置完整教程
Windows代理无“总开关”!浏览器、PowerShell、后台服务各走一套配置:WinINET(用户级)、WinHTTP(系统级)、环境变量(跨平台工具)。本文详解三者 PowerShell 配置、验证与恢复,助你精准穿透代理迷雾。
|
机器学习/深度学习 数据采集 算法
残差分析| 学习笔记
快速学习残差分析。
残差分析| 学习笔记
|
安全 前端开发 JavaScript
Java精品视频全套资源汇总,自学Java人手一套!
发现有很多粉丝是学java的,为了大家能够快速成长,所以我今天精心挑选了一些java相关的视频资源分享给大家,大家一定好好利用起来,这些技术学会之后,进大厂指日可待,加油。
9003 0
|
2月前
|
人工智能 文字识别 JavaScript
AI 测试提效 | 脚本能跑但总挂?分享我的 ui-testscript-enhancer + Skill UI 自动化健壮性增强方案
本文介绍`ui-testscript-enhancer`技能:自动为AI生成的UI测试脚本注入六大健壮性能力——智能等待、弹窗处理、iframe/Shadow DOM穿透、异常重试、失败截图录屏及验证码识别(集成ddddocr),5分钟将“能跑”的脚本升级为CI-ready的“跑得稳”生产级脚本。
400 2
AI 测试提效 | 脚本能跑但总挂?分享我的 ui-testscript-enhancer + Skill UI 自动化健壮性增强方案
|
2月前
|
人工智能 Java BI
【AI】Agent 全栈进阶|大模型基础与对话调用
本文开启Agent代码实操,先讲解大语言模型底层原理,依托LangChain框架搭配阿里百炼接口,演示基础对话、系统提示词角色扮演、图片多模态识别与多轮上下文会话,附带完整可运行Python代码
369 3
|
2月前
|
设计模式 人工智能 监控
智能体工作流引擎设计:LangGraph与状态机在企业生产中的应用
本文剖析企业级AI Agent工作流核心架构,对比状态机(强确定性、易审计)与LangGraph(图结构、动态规划)两大范式,提出“外层状态机+内层LangGraph”的混合生产模式,并详解状态持久化、事件溯源、人机协同、工具隔离等高可靠设计实践。
322 1
|
2月前
|
自然语言处理 安全 数据挖掘
全球iP地址查询-手机号码查询归属地|邮政编码查询|iP地址归属地
全球IP地址查询API(IP归属地定位接口)是高精度、高覆盖的标准化地理定位服务,支持国内外IP解析至区县级,覆盖率达99.999%,适用于金融风控、广告定向、CDN调度、安全分析等场景,提供多语言SDK、批量查询、私有化部署及透明计费。
405 0
全球iP地址查询-手机号码查询归属地|邮政编码查询|iP地址归属地
|
2月前
|
数据采集 监控 数据安全/隐私保护
2026年排查指南:网络代理配置异常怎么解决?5种常见错误代码排查与修复
网络代理异常常被误判为“代理不可用”,实则需按链路分层排查:407(认证失败)、403(目标拒绝)、502(转发异常)、504(网关超时)、ECONNRESET(连接重置)。精准定位层级,结合日志与错误分布分析,方能高效排障,避免盲目换代理。
|
2月前
|
SQL JSON 移动开发
SQL派生表优化实战:从物化机制到LATERAL JOIN的完整进阶
很多人只知道“子查询改JOIN就快了”,但不知道为什么,也不知道什么时候该改、什么时候不该改。本文从派生表的物化机制出发,拆解临时表膨胀、索引失效的根因,通过真实案例对比派生表、CTE、LATERAL JOIN三种写法的性能差异,帮助读者从“知道现象”升级到“理解原理”。