用户数据报协议(User Datagram Protocol,UDP)

embedded/2025/3/19 23:27:12/

用户数据报协议(User Datagram Protocol,UDP) 是一种简单的、无连接的传输层协议,位于TCP/IP协议栈中,与TCP(传输控制协议)并列。UDP 提供了一种低开销、低延迟的数据传输方式,适用于对实时性要求较高、但对可靠性要求相对较低的应用场景。


UDP 的主要特点

  1. 无连接

    • UDP 不需要在通信前建立连接(如 TCP 的三次握手),直接发送数据包。

    • 发送方和接收方之间没有固定的连接状态。

  2. 不可靠传输

    • UDP 不保证数据包的可靠传输,数据包可能会丢失、重复或乱序到达。

    • 没有确认机制、重传机制或流量控制。

  3. 低开销

    • UDP 头部只有 8 字节(相比之下,TCP 头部至少 20 字节),传输效率高。

    • 不需要维护连接状态,适合低延迟、高吞吐量的场景。

  4. 支持广播和多播

    • UDP 支持将数据包发送到多个目标(广播或多播),而 TCP 只能进行点对点通信。

  5. 适用于实时应用

    • 由于 UDP 的低延迟特性,它常用于实时性要求高的应用,如视频流、语音通话、在线游戏等。


UDP 的头部结构

UDP 头部非常简单,包含以下字段(共 8 字节):

字段长度(字节)描述
源端口号2发送方的端口号(可选,可以为 0)。
目标端口号2接收方的端口号。
长度2UDP 头部和数据的总长度(最小为 8 字节,仅头部)。
校验和2用于检测数据在传输过程中是否出错(可选,可以为 0)。

UDP 的优缺点

优点
  1. 低延迟

    • 由于没有连接建立和维护的开销,UDP 的传输延迟非常低。

  2. 高效

    • 头部开销小,适合传输小数据包。

  3. 支持广播和多播

    • 适用于需要同时向多个目标发送数据的场景。

  4. 简单易实现

    • 协议逻辑简单,适合对可靠性要求不高的应用。

缺点
  1. 不可靠传输

    • 数据包可能丢失、重复或乱序,需要应用层自行处理这些问题。

  2. 无流量控制

    • 发送方可能以过高的速率发送数据,导致接收方无法处理。

  3. 无拥塞控制

    • 网络拥塞时,UDP 不会降低发送速率,可能加剧网络拥塞。


UDP 的应用场景

  1. 实时音视频传输

    • 如 VoIP(语音通话)、视频会议、直播等,对延迟敏感,允许少量数据丢失。

  2. 在线游戏

    • 游戏数据需要快速传输,偶尔丢失数据包对游戏体验影响较小。

  3. DNS 查询

    • DNS 使用 UDP 进行域名解析,因为查询数据量小且需要快速响应。

  4. DHCP

    • 动态主机配置协议(DHCP)使用 UDP 分配 IP 地址。

  5. SNMP

    • 简单网络管理协议(SNMP)使用 UDP 监控和管理网络设备。

  6. 广播和多播应用

    • 网络时间协议(NTP)、路由协议(RIP)等。


UDP 与 TCP 的对比

特性UDPTCP
连接方式无连接面向连接(三次握手)
可靠性不可靠,可能丢失、重复或乱序可靠,保证数据完整性和顺序
头部开销8 字节至少 20 字节
传输效率较低(由于连接维护和确认机制)
流量控制有(滑动窗口机制)
拥塞控制有(慢启动、拥塞避免等)
适用场景实时应用、广播、多播文件传输、Web 浏览、电子邮件等

总结

UDP 是一种轻量级、高效的传输协议,适用于对实时性要求高、但对可靠性要求较低的应用场景。尽管 UDP 本身不提供可靠性保证,但许多应用层协议(如 RTP、QUIC)在 UDP 基础上实现了额外的可靠性机制,以满足特定需求。在选择 UDP 或 TCP 时,需要根据具体应用的需求权衡延迟、可靠性和效率。


http://www.ppmy.cn/embedded/173981.html

相关文章

深度学习技巧

胡适的英语老师、出版家王云五先生是这样自学英语写作的:找一篇英文的名家佳作,熟读几次以后,把它翻译成中文;一星期之后,再将中文反过来翻译成英文,翻译期间绝不查阅英语原文;翻译好后再与原文…

OpenCV图像拼接(2)特征查找与图像匹配之基于仿射变换的图像匹配的一个类cv::detail::AffineBestOf2NearestMatcher

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::AffineBestOf2NearestMatcher 是 OpenCV 库中用于实现基于仿射变换的图像匹配的一个类。这个类主要用于在图像拼接流程中&#xff0…

【智能搜索引擎技术】第二章信息采集(自用)

1.扩展知识:万维网(World Wide Web) 万维网,通常简称为WWW,是一个由互联网上的各种信息资源组成的系统。它通过超文本链接将不同的网页连接在一起,使用户能够方便地访问和浏览这些信息。万维网的核心技术包…

Docker build 会在本地产生巨大的文件

Docker build 会在本地产生巨大的文件, 比如 用 这个命令列出本地镜像 docker images 可见size都是很大的, 到docker目录下,看到ext4.vhdx的大小 80多G 那只能用这个命令把不用的镜像删掉了: (rmi后面是镜像id&a…

c++基础知识-图论进阶

一、拓扑排序 1、基础知识 1)什么是拓扑排序 对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若,则u在线性序列中出现在v之前。 2)拓扑排序的操作方法 重复执行…

golang-type关键字

type 关键字 Type关键字在Go语言中作用很重要,他主要用来实现两个功能: 【自定义类型】 自定义类型底层是一种类型,但是不会拥有底层类型的方法。 自定义类型与底层类型相比是一种新类型,二者之间需要显式类型转换。 //语法 type 自定义类型…

【C++多线程】thread

C中的std::thread是C11引入的线程库的一部分&#xff0c;提供了创建和管理线程的能力。它封装了操作系统的线程接口&#xff0c;使得在C中更方便地进行多线程编程。 1. std::thread 的定义 std::thread 类位于<thread>头文件中&#xff0c;定义在std命名空间下&#xff…

mac npm run dev报错 error:0308010C:digital envelope routines::unsupported

并且提示 Unsupported engine { npm WARN EBADENGINE package: achrinza/node-ipc9.2.2, npm WARN EBADENGINE required: { node: 8 || 10 || 12 || 14 || 16 || 17 }, npm WARN EBADENGINE current: { node: v18.18.0, npm: 9.8.1 } npm WARN EBADENGINE } package.jso…