传输层协议:UDP

目录

1、概念

2、报文结构

3、核心特性

3.1 无连接

3.2 不可靠交付

3.3 面向数据报

3.4 轻量级&高效

3.5 支持广播和组播

4、典型应用场景

5、优缺点分析

6、与TCP的区别


1、概念

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

主要目的:供一种简单、高效、无连接的数据传输服务。

2、报文结构

UDP 头部: (8 字节)

  • 源端口: (2 字节) 发送方应用程序的端口号。可选(可置为 0),用于接收方回复时知道发给谁。

  • 目的端口: (2 字节) 接收方应用程序的端口号。必需

  • 长度: (2 字节) UDP 数据报的总长度(头部 + 数据),以字节为单位。最小值是 8(只有头部)。

  • 校验和: (2 字节) 用于检测头部和数据在传输过程中是否出错(可选,但强烈推荐使用)。覆盖头部、数据和伪头部(包含源/目标IP地址、协议号等)。如果接收方计算校验和不匹配,数据报会被静默丢弃(不通知发送方)。

数据: (长度可变) 应用程序要发送的有效载荷。

3、核心特性

3.1 无连接

这是 UDP 最显著的特点。在发送数据之前,不需要像 TCP 那样先建立连接(三次握手)。

应用程序只需构造好数据报(Datagram),指定目标 IP 地址和端口号,就可以直接发送出去。

同样,接收方也不需要事先同意或准备好接收连接。它只是监听某个端口,等待数据报的到来。(虽然UDP可以有校验和检查错误,但不保证送达

3.2 不可靠交付

UDP 不保证数据报一定能到达目的地。

不提供以下 TCP 具有的可靠性机制:

  • 数据包确认: 接收方不会发送 ACK 确认收到数据。

  • 超时重传: 发送方在超时后不会自动重发丢失的数据包。

  • 数据包排序: 接收到的数据包顺序可能与发送顺序不同,UDP 不会重新排序。

  • 重复数据检测: 可能会收到重复的数据包(例如,网络路径变化导致),UDP 不会去重。

  • 流量控制: 不会根据接收方的处理能力调整发送速率。

  • 拥塞控制: 不会主动检测和避免网络拥塞。

结果: 数据包可能丢失、重复、乱序到达,或者被网络设备(如路由器)静默丢弃(例如在拥塞时)。应用程序需要自己处理这些问题(如果需要)。

3.3 面向数据报

数据是以离散的、独立的 “数据报” 为单位发送和接收的(完整的)。

  • 发送方应用程序的每次写操作(例如一个 sendto() 调用)通常会产生一个独立的 UDP 数据报。

  • 接收方应用程序的每次读操作(例如一个 recvfrom() 调用)通常接收一个完整的 UDP 数据报。

关键: UDP 不会像 TCP 那样将应用层的数据流拆分成多个段(Segments)或重新组装成流。它保留消息边界。

3.4 轻量级&高效

  • 协议头非常小(只有 8 字节),开销远低于 TCP(通常 20 字节,带选项更多)。

  • 没有连接建立/拆除的开销(三次握手、四次挥手)。

  • 没有复杂的确认、重传、排序、流量控制、拥塞控制逻辑。这使得 UDP 的协议栈处理非常快,消耗的 CPU 和网络资源更少。

结果: 延迟更低,传输速度理论上可以更快(尤其是在低丢包率的网络上)。

3.5 支持广播和组播

UDP 可以将数据报发送到:

  • 单播: 单个目标主机。

  • 广播: 同一局域网内的所有主机(例如 255.255.255.255 或子网广播地址)。

  • 组播: 加入特定组播组的所有主机。

TCP 是严格的一对一连接,只支持单播。

4、典型应用场景

1> 对延迟极其敏感,能容忍少量丢包:

  • 实时音视频传输: VoIP (如 Skype, Zoom 的部分传输)、视频会议、在线直播。偶尔丢帧或短暂声音中断比延迟高导致卡顿更可接受。

  • 在线游戏: 特别是快节奏的 FPS、MOBA 等。玩家位置、动作指令需要极快送达,丢失个别数据包(如非关键位置更新)影响相对较小,而延迟高(Lag)会严重影响体验。

  • 实时流媒体: 部分直播协议(如某些 RTP 实现)。

2> 简单查询/响应模型,且请求/响应本身很小:

  • DNS(域名系统): 查询域名对应的 IP 地址。请求和响应通常很小,一次查询一个响应,重试成本低且快速(客户端负责超时重试)。

  • DHCP(动态主机配置协议): 获取 IP 地址、网关等信息。使用广播/组播,且过程本身包含重试机制。

  • SNMP(简单网络管理协议): 网络设备监控和管理。查询和陷阱(Trap)消息。

  • TFTP(简单文件传输协议): 轻量级文件传输(如路由器固件升级),协议简单,自带简单的确认机制(ACK)。

3> 广播/组播应用:

  • 服务发现: 设备在局域网内广播宣告自身服务(如 Bonjour/mDNS)。

  • 路由协议: 如 RIP。

  • 多媒体分发: 组播视频流。

4> 在可靠传输之上构建自定义协议:

  • 应用层可以在 UDP 基础上实现自己需要的、更贴合应用特性的可靠性、顺序、拥塞控制逻辑。这提供了极大的灵活性:

    • QUIC: HTTP/3 的底层传输协议,基于 UDP,整合了 TLS 加密,并实现了更快速、更灵活的连接建立、可靠传输和拥塞控制。

    • DTN(容断网)协议: 用于高延迟、易中断的网络环境(如太空通信)。

    • 特定游戏网络协议: 针对游戏状态同步特性优化的可靠性和顺序机制。

5、优缺点分析

优点

  • 低延迟: 无连接建立开销,无等待确认的延迟。

  • 低开销: 头部小,协议逻辑简单,节省带宽和计算资源。

  • 高效率: 在低丢包率网络中,吞吐量可以非常高。

  • 简单: 协议本身简单,API 也相对简单。

  • 支持广播/组播: 实现一对多通信的基础。

  • 无连接状态: 服务器端无需为每个客户端维护连接状态,能支持更多并发“连接”(实际是无连接的会话)。

  • 灵活性: 为应用层提供基础传输,允许在其上构建自定义的可靠性等机制。

缺点

  • 不可靠: 数据可能丢失、重复、乱序。应用程序必须自行处理(如果需要可靠性)。

  • 无拥塞控制: 发送方可能以过高速度发送数据淹没网络,导致拥塞崩溃。应用层需要谨慎设计发送速率。

  • 数据报大小限制: 单个 UDP 数据报的有效载荷通常不能超过 64KB(减去 IP 和 UDP 头部)。更大的数据需要应用层分片和重组(易丢失)。

  • 易受 DDoS 攻击: 伪造源 IP 地址发送大量 UDP 数据报进行反射放大攻击(如 DNS/NTP反射攻击)非常容易。

6、与TCP的区别

特性UDPTCP
连接无连接面向连接 (需三次握手)
可靠性不可靠 (不保证送达、顺序、不重复)可靠 (保证送达、顺序、无重复)
传输单位数据报 (保留消息边界)字节流 (无消息边界)
速度更快 (低延迟、低开销)相对较慢 (连接管理、确认、控制机制)
开销 (头部小,8字节) (头部大,通常20字节+)
流量控制 (滑动窗口)
拥塞控制 (多种算法)
广播/组播支持不支持 (仅单播)
复杂性简单复杂
典型应用实时音视频、游戏、DNS、广播、QUIC/HTTP3Web浏览(HTTP/HTTPS)、文件传输(FTP)、邮件(SMTP/POP/IMAP)、远程登录(SSH)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…

【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器

目录 1. 汇编代码 1.1 debug编译 1.2 release编译 2. 汇编分析 2.1 浮点参数传递规则 2.2 栈帧rsp的变化时序 2.3 参数的访问逻辑 2.4 返回值XMM0寄存器 3. 汇编转化 3.1 Debug编译 3.2 Release 编译 3.3 C语言转化 1. 汇编代码 上一节介绍了整型的函数传参&#x…

华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 前言 1. 项目背景与技术选型 1.1 项目…

【多智能体】受木偶戏启发实现多智能体协作编排

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《人工智能》旨在记录最新的科研前沿,包括大模型、具身智能、智能体等相关领域,期待与你一同探索、学习、进步,一起卷起来叭&#xff…

Java八股文——Spring篇

文章目录 Java八股文专栏其它文章Java八股文——Spring篇SpringSpring的IoC和AOPSpring IoC实现机制Spring AOP实现机制 动态代理JDK ProxyCGLIBByteBuddy Spring框架中的单例Bean是线程安全的吗?什么是AOP,你们项目中有没有使用到AOPSpring中的事务是如…

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配,成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景,通过标准化 SQL 工作台与细粒度权限管控两大能力,助力企业安全高效…

开源技术驱动下的上市公司财务主数据管理实践

开源技术驱动下的上市公司财务主数据管理实践 —— 以人造板制造业为例 引言:财务主数据的战略价值与行业挑战 在资本市场监管日益严格与企业数字化转型的双重驱动下,财务主数据已成为上市公司财务治理的核心基础设施。对于人造板制造业而言&#xff0…

借助它,普转也能获得空转信息?

在生命科学研究领域,转录组技术是探索基因表达奥秘的有力工具,在疾病机制探索、生物发育进程解析等诸多方面取得了显著进展。然而,随着研究的深入,研究人员发现普通转录组只能提供整体样本中的基因表达水平信息,却无法…

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…

Java事务回滚详解

一、什么是事务回滚? 事务回滚指的是:当执行过程中发生异常时,之前对数据库所做的更改全部撤销,数据库状态恢复到事务开始前的状态。这是数据库“原子性”原则的体现。 二、Spring 中的 Transactional 默认行为 在 Spring 中&am…

云灾备数据复制技术研究

云灾备数据复制技术:数字时代的“安全气囊” 在当今信息化时代,数据就像城市的“生命线”,一旦中断,后果不堪设想。想象一下,如果政务系统突然崩溃,成千上万的市民服务将陷入瘫痪。这就是云灾备技术的重要…

如何处理Shopify主题的显示问题:实用排查与修复指南

在Shopify店铺运营过程中,主题显示问题是影响用户体验与品牌形象的常见痛点。可能是字体错位、图片无法加载、移动端显示混乱、功能失效等,这些都可能造成客户流失和转化下降。 本文将从问题识别、原因分析、修复方法到开发者建议全方位解读如何高效解决…

前端监控方案详解

一、前端监控方案是什么? 前端监控方案是一套系统化的工具和流程,用于收集、分析和报告网站或Web应用在前端运行时的各种性能指标、错误日志、用户行为等数据。它通常包括以下几个核心模块: 性能监控:页面加载时间、资源加载时间…

Camera相机人脸识别系列专题分析之十二:人脸特征检测FFD算法之libvega_face.so数据结构详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: Camera相机人脸识别系列专题分析之十一:人脸特征检测FFD算法之低功耗libvega_face.so人脸属性(年龄,性别,肤…

如何配置HarmonyOS 5与React Native的开发环境?

配置 HarmonyOS 5 与 React Native 的开发环境需遵循以下步骤 一、基础工具安装 ‌DevEco Studio 5.0‌ 从 HarmonyOS 开发者官网 下载安装勾选组件: HarmonyOS SDK (API 12)ArkTS 编译器JS/ArkTS 调试工具HarmonyOS 本地模拟器 ‌Node.js 18.17 # 安装后验证版…

kotlin kmp 副作用函数 effect

在 Kotlin Multiplatform (KMP) Compose 中,“effect functions”(或“effect handlers”)是专门的可组合函数,用于在 UI 中管理副作用。 在 Compose 中,可组合函数应该是“纯”的和声明式的。这意味着它们应该理想地…

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…

【Pandas】pandas DataFrame isna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一个有效观测值”&#xff09…

MQTT协议:物联网时代的通信基石

MQTT协议:物联网时代的通信基石 在当今快速发展的物联网(IoT)时代,设备之间的通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)协议作为一种轻量级的消息传输协议,正逐渐成为物联…