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

UDP报文详解

目录

🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自己。

🐼一、UDP协议特点

🐼二、UDP协议段格式详解


🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自己。

🐼一、UDP协议特点

UDP:User Datagram Protocol   用户数据报协议

在之前已经介绍过了UDP协议的特点,在这里再次回顾一下:

无连接 不可靠 面向数据报 全双工

无连接:UDP类似于发短信,不需要建立连接,直接就可以发送

不可靠:发送方发送的数据丢了就丢了,不会返回任何错误信息.

面向数据报:数据传输是以一个个"数据报"为基本单位(一个数据报可能有若干个字节,带有一定的格式)

全双工:一个通信通道,可以双向传输.(既可以发送,也可以接收)

通过简单了解UDP协议的特点,接下来重点理解UDP协议端格式.

🐼二、UDP协议段格式详解

首先来看一下书上的UDP协议报文结构

 但是,实际上的UDP协议报文结构并不是这样的,上述可能只是为了方面排版,实际的如下图:

UDP就会在载荷数据(通过UDP socket  send方法拿来的数据)基础之上,再在前面拼接几个字节的报头(相当于字符串拼接)

UDP报头包含了一些特定的属性,携带了一些重要的信息

不同的协议,功能不同,报头中带有的属性信息不同.

对于UDP来说,报头一共是8个字节,分成4个部分(每个部分2个字节)

 源端口:发送方的端口

目的端口:接收方的端口

 UDP报文长度:2个字节

2个字节能够表示的范围是;0->65535,换算一下单位:64KB.

这说明:一个UDP数据报,最大只能传输64KB的数据,此时,就有一个问题值得思考:

如果应用层数据报超过了64KB呢?如何传输数据?

针对这个问题,有两个解决方案:

1).在应用层通过代码的方式针对应用层数据报进行手动的分包,拆成多个包通过UDP数据报进行传输(本来需要send一次,现在需要send多次)

但是,使用这个方案就得写很多代码,可能需要进行很多次测试,还要处理很多bug,这就导致工作量加重了,显然不是一个很好的办法.

2).不用UDP,换成TCP(TCP没有这样的限制)

检验和:作用是验证数据的传输是否是正确的

网络传输,本质上就是电信号/光信号,这些都可能收到一些物理环境的影响,比如:电场 磁场 高能射线等,例如我们发送的数据是:1111 0000 被影响为 1111 0001 ,数据变了,对于数据的含义也就发生了改变,最典型的例子就是:程序中经常使用1表示某个功能开启 0表示功能关闭,本来网络数据报是想开启功能,结果因为翻转,导致变成了关闭的.

上述这种情况,是客观存在的,无法避免,能做到的就是及时识别出,当前发送的数据是否出现了问题,因此就引入了校验和进行鉴别.

检验和鉴别数据的原理:针对数据内容进行一系列的数学运算,得到一个比较短的结果(2个字节)  如果数据内容不变,得到的校验和的结果就是一定的,如果数据变了,得到的校验和也就变了.

 经过上述解释,还有一个问题:如果传输的数据出错了,但是计算得到的校验和和接收到的校验和恰好一样?

比如:发射火箭和原地解散的校验和计算出来都是Oxaabb,这对于接收方而言,得到的数据是正确的,但是实际上接收到的数据是错误的.理论上这种情况是存在的,但是实际上这种情况发生的概率极低,基本可以忽略不计.

校验和一般会与内容挂钩,基于数据内容计算出来的校验和,只要内容一遍,就能发现.

实际网络传输过程中,往往是把数据内容的所有字节都参与生成校验和的运算,这样任何一个字节出现问题都能及时发现.

针对网络传输的数据来说,生成校验和的算法有很多种,其中比较知名的几个:

 1.CRC (循环冗余校验)

这个算法简单粗暴:把数据的每个字节循环往上累加,如果累加溢出了,高位就不要了.

虽然好算,但是校验效果不是特别理想.

如果传输的数据变动了两个bit位(前一个字节少1,后一个字节多1),就会出现内容变了,CRC没变.

2.MD5

MD5不是简单相加,而是有一系列的公式,来进行更复杂的数学运算.

MD5算法的特点:

1).定长

无论原始数据多长,得到的MD5的值都是固定长度(4字节版本 / 8字节版本)

2).冲突概率很小.

原始数据哪怕改动一个地方,得到的MD5值差别都是很大的.(让MD5结果更分散了)

3).不可逆

通过原始数据计算MD5很容易,但是通过MD5还原成原始数据(找到哪个原始数据生成了这个MD5)很难,理论上是不可能实现的(计算量极大).

MD5这样的作用,就使得MD5用途就更多了:

1).校验和

2).作为计算hash值的方式

3).加密

可以在浏览器中搜索MD5在线加密 试试这个功能

MD5解密本质上是打表:将一些常见的字符串的MD5值保存起来,然后进行查表.

MD5本质上是不可逆的,但是通过打表的方式,能解密一部分.

解密失败:

 解密成功

相关文章:

UDP报文详解

目录 🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自己。 🐼一、UDP协议特点 🐼二、UDP协议段格式详解 🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自…...

C#开发的OpenRA的NextPowerOf2

C#开发的OpenRA的NextPowerOf2 在游戏里,经常需要对计算资源进行优化。 比如屏幕的大小,以及缓冲区的大小,还有纹理的大小。 由于计算机都是基于二进制的原理,那么它的最快计算速度,就是让计算的数字都是2的n次方。 基于此策略,在程序里就需要计算出来最接近2的n次方的数…...

CDH 6.3.2启用HDFS高可用

启用原因 CDH 6.3.2平台即将用于生产,生产平台几乎需要高可用平台,故需要升级CDH中的HDFS为HA。 启用准备 CDH已经成功安装并正常使用CMS的管理员账号正常登陆 HDFS启用HA 登陆CMS系统->选择HDFS服务->点击进入到HDFS服务详情页面&#xff0c…...

多服务器节点访问解决一人一单问题+redis设置锁方案

项目地址及项目具体介绍-码云仓库:https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis 测试1: 这里使用jmeter同时启动2各线程: 原来的数据库表的数据: goods的数据是: id …...

tensorflow 学习笔记(三):神经网络八股

本节内容: 前两节使用 Tensorflow2 的原生代码大叫神经网络。本节使用 keras 搭建神经网络(八股:六步法,有 Sequential 和 class 两种)。 文章目录一、搭建网络八股 sequential1.1、keras 介绍1.2、六步法搭建 keras …...

华为OD机试真题Python实现【射击比赛】真题+解题思路+代码(20222023)

射击比赛 题目 给定一个射击比赛成绩单 包含多个选手若干次射击的成绩分数 请对每个选手按其最高三个分数之和进行降序排名 输出降序排名后的选手 ID 序列 条件如下: 一个选手可以有多个射击成绩的分数 且次序不固定如果一个选手成绩小于三个 则认为选手的所有成绩无效 排名忽…...

【YBT2023寒假Day12 C】树的计数 II(prufer)(结论)(数学)

树的计数 II 题目链接:YBT2023寒假Day12 C 题目大意 给你一个长度为 n 的排列 p,问你有多少个不同的有标号无根树,满足如果 i,j 有边那 pi,pj 也有边。 思路 首先可以把排列变成置换环。 注意到是树,发现一个置换中似乎不太可…...

深入浅出C++ ——多态

文章目录一、多态的概念二、多态的定义及实现1. 多态的构成条件2. 虚函数3. 虚函数的重写4. virtual的使用:5. 虚函数重写的两个例外:6. C11 override 和 final7. 重载、重写、重定义的对比三、抽象类四、多态的原理1. 虚函数表2. 多态的原理3. 静态绑定…...

华为OD机试真题Python实现【整数编码】真题+解题思路+代码(20222023)

整数编码 题目 实现一个整数编码方法 使得待编码的数字越小 编码后所占用的字节数越小 编码规则如下 编码时7位一组,每个字节的低 7 位用于存储待编码数字的补码字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字节采用小端序编码…...

FPGA纯Vhdl实现MIPI CSI2RX视频解码输出,OV13850采集,提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、纯Vhdl方案解码MIPI4、vivado工程介绍5、上板调试验证6、福利:工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰…...

7 个 JavaScript Web API 来构建你不知道的未来网站

随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。但据了解,在100 多个 API中,只有5%被开发人员积极使用。让我们来看看一些有用的Web API,它们可以帮助您将网站推向月球!🌕🚀1.…...

跟ChatGPT,聊聊ChatGPT

不仅“上知天文、下知地理”,似乎还能对答如流、出口成诗,甚至还能写剧本、编音乐、写代码——最近,一款名叫ChatGPT的人工智能聊天机器人火爆全球。由此,一系列关于新一代技术变革、人工智能替代人力、巨头企业扎堆入局AI的讨论在…...

Java 数组(详细教学 基础篇)

一、数组的基本要素 标识符:数组的名称数组元素:数组中存放的数据元素下标:对数组元素进行编号,数组下标从0开始来访问元素类型:数组元素的数据类型 二、数组的五种赋值方法和使用方法 声明数组 int[] arr;//开辟三个…...

python装饰器原理 | 常用装饰器使用(@cache, @lru_cache)

🚀 关于python的装饰器原理介绍可看这里,讲的挺简洁易懂:python装饰器原理 ⭐ 弄懂装饰器原理后,来学学常用装饰器。 文章目录1、cache, lru_cache1、cache, lru_cache 也就是一种装饰在被执行的函数上,将其执行的结果…...

[oeasy]python0090_极客起源_wozniac_苹果公司_Jobs_Wozniac

极客起源 回忆上次内容 上次回顾了 DEC公司的兴起 从IBM的大型机 到DEC的小型机Mini Computer 再到DEC的终端 VT-100 计算机基础元器件发生了进化 从ENIAC的 电子管到PDP系列的 晶体管 新的器件 体积小了价格低了稳定性 提高了而且 连成了网络 ARPA网 就是 最初的Internet …...

Spring基础总结(下)

简介 本章节通过手写一个简单的 Spring 框架来加深对 Spring 框架源码以及设计思想的理解; 实现步骤 BeanScope 枚举代码 public enum BeanScope { sigleton, prototype; }AppConfig 配置类 // 定义包扫描路径 ComponentScan("com.dufu.spring"…...

设计模式面试题

设计模式分为 创建型 工厂模式 单例 原型行为性 责任链 迭代器 命令中介型结构性 适配器 代理 门面 装饰器 组合 桥接单例设计模式 懒汉式 用到时再创建,省内存 饿汉式 类创建时就创建,会占用内存 内部类 用到时再创建,省内存 线程池、数据…...

需要知道的一些API接口的基础知识

API是应用程序编程接口(Application Programming Interface)的缩写,能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议,来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…...

互融云数字资产管理平台综合解决方案

自十八大以来,发展数字经济逐步成为了国家战略。从2015年国务院印发《促进大数据发展行动纲要》,到2020年4月中央发布《关于构建更加完善的要素市场化配置体制机制的意见》,再到2022年底出台《中共中央、国务院关于构建数据基础制度更好发挥数…...

记住这12个要点,你也能打造出让HR和技术主管前一亮的前端简历

第一篇章:吸引HR 如果你想在众多简历中脱颖而出,需要注意以下几点: 1、突出你的亮点: 给你的简历一个吸引人的文件命名和头部,突出你的关键技能和经验。 2、采用简洁的语言: 用简单易懂的语言来描述你的…...

AQS学习:ReentrantLock源码解析

前言 多线程知识中理解了ReentrantLock之后,对于整个AQS也会有大概的理解,后面再去看其它锁的源码就会比较容易。下面带大家一块来学习ReentrantLock源码。 概述 ReentrantLock是可重入的互斥锁,虽然具有与synchronized相同功能&#xff0…...

RocketMQ源码分析消息消费机制—-消费端消息负载均衡机制与重新分布

1、消息消费需要解决的问题 首先再次重复啰嗦一下 RocketMQ 消息消费的一些基本元素的关系 主题 —》 消息队列(MessageQueue) 1 对多。 主题 —》 消息生产者,一般主题会由多个生产者组成,生产者组。 主题 —》 消息消费者,一般一个主题…...

华为OD机试真题Python实现【数据分类】真题+解题思路+代码(20222023)

数据分类 题目 对一个数据a进行分类, 分类方法是,此数据a(4 个字节大小)的 4 个字节相加对一个给定值b取模, 如果得到的结果小于一个给定的值c则数据a为有效类型,其类型为取模的值。 如果得到的结果大于或者等于c则数据a为无效类型。 比如一个数据a = 0x01010101,b = 3…...

vue项目中引入字体包

问题: 项目开发过程中,因UI的显示要求,需要引入一些字体,那如何引入外部字体呢?很简单,只需要以下3步 一 下载对应的字体包文件,放置到我们的项目中 ​ 比如我需要PingFangSC的系列字体&#…...

Linux 文件相关操作

文件相关操作 编辑文件 命令: vi 文件名 然后输入i进入编辑模式 编辑完成后输入esc退出编辑 输入:wq保存即便目录下没有这个文件,也可以想使用vi 文件名进行编辑,保存退出后会创建这个文件 查看文件内容 命令: cat 文件名复…...

【计算机网络】应用题方法总结

0.前言本篇博客主要记录自己在学习到的部分解决计算机网络应用题方法,主要参考视频如下:计算机网络期末复习 应用题_哔哩哔哩_bilibili【计算机网络】子网划分题型总结_哔哩哔哩_bilibili循环冗余码step 1:确定冗余码长度。多项式最高位即为冗…...

Linux 浅谈之性能分析工具 perf

Linux 浅谈之性能分析工具 perf HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 Linux 浅谈系列,收录在操作系统专栏中 😜😜😜 本系列将记录一些阿呆个人整理的 OS 相关知识…...

代码随想录-Day7:四数相加、三数之和

454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a; 输入&#xff1…...

jsp在线考试系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 在线考试系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用j…...

【总结】2023数学建模美赛!收官!

今年的美赛时间是2.17-2.21&#xff0c;这学期疫情放开了之后管的没那么严了&#xff0c;我们小组就都提前一天到学校了&#xff0c;全力准备17号的比赛。 时间流程 刚拿到6个题的时候&#xff0c;我们三个人一人看两个题&#xff0c;每个人从两个题中再选出来一个自己觉得有…...