【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

news2024/11/16 5:39:53

目录

UDP协议

UDP协议的报文结构及注意事项

UDP报文结构中的校验和字段

1. 校验和主要校验的内容

2. UDP校验和的实现方式

3. CRC(循环冗余校验)算法

4. MD5(Message Digest Algorithm 5)


UDP协议

上一篇文章提过UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠传输、面向数据报、全双工的传输层协议,用于在网络上发送数据。

UDP的各个特点已经介绍过了,接下来,基于UDP协议的报文结构,了解该协议的各个特性。

UDP协议的报文结构及注意事项

UDP 报文结构指的就是 UDP 数据报的结构。

UDP数据报 =  报头(重点) + 载荷(实际要传输的数据部分),如下图:

由于UDP的一个数据报的最大长度就是64KB,而64KB在当今的互联网环境下,是一个非常小的数字。

注意事项  如果我们需要传输的 UDP数据报 超过64KB,有以下解决方案:

  1. 将数据分割成多个 UDP数据报 进行发送传输,并在接收端进行重新组装。这种方式称为数据分段(Data Segmentation)或数据分片(Data Fragmentation)。
  2. 考虑使用其他的传输层协议,如 TCP 协议。如果需要传输大量数据或者超过 UDP 最大报文长度的数据,TCP 是更好的选择,这里暂时不详细展开。

UDP报文结构中的校验和字段

校验和,顾名思义,用于验证数据在传输过程中是否传输正确(是否发生了错误或损坏)

或者说,用于数据完整性检查,以确保数据在传输过程中没有被篡改或损坏。

1. 校验和主要校验的内容

  1. 数据内容: 校验和对数据报中的每个比特位进行求和计算,以确保数据内容在传输过程中没有被篡改或损坏。

  2. 传输过程中的错误: 校验和可以检测到数据在传输过程中是否发生了错误,例如比特翻转或数据丢失。

  3. 数据包的完整性: 通过与发送端发送的校验和进行比较,接收端可以验证数据包在传输过程中是否保持完整,即数据在发送端和接收端之间没有发生改变。

如果发现数据损坏或者被篡改,就丢弃这个数据。

2. UDP校验和的实现方式

UDP校验和使用的是一种简单的错误检测机制,它的实现方式如下:

  1. 计算校验和: 发送端在发送UDP数据包之前,会对UDP数据报文的内容进行校验和的计算。计算过程通常包括以下步骤:

    • 将UDP数据报文划分为以16比特为单位的字(对于字节不足16比特的部分,可以补零)。
    • 将这些16比特字相加,得到一个32比特的中间结果。
    • 如果中间结果的高16比特不为0,则将其与低16比特相加,直到高16比特为0为止。
    • 最终的校验和就是将最后的结果按位取反得到的值。
  2. 校验和字段: 发送端将计算得到的校验和值放置在UDP数据报的校验和字段中。

  3. 接收端验证: 接收端在接收到UDP数据包后,会进行校验和的验证。验证的步骤与计算过程类似:

    • 接收端同样将UDP数据报文划分为16比特的字,并对其进行求和计算。
    • 接收端将计算得到的校验和与UDP数据包中的校验和字段进行比较。
    • 如果两者相等,则认为数据包未损坏;如果不相等,则认为数据包可能已经损坏。

这里使用一个生活场景帮助理解上述实现过程:

当你寄送一封信件给朋友时,你可能会希望确保信件在邮递过程中没有损坏或篡改。你可以在信封上添加一个简单的校验和来实现这一点。

  1. 想象你写了一封信给朋友,然后把它放进信封里。在你封上信封之前,你可以将信中每个字母的ASCII码值相加,然后取结果的模256(即求和结果除以256的余数),并将这个余数写在信封的背面。这个余数就是你的“校验和”。
  2. 当你的朋友收到这封信时,他可以打开信封并读取信的内容。然后,他也可以将信中每个字母的ASCII码值相加,然后取结果的模256。如果这个计算得到的余数与信封背面的校验和相同,那么他可以合理地假设信件在邮递过程中没有被篡改或损坏。
  3. 这个例子简化了UDP校验和的概念,帮助理解UDP校验和的基本原理:在发送数据之前计算一个简单的校验值,并在接收数据时验证这个校验值,以确保数据的完整性和准确性。

需要注意的是,UDP校验和并不提供数据的可靠性传输,它只能检测到一部分错误,并不能保证数据的完整性或可靠性。

  • 就拿寄信的例子来解释,假设接收端接收到的信中的内容出现变化,如其中一个a->b,另一个b->a,但此时每个字母的ASCII码值相加再取模,得到的校验和仍然是相同的。
  • 同理,UDP校验和仅仅对UDP数据报中的数据进行简单的加法和取反操作来计算校验和值。因此,接收内容不同但计算出的校验和值是相同的情况仍然是会出现的。

综上,UDP校验和虽然可以帮助检测部分错误,但它并不足以确保数据的完整性和可靠性。因此,在需要可靠传输的场景下,通常会选择使用TCP等其他协议。

除此之外,要想提高UDP的数据的完整性检查,还可以让UDP结合一些其他错误检测和纠正的机制进行校验,如CRC(循环冗余校验)算法、MD5算法、SHA-3算法、SHA-256算法等。这里简单介绍一下CRC算法和MD5算法。

3. CRC(循环冗余校验)算法

在某些情况下,为了检测数据传输过程中是否出现错误或数据损坏,可以使用CRC算法来生成校验码,并将其附加到UDP数据报中一起传输。具体如下:

  1. 发送端在发送UDP数据报之前,可以对数据进行CRC校验,生成校验码并将其添加到UDP数据报的尾部。
  2. 接收端在接收到UDP数据报后,可以执行相同的CRC算法来计算接收到的数据的校验码,并将其与接收到的校验码进行比较。
  3. 如果两者一致,则说明数据在传输过程中没有出现错误;如果不一致,则说明数据可能已经损坏或被篡改。

可以看到,此处我们也就是将UDP原有的校验码生成方式改为了使用CRC(循环冗余校验)的方式来生成校验码。具体CRC的工作原理,建议寻找其他资料进行了解。

4. MD5(Message Digest Algorithm 5)

首先,先重点认识一下MD5的特点:

  1. 固定长度输出: MD5生成的哈希值是固定长度的,为128位(16字节),无论输入消息的长度如何。

  2. 雪崩效应: 即使输入消息的微小改变也会导致输出哈希值发生巨大变化,这种性质被称为雪崩效应,增加了数据的安全性和完整性。

  3. 不可逆性: MD5是单向哈希函数,意味着从哈希值反推原始消息是困难的,几乎不可能通过哈希值还原出原始消息。

在某些情况下,MD5可以与UDP一起使用以提高数据的完整性检查。例如,在某些应用中,可以在UDP数据报中包含MD5哈希值作为校验字段,以便在接收端验证数据的完整性。这样,接收方可以计算接收到的数据的MD5哈希值,并将其与发送端附加在UDP数据报中的MD5哈希值进行比较,以确保数据在传输过程中没有被篡改或损坏。

我们随便使用一个搜索引擎,搜索MD5,就会有对应的MD5在线工具。

输入需要加密的内容,就可以得到MD5加密后的结果,这里中间有选项:32位大小写、16位大小写,这里的32位指的是32个字符,因为十六进制的形式表示一个字节需要两个字符。如果以二进制形式表示,则只需要16个字符。

MD5理论上是不可逆的,而这里的在线解密,本质上都是通过“打表”的方式来完成,也就是我们调侃的面向结果编程。在线解密工具的服务器通过保存各种见过的字符串的MD5值到数据库中,当我们输入MD5值,就去数据库查,达成这种“解密”的效果。

这种方式一般也只能破解出一些常见的字符串的MD5的值。https://www.somd5.com/ 这就是一个MD5在线解密的网站,我们观察一下面对常见字符串和较复杂字符串,它是否能成功解密。

解密 hello :

解密复杂字符串(今天天气不错):

可以看到,只要稍微复杂点的字符串,这里的在线解密工具就无法解密了。

要注意的是,尽管MD5曾经被广泛使用于数据完整性验证、密码存储等领域,但由于其存在安全性漏洞和易受到碰撞攻击的特性,现在已经不再被推荐或使用在安全性要求较高的场景中。 

MD5的安全性漏洞包括碰撞攻击(Collision Attack)和预影响攻击(Preimage Attack),这些攻击方式使得黑客能够生成具有相同MD5哈希值的不同输入,从而破坏了MD5的数据完整性验证功能。

因此,在现代应用中,更安全的哈希算法如SHA-256、SHA-3等已经取代了MD5的位置。这些算法具有更高的安全性和抗碰撞能力,被广泛用于密码存储、数字签名、消息认证等安全领域。所以,尽管MD5仍然存在,并且有些旧系统可能仍在使用它,但在新的安全应用中,推荐使用更强大和更安全的哈希算法。

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

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

相关文章

【C++】双指针算法:复写零

1.题目 别看这是一道简单题,它的通过率低于一些中等甚至困难的题目! 大大增加这道题目难度的是最后一句话:1.不可越界写入。2.就地修改。 如果可以再创建一个数组的话,那么这道题目就会非常简单,但这道题目必须要求在…

汽车IVI中控开发入门及进阶(十六):carplay认证

现在有些中控采用高通的芯片如8155、8295等,实现多屏互动等,但是也有一些车型走低成本方案,比如能够实现HiCar、CarLife或者苹果Apple的Carplay等能进行手机投屏就好了。 能实现CarPlay功能通过Carplay认证,也就成了一些必须的过程,国产车规级中控芯片里,开阳有一款ARK1…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型,可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型: OpenCV:Open…

kali搭建vulfocus靶场

电脑安装kali,使用kali搭建靶场,自己电脑作为VPS使用 kali 先装好docker: # docker version # 查看当前是否有docker,如果无docker ,则进行docker安装 # apt install docker.io 安装完成后,再次输入 # docker…

【数据结构】二叉树链式结构的实现《遍历,实现》(题库+解析+源码)

前言 二叉树的学习离不开对堆的理解,这是上篇堆的传送门 http://t.csdnimg.cn/F6Jp3 1.二叉树链式结构的实现 1.1 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二 叉树结构掌握还…

【Java】常见锁策略 CAS机制 锁优化策略

前言 在本文会详细介绍各种锁策略、CAS机制以及锁优化策略 不仅仅局限于Java,任何和锁相关的话题,都可能会涉及到下面的内容。 这些特性主要是给锁的实现者来参考的. 普通的程序猿也需要了解一些, 对于合理的使用锁也是有很大帮助的 文章目录 前言✍一、…

收集统计信息报错ora-00600[16515]问题处理

1、基础环境 操作系统Oracle Solaris 11.3 数据版本Oracle 12.2 2、故障理像 对一个20T的大库收集一下全库的统计信息 原因是现在都2024年了,这个库的统计信息基本都是2021年, 没具体查找啥原因导致的系统自定义的收集任务失败,于是决定手…

2024年内外贸一体化融合发展(长沙)交易会

2024年内外贸一体化融合发展(长沙)交易会 一、总体思路 充分发挥湖南作为全国内外贸一体化试点地区作用,坚持“政府主导、市场驱动、企业为主”的原则,以“助力双循环,拓展新市场,促进新消费”为主题&…

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)

腾讯云服务器价格明细表2024年最新(CPU内存/带宽/磁盘)腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格61元一年,2核2G4M价格99元一年、135元15个月、540元三年,2核4G5M带宽165元一年、252元15个月、756元3年&a…

VBA运行后,为什么excel的三个工作表结果一样?

运行完了excel的三个工作表的结果一样,问题在哪呢? 代码如下: Sub 计算成绩() 计算成绩 Macro i为工作表行号 Dim i, m, total As Integer Dim w1 As Worksheet For m 1 To Worksheets.count Set w1 Worksheets(m) i 2 total 0 …

【MySQL 数据宝典】【磁盘结构】- 002 数据字典

一、数据字典 ( Data Dictionary ) 1.1 背景介绍 我们平时使用 INSERT 语句向表中插入的那些记录称之为用户数据,MySQL只是作为一个软件来为我们来保管这 些数据,提供方便的增删改查接口而已。但是每当我们向一个表中插入一条记录的时候,MyS…

ZISUOJ 数据结构--队列及其应用

说明: 基本都是bfs的常见模板题型,思路都很直接,不过后面有两道题很搞心态,它们给的坐标x、y是反的,导致刚开始一直错。题目还是要看仔细,不能先入为主。 题目列表: 问题 A: 围圈报数(完善程序…

Python实现对波士顿房价的分析与预测

文章目录 问题分析所需环境代码实现1. 相关性分析及可视化2. 房价分析及可视化3. 构建房价预测模型问题分析 波士顿房价数据集包含美国人口普查局收集的美国马萨诸塞州波士顿住房价格的有关信息, 数据集很小,只有506个案例。 数据集都有以下14个属性,具体含义如下 现在需要…

工业控制(ICS)---组态软件分析

组态软件 什么是组态软件? 组态软件就是一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软…

轮转数组(Leedcode)的题目

题目:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步…

恶心透了的小日子,害人终害己,国货呼吁关注抵制日本核废水排放

​|日本排放核废水 日本政府决定将福岛第一核电站的核污染水经过处理后排放入海,这一决定引发了多方面的担忧和反对,特别是在周边国家,包括中国和韩国。关于日本排放核污染水这一新闻事件,我们必须首先认识到,核能利用…

二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中

一、目的 由于使用了新的Kafka协议,因为根据新的协议推送模拟数据到Kafka中,再Flume采集Kafka数据到HDFS中 二、技术选型 (一)Kettle工具 准备使用Kettle的JSON input控件和Kafka producer控件,但是搞了1天没搞定&…

《自动机理论、语言和计算导论》阅读笔记:p261-p314

《自动机理论、语言和计算导论》学习第 10 天,p261-p314总结,总计 48 页。 一、技术总结 1.generating & reachable 2.Chomsky Normal Form(CNF) 乔姆斯基范式。 3.pumping lemma 泵作用引理。引理:引理是数学中为了取得某个更好的…

基于docker搭建瀚高数据库HighGo6.0.1【图文】

基于docker搭建瀚高数据库HighGo6.0.1 拉取镜像启动验证进入容器 登录数据库查看数据库加密方式修改加密方式为sm3进入数据库修改密码重启容器 数据库验证数据库密码到期参考 docker部署 https://blog.csdn.net/weixin_44385419/article/details/127738868 拉取镜像 docker p…

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…