当前位置: 首页 > news >正文

UDP协议介绍

目录

一、UDP基本概念

1、定义:

2、特点:

(1)无连接:

(2)不可靠传输:

(3)面向数据报:

(4)全双工:

二、UDP协议格式

1、UDP报文结构

2、各部分详解: 

(1)源端口号:

(2)目的端口号:

(3)UDP长度:

(4)校检和:

三、UDP使用注意事项

四、基于UDP的应用层协议 

五、总结


一、UDP基本概念

1、定义:

        UDP(User Datagram Protocol,用户数据报协议)是 TCP/IP 协议簇中位于传输层的核心协议之一,是一种无连接、不可靠但高效的传输层协议。

2、特点:
(1)无连接:

        发送方可以直接向目标地址和端口发送数据,减少了通信前的准备时间,这是它 “快” 的重要原因。

(2)不可靠传输:

      UDP不保证数据的可靠送达

没有确认机制:发送方不知道接收方是否收到数据;

没有重传机制:数据丢失后不会自动重新发送;

没有顺序保证:数据包可能因传输路径不同,以乱序到达接收方。

(3)面向数据报:

       “面向数据报” 是 UDP 最核心的传输逻辑之一,UDP以“数据报”为基本传输单位,每个数据报都是独立、完整的,发送方和接收方对数据的处理严格以数据报为边界。 

由于数据报具有独立性,发送与接收“一一对应”,不会合并也不会拆分,数据报大小限制,这就造成了不能够灵活的控制读写数据的次数和数量。

(4)全双工:

        全双工是指 UDP 支持通信双方在同一时间双向发送数据,且发送和接收过程互不干扰。 

举个例子:视频通话中,你的设备向对方发送语音数据(A→B),同时也接收对方的语音数据(B→A),这两个过程并行进行; 

二、UDP协议格式

1、UDP报文结构

UDP 报文结构非常简洁,由首部和数据两部分组成,整体长度固定且短小;

UDP 首部仅包含 8 个字节(64位),分为 4 个字段,每个字段各占 2 字节

 

2、各部分详解: 
(1)源端口号:

       用于标识发送端的端口。在一些不需要回复的场景中,源端口号可以为 0,此时表示不需要对方回送数据。

(2)目的端口号:

       用于标识接收端的端口,是数据准确送达目标应用程序的关键。

(3)UDP长度:

      指的是 UDP 报文的总长度,包括首部(固定8字节)和数据部分,最大65535字节(约64KB

(4)校检和:

       用于对 UDP 报文进行完整性校验。它不仅校验 UDP 首部,还会校验数据部分,如果校验和验证失败,UDP 报文会被丢弃。

HTTPS的数字签名是为了防止黑客篡改;

UDP的校检和是为了防止传输过程中的“比特翻转”,与安全性无关

三、UDP使用注意事项

       虽然 UDP 具有简洁、高效、低延迟等优点,但它也存在一些局限性。在使用 UDP 时,需要充分了解这些特点,以便扬长避短。

1、由于没有连接,UDP 发送方无法知道接收方是否准备好接收数据,也无法确保数据能够到达接收方。

2、UDP 不保证数据的可靠传输,数据在传输过程中可能会因为网络拥堵、链路故障等原因丢失,而且 UDP 也没有重传机制。

3、由于 UDP 报文可能经过不同的路径传输,到达接收方的顺序可能与发送顺序不一致。接收方需要自行处理报文的排序问题。

4、⼀个UDP能传输的数据最⼤⻓度是64K,然而64K在当今的互联⽹环境下是⼀个⾮常⼩的数字,如果我们需要传输的数据超过64K,就需要在应⽤层⼿动的分包,多次发送,并在接收端⼿动拼装。

四、基于UDP的应用层协议 

• NFS:⽹络⽂件系统

• TFTP:简单⽂件传输协议

• DHCP:动态主机配置协议

• BOOTP:启动协议(⽤于⽆盘设备启动)

• DNS:域名解析协议

五、总结

       UDP 以其简洁的报文结构和高效的传输特性,在实时通信等领域发挥着重要作用。它的报文结构简单明了,首部仅 8 字节,数据部分灵活承载应用数据。但同时,UDP 也存在无连接、不可靠、缺乏流量控制和拥塞控制等局限性。

        在实际应用中,我们需要根据具体的业务需求选择合适的协议。如果对实时性要求高,且能够容忍少量丢包和无序到达,UDP 是一个不错的选择,但需要在应用层做好可靠性保障、数据排序、速率控制等工作;如果需要可靠的数据传输,TCP 则更为合适。只有充分理解 UDP 的特性和注意事项,才能更好地利用它构建高效、稳定的网络应用。

 

http://www.lryc.cn/news/592637.html

相关文章:

  • 深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析
  • IDEA 2020.1版本起下载JDK
  • 基于 Docker 及 Kubernetes 部署 vLLM:开启机器学习模型服务的新篇章
  • Docker --privileged 命令详解
  • Jenkins+Docker+Git实现自动化CI/CD
  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • vue2 面试题及详细答案150道(41 - 60)
  • Linux系统安装Docker及部署Node.js 20.15.0(含pnpm、pm2)完整指南
  • 武汉江滩某码头变形及应力自动化监测
  • 由于热爱,我选PGCE专家学习
  • 小红书采集工具:无水印图片一键获取,同步采集笔记与评论
  • 接口测试时如何上传文件(图片、安装包等)
  • MyBatis缓存实战指南:一级与二级缓存的深度解析与性能优化
  • Tomcat及Nginx部署使用
  • 淘宝高级详情接口接入指南与Python代码实战
  • 如何搭建systemverilog/UVM验证环境开发vip(腾讯元宝)
  • C专题5:函数进阶和递归
  • InnoDB 多版本控制 慢sql排查(基于MySQL 5.7)
  • CentOS7 内网服务器yum修改
  • 谈进程间通信
  • NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
  • python爬虫获取PDF
  • 去中心化交易所(DEX)深度解析:解码行业头部项目
  • WEB安全架构
  • WEB弹性设计
  • MyBatis之关联查询
  • leetcode:冗余连接 II[并查集检查环][节点入度]
  • 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
  • vue3+vite 使用scss、sass 全局定义的变量以及使用
  • 【Linux】进程间通信(三)——共享内存和消息队列