用户数据包协议(user datagram protocol)——UDP

简介: 用户数据报协议(User Datagram Protocol,UDP)是无连接不可靠传输层协议。它不提供主机到主机通信,它除了提供进程到进程之间的通信之外,就没有给 IP 服务增加任何东西。

用户数据报协议(User Datagram Protocol,UDP)是无连接不可靠传输层协议。它不提供主机到主机通信,它除了提供进程到进程之间的通信之外,就没有给 IP 服务增加任何东西。此外,它进行非常有限的差错检验。如果 UDP 功能是如此之差,那么为什么进程还要使用它?它有缺点也有优点。UDP 是一个非常简单的协议,开销最小。如果一个进程想发送很短的报文,而且不在意可靠性,就可以使用 UDP。使用 UDP 发送一个很短的报文,在发送方和接收方之间的交互要比使用 TCP 时少得多。

 

用户数据报

UDP 分组称为用户数据报(user datagram),有 8 字节的固定头部,这个头部由 4 个字段组成,每个字段 2 字节(16 位)。

头两个字段定义了源和目的端口号。第三个字段定义了用户数据报的总长,即头部加数据的长度。16 位可以定义的总长度范围是 0 到 65 535。然而,总长度需要更小一些,这是因为 UDP数据报存储在总长度为 65 535 的 IP数据报中。最后一个字段可以携带可选校验和。

 

 

UDP服务

进程到进程的通信
UDP 使用套接字地址提供进程到进程通信,这是 IP 地址和端口号的组合。
 

无连接服务
UDP 提供无连接服务。这就是表示 UDP 发送出去的每一个用户数据报都是一个独立的数据报。不同的用户数据报之间没有关系,即使它们都是来自相同的源进程并发送到相同的目的程序。用户数据报不进行编号。此外,也没有像 TCP 协议那样的连接建立和连接终止,这就表示每一个用户数据报可以沿着不同的路径传递

 无连接的一个结果就是使用 UDP 的进程不能够向 UDP 发送数据流,并期望它将这个数据流分割成许多不同的相关联的用户数据报。相反,每一个请求必须足够小,使其能够装入用户数据报中,只有那些发送短报文的进程才应当使用 UDP。短报文小于 65 507 字节(65 535 减去 UDP 头部的 8字节再减去 IP 头部的 20 字节)
 

流量控制
UDP 是一个非常简单的协议。它没有流量控制(flow control),因而也没有窗口机制。如果到来的报文太多时,接收方可能会溢出。缺乏流量控制意味着如果需要的话,使用 UDP 的进程应该提供这个服务

差错控制
除校验和外,UDP 也没有差错控制(error control)机制,这就表示发送方不知道报文是丢失还是重传。当接收方使用校验和检测出差错时,它就悄悄地将此用户数据报丢弃。缺乏差错控制意味着如果需要的话,使用 UDP 的进程应该提供这个服务。

校验和
UDP 校验和包含三部分:伪头部、UDP 头部和从应用层来的数据。伪头部(psedoheader)是 IP 分组的头部的一部分,其中有些字段要填入 0,用户数据报分装在 IP 分组中(见图 3-40)。

如果校验和不包括伪头部,用户数据报也可能是安全完整地到达。但是,如果 IP 头部受到损坏,那么它可能被提交到错误的主机。
增加协议字段可确保这个分组是属于 UDP,而不是属于其他传输层协议。如果一个进程既可用 UDP 又可用 TCP,则端口号可以是相同的。UDP 的协议字段值是 17
如果在传输过程中这个值改变了,在接收端计算校验和时就可检测出来,UDP 就可丢弃这个分组。这样就不会传递给错误的协议。


可选校验和
UDP 分组的发送方可以选择不计算校验和。这种情况下,在发送前,校验和字段就全填入 0。在发送方决定计算校验和的情况下,如果碰巧结果全是 0,那么在发送前校验和全改为 1。换言之,发送方填充两次校验和。注意,这不会产生混淆,因为校验和的值在正常情况下不会全为 1(见例3.12)。

拥塞控制
由于 UDP 是无连接协议,它不提供拥塞控制。UDP 假设被发送的分组很小且零星,不会在网络中造成拥塞。今天当 UDP 被用做音频和视频的交互实时传输时,这个假设可能对也可
能不对。


封装和解封装
要将报文从一个进程发送到另一个进程时,UDP 协议就要对报文进行封装和解封装。排队我们已经讨论过端口,但是没有讨论端口的实际实现。在 UDP 中,队列是与端口联系在一起的。在客户端,当进程启动时,它从操作系统请求一个端口号。有些实现是创建一个入队列和一个出队列与每一个进程相关联。而有些实现只创建与每一个进程相关的入队列。

多路复用与多路分解
在运行 TCP/IP 协议簇的主机上只有一个 UDP,但可能有多个想使用 UDP 服务的进程。处理这种情况,UDP 采用多路复用和多路分解。

UDP 和通用简单协议比较
我们可以将 UDP 与之前讨论的无连接简单协议进行比较。唯一的区别就是 UDP 提供可选校验和来在接收端发现被破坏分组。如果校验和被加入分组,接收 UDP 可以检测分组,如果分组被破坏可以丢弃它。然而,没有反馈被发向发送方。

      UDP 是我们之前讨论的无连接简单协议的一个例子,区别在于它为差错检测加入了可选校验和

目录
打赏
0
0
0
0
3
分享
相关文章
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
28 1
Jmeter如何对UDP协议进行测试?
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
175 2
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
108 3
|
3月前
|
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
76 4
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
87 1
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
291 3
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
122 5
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
121 1