网络协议UDP详解

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的、面向数据报的传输协议。它提供了一种简单的数据包交换服务,适用于一些对数据传输时延要求较低、但对数据可靠性要求不高的应用场景,如音频、视频传输等。以下是UDP协议的详细介绍:

一、UDP协议特点:

  1. 无连接性:UDP是无连接的协议,通信双方在传输数据之前不需要建立连接,也不需要维护连接状态。

  2. 不可靠性:UDP不提供数据包的确认和重传机制,也不保证数据包的顺序性,因此数据传输过程中可能会出现丢包、重复或乱序等情况。

  3. 面向数据报:UDP以数据报为基本单位进行通信,每个数据报是一个独立的、完整的消息,具有独立的头部和数据部分。

  4. 轻量级:UDP协议的头部开销较小,相比于TCP协议,UDP的性能开销较低。

  5. 快速:由于不需要建立连接和维护状态,UDP传输速度较快,适用于对实时性要求较高的应用场景。

二、UDP数据报格式:

UDP数据报由固定长度的首部和数据部分组成,其格式如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      源端口(16 bits)          |      目的端口(16 bits)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  UDP长度(16 bits)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                UDP检验和(16 bits)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    数据(可变长度)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  • 源端口(16 bits):标识发送端的端口号。
  • 目的端口(16 bits):标识接收端的端口号。
  • UDP长度(16 bits):表示UDP数据报的长度,包括UDP首部和数据部分。
  • UDP检验和(16 bits):用于检测数据在传输过程中是否发生了错误。
  • 数据:实际需要传输的数据部分。
a)源端口和目的端口:
  • 源端口:发送端用来标识发送数据的端口号。
  • 目的端口:接收端用来识别接收数据的端口号。

源端口和目的端口共同构成了数据报的端口对,使得数据报能够被正确地路由到接收端。

在使用端口时,应避免使用一些预留或者已被广泛使用的端口,以免与系统服务或其他应用产生冲突,影响系统正常运行或网络通信。以下是一些应该避免使用的端口范围和常见端口:

1. 避免使用的端口范围:

  • 0 到 1023:这是系统保留端口范围,通常用于标准服务和应用,例如HTTP(端口80)、FTP(端口21)、SSH(端口22)等。应用开发者应避免在这个范围内随意使用端口。
  • 49152 到 65535:这是动态或私有端口范围,用于临时或私有的通信。尽管这些端口不受系统保留,但在实际应用中,最好也避免使用这个范围内的端口,以免与其他应用产生冲突。

2. 常见的预留端口和广泛使用的端口:

  • 20 和 21:FTP数据传输和控制端口。
  • 22:SSH远程登录协议端口。
  • 25:SMTP邮件传输协议端口。
  • 53:DNS域名解析协议端口。
  • 80:HTTP超文本传输协议端口。
  • 110:POP3邮局协议端口。
  • 143:IMAP4互联网消息访问协议端口。
  • 443:HTTPS安全HTTP协议端口。
  • 3306:MySQL数据库服务器端口。
  • 8080:HTTP代理服务器端口。

3. 其他注意事项:

  • 避免使用已知的常见端口,除非确保与其他应用不冲突。
  • 在分配端口时,尽量选择未被占用的、空闲的端口,并记录好端口的分配情况。
  • 在设计网络应用时,应考虑使用配置文件或参数的方式来指定端口号,以便灵活调整。

总之,在选择端口号时应该谨慎,避免使用已被占用或广泛使用的端口,以确保应用的稳定性和兼容性。

b)UDP长度:

UDP长度字段指定了UDP数据报的总长度,包括UDP首部和数据部分的长度。通常情况下,UDP长度至少是8个字节(包括UDP首部的长度),如果数据部分为空,则UDP长度为8字节。

UDP长度字段指定了UDP数据报的总长度,包括UDP首部和数据部分的长度。这个长度是指整个UDP数据报的长度,而不仅仅是数据部分的长度。UDP数据报的长度是16位字段,因此它可以表示的最大值是65535字节(包括UDP首部的8个字节)。然而,实际上由于IP层的限制,UDP数据报的长度通常会受到网络传输的限制,一般情况下实际可传输的UDP数据报长度会比这个最大值小,通常在几千字节到几万字节之间。

需要注意的是,UDP数据报的长度应该小于或等于底层网络协议(通常是IP协议)的最大传输单元(MTU,Maximum Transmission Unit),以确保数据报能够被网络正常传输。超过MTU的数据报需要进行分片处理,这可能会影响传输效率和性能。因此,在实际使用UDP协议进行数据传输时,需要考虑网络的MTU值以及UDP数据报的长度限制,以避免传输过程中出现问题。

c)UDP检验和:

UDP检验和字段用于验证数据在传输过程中是否发生了错误。发送端计算数据报的检验和并将其添加到UDP首部中,接收端根据接收到的数据报重新计算检验和,并与数据报中的检验和进行比较,以检测数据的完整性。

CRC算法:

CRC是一种广泛使用的循环冗余校验算法,常用于数据传输过程中的错误检测。CRC算法通过对数据进行多项式除法运算来生成校验和值,具有高效性和良好的错误检测能力。

UDP校验和的计算:

  1. 发送端在发送UDP数据报之前,首先计算数据报的校验和值。
  2. 计算方法通常是将UDP首部和数据部分的内容依次按16位进行累加,并将结果取反作为校验和值。
  3. 接收端在接收到UDP数据报后,重新计算数据报的校验和值,并与接收到的校验和值进行比较,如果不一致则表明数据报在传输过程中发生了错误。
MD5算法:

MD5是一种散列函数,它将任意长度的输入数据映射为128位的哈希值,其具有如下特点:

  1. 固定长度输出:MD5生成的哈希值固定为128位,无论输入数据的长度如何,都会产生相同长度的哈希值。这使得MD5适用于需要固定长度的数据表示的场景。

  2. 分散性:MD5具有良好的分散性,即使输入数据的微小变化也会导致输出哈希值的显著变化。这意味着即使输入数据中发生了细微的变化,其生成的哈希值也会有很大的不同,从而保证了数据的唯一性和一致性。

  3. 不可逆性:MD5是一种单向散列函数,无法从哈希值逆向计算出原始输入数据。这使得MD5哈希值可以用于验证数据的完整性,而不会泄露原始数据的信息。

当涉及到数据的完整性验证时,MD5(Message Digest Algorithm 5)可以作为一种附加的手段,尽管它通常不用于数据报的校验和,而是用于数据的完整性验证和身份验证。MD5是一种散列函数,它将任意长度的输入数据映射为128位的哈希值。以下是关于使用MD5进行数据完整性验证的说明:

注意事项:

  1. UDP校验和只能用于检测数据在传输过程中的错误,并不能纠正错误或保证数据的可靠性。
  2. UDP校验和并不是所有实现都使用CRC算法与MD5算法,具体的实现方式可能因厂商或协议版本而异。
  3. 虽然UDP校验和提供了一定程度上的数据完整性验证,但并不能保证数据的绝对完整性,因此在对数据安全性要求较高的场景中,建议使用更为可靠的传输协议,如TCP协议。

三、基于UDP应用层协议

基于UDP的应用层协议是一种利用UDP协议作为传输层协议的高层协议,它们在UDP协议的基础上实现了特定的功能和应用。这些应用层协议通常设计用于满足特定的通信需求,如实时性要求较高的音视频传输、简单的数据传输等。以下是一些常见的基于UDP的应用层协议:

  1. DNS(Domain Name System):DNS是一种用于将域名解析为对应IP地址的分布式数据库系统。UDP被广泛用于DNS协议的实现,因为DNS查询通常是简短且对实时性要求较高的。

  2. SNMP(Simple Network Management Protocol):SNMP是一种用于管理网络设备和应用程序的协议。虽然SNMP可以使用TCP作为传输层协议,但通常也可以选择UDP作为传输层协议。

  3. TFTP(Trivial File Transfer Protocol):TFTP是一种简单的文件传输协议,用于在网络上进行文件传输。TFTP通常使用UDP作为传输层协议,因为它更简单、实时性要求不高。

  4. NTP(Network Time Protocol):NTP用于同步计算机网络上的时间。尽管NTP可以使用TCP作为传输层协议,但UDP通常更常用,因为它更简单且对实时性要求较高。

  5. DHCP(Dynamic Host Configuration Protocol):DHCP用于自动分配IP地址和其他网络配置信息给网络中的设备。DHCP可以使用UDP作为传输层协议来传输DHCP消息。

  6. RTP(Real-time Transport Protocol):RTP是一种用于实时音视频传输的协议,常用于VoIP(Voice over IP)和视频会议等应用中。RTP通常使用UDP作为底层传输协议,因为它对实时性要求较高,而UDP提供了较低的延迟。

这些基于UDP的应用层协议各自有着不同的特点和应用场景,但它们都利用了UDP协议的简单性和实时性优势,以满足特定的通信需求。需要注意的是,由于UDP协议本身不提供可靠的数据传输保证,因此这些协议在设计时需要考虑如何处理丢包、乱序等问题,以保证通信的可靠性。

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

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

相关文章

C# 异步调用aysnc await

一、基本概念 在C#中,async和await关键字用于异步编程。异步编程允许程序在执行I/O密集型操作时不会被阻塞,从而提高程序的性能和响应性。 async关键字用于定义异步方法,表明该方法可能包含await表达式,并且可以在其执行期间异步…

ubuntu20.04 创建ros环境、创建rospackage

roswiki教程:https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros,安装步骤参考:https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws &#xff0…

Linux 多线程开发

第三章 Linux 多线程开发 3.1 线程3.1.2 线程操作3.1.2 线程属性 3.2 线程同步3.2.1 互斥量/锁3.2.2 死锁3.2.3 读写锁 3.3 生产者消费者模型3.3.1 条件变量3.3.2 信号量/灯 网络编程系列文章: 第1章 Linux系统编程入门(上) 第1章 Linux系统…

TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案

一、背景需求 随着我国经济的飞速发展,煤炭作为我国的主要能源之一,其开采和利用的重要性不言而喻。然而,煤矿事故频发,不仅造成了巨大的人员伤亡和财产损失,也对社会产生了深远的负面影响。视频监控系统作为实现煤矿智…

【Rockchip android7.1 平台rtl8821cs wifi移植调试】

Rockchip 平台rtl8821cs wifi移植调试 问题描述解决方法 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip rk3128 OS:Android 7.1.2 Kernel: 3.10 问题描述 客户需要在现在的板子上调一款RTL882…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要:在零售行业的技术进步中,开发商品识别系统扮演着关键角色。本博文详细阐述了如何利用深度学习技术搭建一个高效的商品识别系统,并分享了一套完整的代码实现。系统采用了性能强劲的YOLOv8算法,同时对YOLOv7、YOLOv6、YOLOv5等…

华为OD机试 - 字符串化繁为简(Java 2024 C卷 200分)

目录 专栏导读一、题目描述示例: 二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA&…

2024蓝桥杯每日一题(区间合并)

一、第一题:挤牛奶 解题思路:区间合并 区间合并模板题 【Python程序代码】 n int(input()) a [] for i in range(n):l,r map(int,input().split())a.append([l,r]) def cmp(x):return x[0],x[1] a.sort(keycmp) res1,res20,0 st,ed a[0][0…

windows、Linux下操作命令

1、Regedit 查看策略表 2、Msconfig 查看系统配置 3、Taskmgr 启动任务管理器 4、Eventvwr,msc 打开日志的命令5、Gpedit.msc 打开本地组策略6、Compmgmt.msc 计算机管理 7、Lusrmgr.msc 打开用户与组 8、Taskschd 打开计划任务 9、Net user xxx /add 添加用户 10、Net …

CSS浮动引起的问题和解决方案

问题: 高度塌陷:当所有的子元素浮动的时候,且父元素没有设置高度,这时候父元素就会产生高度塌陷。 解决方案: 1:给父元素单独定义高度 缺点:子元素高超过父级时,会出现溢出 …

如何系统的学习Python——装饰器

装饰器是 Python 中强大而灵活的功能,用于在不修改函数代码的情况下,增强或修改函数的行为。装饰器通常用于在函数执行前或执行后添加一些额外的功能。 下面是装饰器的基本概念和使用方法: 1. 函数的基本结构: 在理解装饰器之前…

visualization_msgs::Marker 的pose设置,map坐标系的3d box显示问题

3D框显示 3D框显示可以使用visualization_msgs::Marker::LINE_LIST或者LINE_STRIP,前者使用方法需要指明线的两个端点,后者自动连接相邻两个点。 姿态问题 网上看了一些,没有涉及到朝向设置,Pose.orientation默认构造为4个0 至…

Python环境下一维时间序列的小波尺度谱和时间平均小波谱(基于Morlet小波)

小波分析是较好的非平稳信号分析方法之一,它通过伸缩和平移运算对信号进行多尺度细化分析,能够在不同的尺度上描述信号的局部特征,为微弱故障特征信号的检测提供了有效的工具。小波尺度谱可看作一个有恒定相对带宽的谱图,能够反映…

模拟电子技术实验(一)

单选题 1.本实验实际操作步骤都有哪些? A. 实验箱上的电压测量、实验箱上的电位器测量、5K、1 0V方波信号测 量。 B. 实验箱上的电压测量、实验箱上的电位器测量、5K、1 0V正弦波信号测 量。 C. 实验箱上的电压测量、实验箱上的数码管测量、5K、1 0V方波信号测 量…

Java剖析 : HashMap底层存储数据的结构 | HashSet添加不重复元素底层原理

HashSet底层剖析 前言: 我们知道Set中所存储的元素是不重复的,那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢? ★ HashSet在添加元素时,是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c…

LeetCode题练习与总结:搜索旋转排序数组

一、题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], n…

OpenAI:ChatGPT API 文档之 Embedding

在自然语言处理和机器学习领域&#xff0c;"embeddings" 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称为嵌入空间&#xff08;embedding space&#xff09;&#xff0c;而生成的向量则称为嵌入向量&#xff08;embedding vector&#xff0…

14---DVI电路设计

视频链接 DVI硬件电路设计01_哔哩哔哩_bilibili DVI电路设计 1、DVI的简介 DVI(Digital Visual Interface)&#xff0c;即数字视频接口。它是1998年9月&#xff0c;在Intel开发者论坛上成立的&#xff0c;由Silicon Image、Intel(英特尔)、Compaq(康柏)、IBM(国际商业机器公…

时序数据库:TDengine整体架构

文章目录 [toc]一、集群与基本逻辑单元1.主要逻辑单元2.节点之间的通讯3.一个典型的消息流程 二、存储模型与数据分区、分片1.存储模型2.数据分片3.数据分区4.负载均衡 三、数据写入与复制流程1.Master Vnode 写入流程2.Slave Vnode 写入流程3.主从选择4.同步复制 四、缓存与持…

关于SpringSecurity出现Failed to evaluate expression ‘ps.hasAuthority(‘role‘)‘

1. 问题描述 在使用SpringSecurity对接口进行权限校验时&#xff0c;报错java.lang.IllegalArgumentException: Failed to evaluate expression ps.hasAuthority(role)。 2. 解决方案 2.1 查看是否添加注解 对于SpringSecurity对配置类&#xff0c;我们需要添加注解EnableGlo…