UDP协议

ops/2024/10/18 9:25:44/

我们已经知道 UDP 具有无连接,不可靠传输,面向数据报,全双工的特点,接下来就来具体看看 UDP 协议报文结构。

 UDP 协议属于内核协议栈,在底层 UDP 的报头是一个 C 语言的位段类型的结构体:

struct udphdr {__be16    source;     // 源端口号__be16    dest;       // 目标端口号__be16    len;        // UDP数据包长度(包括头部)__sum16   check;      // 校验和
};

由上图可知,UDP 报头长度一共为8字节(32个比特位),其中源端口、目的端口、UDP 长度、UDP 校验和分别是2字节(16个比特位)大小。

♩.16位源端口:占用2个字节,用于标识发送方应用程序的端口号。

♩.16位目的端口:占用2个字节,用于标识接收方应用程序的端口号。

♩.16为UDP长度:占用2个字节,表示UDP头部和数据的总长度。

由于只有两个字节大小,这说明 UDP 报文的最大长度不超过 2^16 = 65535 个字节(64KB)大小,即接收的应用层数据载荷大小不能超过64KB大小,若要传输大于64KB大小的数据,通常的做法是将数据分割成多个小于或等于64KB的数据包进行发送或者使用其他传输层协议(如:TCP 协议)。

♩.16位校验和:占用2个字节,用于检测数据在传输过程中是否出现错误。

由于网络通信过程中光、电信号可能会受到电场、磁场、高能射线等的影响,这些干扰可能会使光、电信号出现比特翻转的现象(二进制位0变成1,1变成0)的现象。所以在 UDP 协议中,校验和可以一定程度上确保数据报在传输过程中没有被破坏或篡改。

校验和的具体用法是:当发送方发送一个 UDP 数据包时,它会计算数据包的校验和并将其添加到报头中。接收方收到数据包后,会重新计算校验和并与报头中的校验和进行比较。如果两者匹配,则认为数据包没有损坏;如果不匹配,则认为数据包可能已被破坏或篡改,并丢弃该数据包。

常见的校验和算法有:

♩.CRC(循环冗余校验):CRC 是一种用于检测数据传输或存储时可能出现的错误的技术。它通过将数据块与一个特定的多项式进行模2除法,并将余数附加到数据块的末尾来生成校验码。接收方可以使用相同的多项式重新计算校验码,并将其与接收到的校验码进行比较,以确定数据是否在传输过程中发生了错误。

♩.MD5:MD5 是一种广泛使用的加密哈希函数,它可以将任意长度的数据转换为固定长度(通常为32位)的哈希值。接收方可以再次使用 MD5 重新计算校验码,并将其与接收到的校验码进行比较,以确定数据是否在传输过程中发生了错误。

♩.SHA1:SHA1 也是一种加密哈希函数,它可以将任意长度的数据转换为固定长度(通常为40位)的哈希值,与MD5类似。


http://www.ppmy.cn/ops/112510.html

相关文章

Android 提高第一次开机速度(取消系统默认手机加密)

Android刷机后第一次开机,系统默认是要手机加密的,有些机器加密就几秒钟,有些机器加密要30多秒甚至更长,严重影响了开机速度。 修改路径: device/qcom/xxxx/fstab_AB_variant.qcom 有一些是这个文件: devic…

opencv之图像梯度

图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计…

Android使用LiquidFun物理引擎实现果冻碰撞效果

一、效果展示 Android使用LiquidFun物理引擎实现果冻碰撞效果 二、LiquidFun物理引擎简介 LiquidFun是一个由Google开发并开源的2D物理模拟库,它基于Box2D物理引擎,并扩展了流体模拟的功能。 流体动力学模拟:LiquidFun提供了强大的流体动力学…

Redhat 8/9 缺少 compat-db47

一、简介 通过官网公告,可以查看到已经删除了compat-db47这个软件包,但是运行某些软件,还需要这个软件,所以下面介绍一下编译安装的方法。 二、下载 wget https://download.oracle.com/berkeley-db/db-4.7.25.tar.gz三、解压安…

【机器学习(三)】分类和回归任务-随机森林-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)定义(二)袋外数据 三、随机森林的优缺点(一)优点(二)缺点 四、随机森林分类任务实现对比(一)数据加载1、Python代码2、…

【网络安全】Node.js初探+同步异步进程

未经许可,不得转载。 文章目录 Node.js 基础介绍NPM 包管理安装同步与异步fs 模块示例child_process 模块Node.js 基础介绍 Node.js 是运行在服务器端的 JavaScript 环境。它基于 Chrome 的 V8 引擎,拥有高效的执行性能。Node.js 采用事件驱动的 I/O 模型,使得它在处理高并…

Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 分布式缓存概述 2.0 Redis 持久化 2.1 RDB 持久化 2.1.1 RDB 的 fork 原理 2.2 AOF 持久化 2.3 RDB 与 AOF 之间的区别 3.0 Redis 主从集群 3.1 搭建主从集群 3.2…

数据结构::堆

堆的定义及解释 专业定义&#xff1a; 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0…