UDP报文结构

news2025/6/9 23:14:59

UDP协议 

基本特点:无连接、不可靠传输、面向数据报、全双工

UDP协议报文结构 ,以下分别是种画法

对上图进行解释: 

UDP就会把载荷数据(就通过UDP socket ,也就是send方法拿来的数据,基础上再在前面拼接上几个字节的报头)

拼接:相当于字符串拼接 (此处是二进制的,不是文本的)

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

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

一次网络通信涉及到五元组:源IP 、源端口 、目的IP 、目的端口 、协议类型

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

这四个部分:就是UPD报头对应的:源端口 、目的端口、UDP报文长度、校验和

1、端口

常提及到这里的端口都是有范围的 ,因为被分配了2个字节,所以端口范围:0->65535

但是我们自己写程序,绑定的端口,得是从1024起的

0->1023这个范围的端口:称为“知名端口号/具名端口号”,这些端口号是属于已经分配给了一些知名的广泛使用的程序了

那如果我们写代码非要指定一个1023以内的端口号行不行???

答案:不是不行 (以下是需要条件)

(1)先确定你使用的这个端口确实没有程序在绑定

(2)确定你有管理员权限

当然1023以下的端口,不是不能用,但是不是不建议用,这些端口是分配给了特定的程序,但是这个程序具体在你的电脑上是否运行着,电脑上是否安装了这些程序,都是不一定的,所以说即便这些端口真的空着,我们一般也不会去把他们作为我们使用的端口号

2、UDP报文长度

UDP报文长度也是2个字节,所以就是说它的范围也是:0->65535 换算单位 64kb,一个UDP数据报,最大只能传输64kb的数据(说实话真不大,太小了)

如果应用层数据报,超过了64KB 咋办???

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

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

以上虽然是两种方式,但是已经有比较大的区别了,使用UDP多次传输还是TCP传输

类比一下:货物装车 :

UDP:货物太多了,一辆车装不下,那就需要多辆车来,其实这个也挺麻烦的,多辆车都需要等着,看着比较耗费

注:UDP多次send 要写的代码也比较多,多些代码也就预示这代码可能产生bug的机会越多,有的地方如果必须使用UDP的话,那就使用

TCP:货物太多,一辆小车装不下,那直接装一辆货车,一次上货拉走

注:TCP代码就会少些,也不用顾虑这样的问题(此处没有说一定就要用谁,也并非数据量大的时候就一定会选择使用TCP,此处只是指明两者的区别,根据情况而定)

3、校验和

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

网络传输过程中,可能会受到一些干扰,在这些干扰下就可能出现“比特翻转”的情况

比特翻转:   就是 1 变  0 ,或者 0  变  1

网络传输本质上就是光信号或者电信号,这些可能受到一些物理环境的影响

再举出一个实例:网络传输数据 :10101010  在物理环境的影响下变为11110000一旦数据变了,对于数据的含义可能是致命的(代指关键性数据)

这样的现象是客观存在的,不可避免,咱们能做的就是,及时识别出,当前的数据是否出现问题,就引入了校验和来进行鉴别

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

针对以上解析(图解)

注:发送方把要发送的数据计算出校验和(checksum1);接收方,收到数据就把数据按照同样的方式再算一次校验和(checksum2),同时接收方也收到了checksum1(接收方对比checksum1和checksum2是否相同) 

以上已经涉及了正常情况;

特殊情况:假设数据传输过程中出错了,但是计算机得到的校验和与之前的校验和恰好一样??

也就是说 发送方其他的组织数据经过处理后得到的校验和与“今晚有大鱼”这个组织数据得到了一样的校验和

这个情况理论是上存在,实际上应用概率太小可以忽略不计

如果内容相同,得到的校验和结果一定相同,校验和相同,原始内容不一定相同(以上特殊情况),但特殊情况在实际中概率实在太小了,所以一般认为校验和相同,原始内容也相同

校验和如何校验??

细致的校验和一般会和内容相关联

基于数据内容算出来的校验和,内容一旦有变换就能发现

举个例子:还是以刚刚组织数据 “今晚有大鱼” ,校验和相关每个字符,即便组织数据修改一个字“今晚无大鱼” 一字之差就是不同的校验和

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

针对网络传输的数据来说,生成校验和的算法有很多种

(1)CRC :循环冗余校验,简单粗暴,把数据的每个字节,循环往上累加,如果累加溢出了,高位就不要了。

注:其实这里不难看出缺点,校验结果不是特别理想,万一你的数据同时变动了两个bit位(前一个字节少1,后一个字节多1),就会出现内容变了,CRC没变这样的情况

(2)MD5:不在像CRC 简单相加,有一系列的公式,来进行更复杂的数据运算(数学问题)

MD5算法的特点:

<1>定长: 无论原始数据多长,得到的MD5值都是固定长度(4字节版本,也有8字节版本)

<2>冲突概率很小:原始数据哪怕只变动一个地方,算出来的MD5值都会差别很大

<3>不可逆:通过原始数据计算MD5 很容易。通过MD5还原成原始数据(找到哪个数据生成了这个MD5)很难,但是简单常用的可以通过查表的方式解密

MD5有以上3个特点可以应用在多方面校验和,作为计算Hash值的方式,加密

(3)SHA1:同一样是有一系列的数据运算将长度在2^64bit的消息,输入消息(明文),以512bit的分组为单位处理,输出160bit的消息摘要

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

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

相关文章

appium ios真机自动化环境搭建运行(送源码)

appium ios真机自动化环境搭建&运行&#xff08;送源码&#xff09; 目录&#xff1a;导读 &#xff08;1&#xff09;安装JDK&#xff0c;并配置环境变量&#xff0c;方法如下&#xff1a; &#xff08;2&#xff09;安装Xcode、Xcode commandline tools和iOS模拟器 &…

如何判断反馈电路的类型-反馈类型-三极管

如何判断反馈电路的类型 反馈电路类型很多&#xff0c;可根据不同的标准分类&#xff1a; ①根据反馈的极性分&#xff1a;有正反馈和负反馈。 ②根据反馈信号和输出信号的关系分&#xff1a;有电压反馈和电流反馈。 ③根据反馈信号和输入信号的关系分&#xff1a;有串联反…

渗透测试 -- IP、端口信息收集

数据来源 01 IP信息收集 1&#xff09;IP反查域名 同IP网站查询&#xff0c;同服务器网站查询 - 站长工具 专业精准的IP库服务商_IPIP 2&#xff09;域名查询IP IP/IPv6查询&#xff0c;服务器地址查询 - 站长工具 或直接 ping 一下域名就会返回IP 3&#xff09;CDN 如…

补天平台安全问题收录情况分享记录

声明 本文是学习2017年上半年 补天平台漏洞收录分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 补天平台及补天白帽大会介绍 “补天平台”&#xff0c;成立于2013年3月&#xff0c;全称为“补天漏洞响应平台”。平台旨在收集散落在民间的安…

MySQL8.0之前实现row_number以及计算玩家连续登录天数

使用MySQL 5.7版本统计 玩家连续登录天数 原始数据 玩家同一天多次登录只保留一条 select DISTINCT(FROM_UNIXTIME(login_time,%Y-%m-%d)) as login_date,rid from t_log_login order by rid; 借助两个变量统计每个玩家登录日期对应的次数 SELECT * FROM(SELECT DISTINCT …

云镜CVE-2022-25578复现

CVE-2022-25578复现漏洞信息漏洞复现读取flag&#x1f349; shell来源&#xff1a;https://yunjing.ichunqiu.com/cve/detail/960?type1&pay2漏洞信息 漏洞名称taocms v3.0.2允许攻击者通过编辑.htaccess文件执行任意代码漏洞编号CVE-2022-25578危害等级超危漏洞类型任意…

day34|343. 整数拆分、96.不同的二叉搜索树

343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解…

电子技术——共栅(共基)放大器

电子技术——共栅&#xff08;共基&#xff09;放大器 在本节我们学习IC中共栅&#xff08;共基&#xff09;放大器的配置&#xff0c;虽然我们之前在分立电路中学习过共栅&#xff08;共基&#xff09;放大器的配置。但是在IC中共栅&#xff08;共基&#xff09;放大器主要作为…

MES系统助力电子厂行业,打造高能效工厂

ES主要包括生产计划系统、工艺管理系统、质量管理系统、生产过程管理系统、设备管理系统、仓储管理系统及数据采集和统计分析系统等。实现生产过程可视化、可追溯。管理人员可以在管理界面对生产实时控制&#xff0c;从而根据需要精准调整生产&#xff0c;达到提高生产效率、缩…

算法与数据结构理解

目录1、数据结构与算法1.1 定义1.2 常见数据结构1.3 常用算法2、插入排序3、希尔排序4、归并排序1、数据结构与算法 1.1 定义 数据结构&#xff1a;是计算机中存储、组织数据的方式。具有一定逻辑关系&#xff0c;应用某种存储结构&#xff0c;并且封装了相应操作的数据元素集…

HTML浪漫动态表白代码+音乐(附源码)

HTML浪漫表白求爱(附源码)&#xff0c;内含4款浪漫的表白源码&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;求爱场景&#xff0c;下载直接使用。 直接上源码吧 一.红色爱心 1.效果 实际效果是动态的哦 2.源码 复制粘贴即可运行哦 <!DOCTYPE…

JVM 线程本地分配缓存TLAB

什么是TLAB 从内存模型而不是垃圾收集的角度&#xff0c;对 Eden 区域继续进行划分&#xff0c;JVM 为每个线程分配了一个私有缓存区域&#xff0c;它包含在 Eden 空间内 多线程同时分配内存时&#xff0c;使用 TLAB 可以避免一系列的非线程安全问题&#xff0c;同时还能提升…

一文读懂CXL协议

2001年&#xff0c;英特尔公布了第三代I/O技术——3GIO技术&#xff08;后更名为PCI Express&#xff0c;即PCIe&#xff09;&#xff0c;以高性能、高扩展性、高可靠性及出色的兼容性取代了包括AGP和PCI在内所有的内部总线并且不断升格。例如&#xff0c;2019年5月底公布的PCI…

JUC锁与AQS技术【我的Android开发技术】

JUC锁与AQS技术【我的Android开发技术】 AQS原理 AQS就是一个同步器&#xff0c;要做的事情就相当于一个锁&#xff0c;所以就会有两个动作&#xff1a;一个是获取&#xff0c;一个是释放。获取释放的时候该有一个东西来记住他是被用还是没被用&#xff0c;这个东西就是一个状…

六、Linux文件 - lseek函数

目录 1.lseek函数 2.lseek函数实战 2.1宏SEEK_CUR的用法 2.2宏SEEK_END的用法 3.Open函数实战 - O_APPEND的用法 4.Linux在库函数中寻找相应的宏定义 1.lseek函数 off_t lseek(int fd,off_t offset,int whence);光标的偏移量 fd:文件描述符offset:偏移量whence: SEEK_…

macOS中虚拟机桥接模式分配静态ip

1.首先使用dhclient命令&#xff0c;在局域网中分配一个C类地址。 2.获得地址后&#xff0c;输入ifconfig&#xff0c;查看分配的地址。 3.然后编辑vi /etc/sysconfig/network-scripts/ifcfg-en***文件 在该配置文件中编辑&#xff0c;设置ONBOOTyes&#xff0c;而后添加静态配…

分享5款安全无毒,下载简单的小软件

今天推荐一些安全无毒&#xff0c;下载简单&#xff0c;最重要的是没有广告的软件&#xff01; 1.文件备份传输——MultiPar MultiPar是一款奇偶校验文件工具&#xff08;Parchive tool&#xff09;&#xff0c;用来为文件、文件夹创建校验块&#xff0c;当文件损坏时&#xf…

客户端SDK测试是什么?如何测?(附真实项目经历)

客户端SDK测试是什么&#xff1f;如何测&#xff1f; 目录&#xff1a;导读 SDK是什么 测什么&#xff1f; 功能怎么测 接下来为大家讲述一番我的真实案例 1、做了些什么 2、做的方法 3、做得好的&#xff1a; 4、做得不好的&#xff1a; 5、个人成长&#xff1a; 6、…

产品设计方法论之基础

1、信息控件 输入框限制 输入文本的内容限制。常见的内容限制主要纯字母 (如英文有纯数字 (如手机号码)、名)、纯汉字(如中文名) &#xff0c;以及各种类型的排列组合或违禁内容的输入限制。如果用户输入限制的内容&#xff0c;我们可以按无法输入的逻辑处理&#xff0c;也可以…

LeetCode题解 动态规划(三):343 整数拆分;96 不同的二叉搜索树

343 整数拆分 medium 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 这道题乍一看没有点儿动态规划的影子&#xff0c;反而感觉用数学法可以求解。 但是…