我的编程空间,编程开发者的网络收藏夹
学习永远不晚

UDP报文详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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本质上是不可逆的,但是通过打表的方式,能解密一部分.

解密失败:

 解密成功

来源地址:https://blog.csdn.net/qq_54469537/article/details/129118388

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

UDP报文详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-09-20

python3-UDP详解

用户数据报协议(user Datagram protocol)这个通信协议发送不管对方是否接收到,可以用通过对方接到回复一个标识来记录是否成功通信适用于广播的应用程序(象发邮件模式)python UDP (发送接收端)"""udp服务器""
2023-01-31

基于python中的TCP及UDP(详解)

python中是通过套接字即socket来实现UDP及TCP通信的。有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字。 TCP通信模型创建TCP服务器 伪代码:ss = socket() # 创建服务器套接字 ss.bin
2022-06-04

C#实现TCP和UDP通信的示例详解

这篇文章主要为大家详细介绍了C#实现TCP和UDP通信的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2023-03-01

Python实现UDP与TCP通信的示例详解

UDP是一种无连接的、不可靠的传输协议;TCP是一种可靠的、面向连接的传输协议。这篇文章主要介绍了Python实现UDP与TCP通信的方法,需要的可以参考一下
2023-03-23

Nodejs使用dgram模块创建UDP服务详解

这篇文章主要为大家介绍了Nodejs使用dgram模块创建UDP服务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

阿里云服务器UDP限制时间详解

在使用阿里云服务器时,可能会遇到UDP限制时间的问题。本文将详细介绍如何理解这个问题,以及如何解决。UDP(UserDatagramProtocol)是一种简单、无连接的传输层协议。与TCP(TransmissionControlProtocol)相比,UDP不提供数据的确认和重传,因此具有更低的延迟和更高的效率
阿里云服务器UDP限制时间详解
2023-11-20

go语言import报错处理图文详解

今天本来想尝试一下go语言中公有和私有的方法,结果import其他包的时候直接报错了,下面这篇文章主要给大家介绍了关于go语言import报错处理的相关资料,需要的朋友可以参考下
2023-05-18

java 中模拟UDP传输的发送端和接收端实例详解

java 中模拟UDP传输的发送端和接收端实例详解一、创建UDP传输的发送端1、建立UDP的Socket服务; 2、将要发送的数据封装到数据包中; 3、通过UDP的Socket服务将数据包发送出去; 4、关闭Socket服务。import
2023-05-31

SQL注入报错注入函数图文详解

目录前言常用报错函数用法详解updateXML()函数实例extractvalue()函数floor()函数exp()函数12种报错注入函数总结前言报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序
2022-07-08

软考报名必须在职吗?一文详解

参加软考的合格者将颁发由中华人民共和国人力资源和社会保障部、工业和信息化部用印的计算机技术与软件专业技术资格(水平)证书,在全国范围内有效,可见软考有一定含金量,也正因如此,每年报考人数都有不少。那么,软考报名必须在职吗?下面小编来进行解答。
软考报名必须在职吗?一文详解
2024-08-29

AndroidManifest文件详解

AndroidManifest 官方解释是应用清单(Manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须为AndroidManifest。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显
2023-08-18

编程热搜

目录