首页 > 其他分享 >详解UDP协议

详解UDP协议

时间:2024-11-06 09:45:45浏览次数:3  
标签:协议 UDP 字节 校验 TCP 详解 数据 端口号

UDP是一种无连接的、简单的传输层协议,UDP协议的设计目的是提供一种简单、轻量级的通信机制,适用于那些对实时性和传输效率有较高要求,但对数据完整性和可靠性要求相对较低的应用。

UDP协议报头

f402b5f8410340a6b62ccc22207c7099.png

UDP协议的报头部分由四部分组成:源端口号,目的端口号,UDP长度,校验和。

  • 源端口号:识别发送方的端口号。
  • 目的端口号:识别接收方的端口号。
  • 长度:指定UDP数据报的长度,包括UDP头部和UDP数据的总长度。
  • 校验和:检测头部、数据以及可能的填充字节在传输过程中的错误。

在这里可能会有读者有疑问为什么只有源端口号与目的端口号,没有源IP地址与目的IP地址(IP地址负责在网络中标识唯一主机,而端口号负责在主机上标识进程),UDP协议是传输层协议,UDP协议运行在IP协议上,IP协议负责在不同网络设备之间传输数据包。所以IP地址是在网络层即IP协议所在层添加的。

校验和

校验和用来检测数据在传输过程中是否发生错误。

校验和的计算

UDP/TCP协议会准备一个伪头部,它并不实际包含在数据包中,而是为了计算校验和而构造的一组虚拟的头部信息。伪头部的结构如下:

  • 源IP地址:发送方的IP地址,4字节。
  • 目的IP地址:接收方的IP地址,4字节。
  • 保留字段:通常设置为0,8字节(64位)。
  • 协议:指出上层协议的类型,1字节。对于UDP,这个值是17。对于TCP,这个值是6。
  • UDP或TCP长度:UDP或TCP数据包的长度,包括UDP或TCP头部和数据,2字节。

c4c6ed0976254b1bb8cf2b3b720f55ca.png之后会将伪头部、UDP/TCP头部(校验和字段被设置为0)和数据载荷连续拼接成一个数据块。 

8e5a0de203d74d628c40a2f1f26f0416.png

整个数据块的长度需要是16位(2字节)的整数倍。如果不是,需要后面添加零,直到满足条件

接下来就是校验和的计算:

  • 将数据块分成16位的分组。
  • 对每个16位分组进行二进制加法。
  • 如果加法结果超过16位,将进位加到下一个分组的最低位。
  • 对所有分组进行此操作。

计算出最终结果后会对结果进行按位取反,然后填充到报头校验和字段。 

校验和的检查

接收方获取了数据报后,会重新按照上面的方法计算校验和。如果两者相等,则证明数据完整,否则,说明数据在传输过程中损坏,会将报文直接丢弃。

注意UDP的校验和是可选的,如果发送方没有计算校验和,字段会被设置为0。接收方在处理UDP数据包时,如果发现校验和字段为0,会忽略校验和的检查。

面向数据报

UDP是一种面向数据报的协议,它按照独立的数据块(即数据报)发送和接收信息。

简而言之,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并。用UDP传输100个字节的数据:

如果发送端调用一次sendto,发送100个字节, 那么接收端也必须调用对应的一次recvfrom,接收100个字节。 而不能循环调用10次recvfrom, 每次接收10个字节。

基于面向数据报的特点使UDP有以下特性:

  • UDP不建立持久的连接。发送方和接收方之间的通信不需要预先建立连接,每个数据报的发送和接收都是独立于其他数据报的。
  • UDP协议也不保证数据报的顺序。如果多个数据报同时发送,它们可能因为网络条件的差异而以不同的顺序到达目的地。
  • UDP不保证数据报的传输。数据报可能会在传输过程中丢失、重复或损坏,UDP协议本身不提供重传机制。

UDP的面向数据报的特性使其非常适合那些需要快速、简单传输的场景,如网络直播,实时游戏等。

缓冲区

发送缓冲区

UDP实际上没有真正意义上的发送缓冲区,在发送数据时会直接交付内核完成发送,这是因为UDP的特性,不需要保证可靠性,因此不需要重传,也就不需要使用发送缓冲区暂存数据。

在我们介绍TCP协议时会详细介绍TCP的发送缓冲区,以及其如何保证可靠性。

接收缓冲区

每个UDP套接字都存在一个接收缓冲区,在接收到UDP报文后会暂存在接收缓冲区,等待上层读取。在缓冲区满的情况下,接收到的报文会被直接丢弃。

UDP优缺点

优点:

  • 简单性:UDP的协议栈比TCP简单,因为它不需要建立连接、维护状态或重传丢失的数据包。

  • 低延迟:由于UDP不需要建立连接和确认数据包,它可以提供较低的延迟。

  • 资源消耗少:UDP不需要维护连接状态,因此它消耗的资源比TCP少。

  • 无需拥塞控制:UDP不进行拥塞控制,不会因为网络拥塞而降低发送速率。

  • 适用性:UDP适用于那些对数据传输速度要求高但可以容忍一定数据丢失的应用,如流媒体和实时通信。

缺点:

  • 不可靠性:UDP不保证数据包的送达,可能会发生数据丢失、重复或乱序到达。

  • 缺乏流量控制:UDP不提供流量控制机制,会导致接收方因为数据包到达速度过快而无法处理。

  • 无拥塞控制:由于UDP不进行拥塞控制,它可能会在网络拥塞时加剧网络拥塞。

  • 不适合大文件传输:对于需要可靠传输的大文件,UDP不是最佳选择,因为其不保证数据的完整性和顺序。

  • 需要应用层处理:由于UDP提供的是无连接服务,所有与连接相关的处理(如重传、排序)都需要在应用层实现。

 

 

 

 

 

 

标签:协议,UDP,字节,校验,TCP,详解,数据,端口号
From: https://blog.csdn.net/2301_80926085/article/details/142207803

相关文章

  • Chromium127编译指南 Mac篇(一)- 环境准备详解
    概述在开源浏览器生态系统中,Chromium始终扮演着举足轻重的角色。作为GoogleChrome的技术基石,它不仅支撑着全球最受欢迎的浏览器之一,更为众多定制化浏览器项目提供了坚实的基础。对于渴望探索浏览器技术深度,或计划开发自有浏览器的工程师而言,深入理解Chromium的编译流程是一项......
  • Nginx 常用参数详解和举例说明实操指南
    Nginx常用参数详解和举例说明实操指南一、引言1.参数详解的目的和意义Nginx的配置参数是优化性能和提升安全性的关键。通过合理配置这些参数,可以显著提高Nginx的性能,减少资源消耗,增强系统的稳定性和安全性。2.适用人群和场景运维工程师:负责Nginx的日常管理和维护,需......
  • 拷贝构造(详解)
    一、拷贝构造函数拷贝构造函数,就像他的名字一样,使来拷贝的,他的作用是把一个已经存在的对象进行拷贝后,用拷贝来的值进行给其他对象赋值和作为返回值和参数等。一、拷贝构造函数调用时机拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化......
  • javaWeb详解
    JavaWeb开发是指使用Java编程语言来构建Web应用程序的过程。它涉及到多个技术和框架,旨在帮助开发者创建动态的、交互式的网站。下面是一些JavaWeb开发中常用的技术和概念:1.JavaServletsServlet是运行在Web服务器或应用服务器上的Java程序,用于扩展服务器的功能。它们可以......
  • Docker安装MongoDB详解(mongo.latest)
    一、MongoDB介绍MongoDB是一种基于分布式文件存储的数据库,使用C++语言开发,旨在为Web应用提供可扩展且高性能的数据存储解决方案。作为一种介于关系数据库和非关系数据库之间的技术,MongoDB具有强大的功能和高效的性能,特别适用于处理海量的非结构化数据。MongoDB的核心概念与特......
  • Java内存区域详解(重点)
    运行时数据区域Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK1.8和之前的版本略有不同,我们这里以JDK1.7和JDK1.8这两个版本为例介绍。JDK1.7:JDK1.8: 线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区......
  • LDAP--Jenkins详解笔记
    一、Ldap的结构1.组织角色所有用户都可以登录,但是只有创建时的admin组角色有增删改的权限,相当于是根目录,千万不能删,删了就全没了注意,admin用户是首个超级登录用户(相当于根),需要用配置文件生成,详见:https://www.cnblogs.com/wangyuanguang/p/18189832##注意修改wyg部分为自己自......
  • Java入门十二——static详解(含toString)
    上节课,我们只是微微提到了static,今天我们来具体讲讲static的用法static1.类名.静态成员变量(上篇博客Java入门十一有讲)为了方便大家查看,我把链接放在这里Java入门11——关键字总结+static-CSDN博客2.类名.静态成员方法这里,我们首先创建两个类,分别是java12和demo1,然后调用d......