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

目录

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.mzph.cn/pingmian/1837.shtml

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

相关文章

计算机网络实验——学习记录五(TCP协议2)

一、TCP协议重传机制 TCP协议是一种面向连接、可靠的传输层协议。为了保证数据的可靠传输,TCP采用数据包重传的机制来应对网络传输过程中可能出现的丢包、错包和乱序等问题。 TCP协议的重传包括超时重传、快速重传、带选择确认SACK的重传和重复SACK重传四种。 二、…

grafana安装篇(1)

目录 grafana概念: 它具有以下主要特点: Grafana 常用于以下场景: 环境介绍: 前置环境: (1)保证可以连接外网 (2)防火墙和selinux已关闭 1.下载安装grafana10.0.1-1rpm包 2.启动grafana 3.浏览器访问 3.设置…

实验2 NFS部署和配置

一、实训目的 1.了解NFS基本概念 2.实现NFS的配置和部署 二、实训准备 1.准备一台能够安装OpenStack的实验用计算机,建议使用VMware虚拟机。 2.该计算机应安装CentOS 7,建议采用CentOS 7.8版本。 3.准备两台虚拟机机(客户机和服务器机&…

Linux CPU 占用率 100% 排查

其他层面要考虑到的地方 mysql,有执行时间特别长的sql、死锁redis雪崩等相关问题并发导出数据量大Java定时器服务业务复杂,比如像每天要更新电商的统计表,每天发送优惠券等业务需要提前计算才能保证业务使用时的流畅性,我这个原因…

leetcode最大间距(桶排序+Python)

虽然直接排完序,再求最大差值更快,这里我们还是学一下桶排序。 桶排序主要维护一个bucket,初始bucket【i】 0,遍历nums,当i存在时,令bucket【i】 1,表示存在。遍历完nums,bucket中有…

DiT解读:当Diffusion遇上Transformer

前置知识 ViT Vision Transformer是一种基于Transformer架构的深度学习模型,专门用于处理计算机视觉任务。他的1出现给以往CNN base的图像工作带来了很多新的可能性 ViT的核心思想是将图像分割成均匀的图像块,然后将这些图像块转换为序列,…

【LAMMPS学习】八、基础知识(3.8)计算扩散系数

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

4.点云数据的配准

1.点云配准ICP(Iterative Closest Point)算法 点云配准的原理及ICP(Iterative Closest Point)算法原理参照博客【PCL】—— 点云配准ICP(Iterative Closest Point)算法_icp点云配准-CSDN博客。 (1)点云配准原理:三维扫描仪设备对目标物体一…

Learn ComputeShader 02 Multiple kernels

前面已经成功创建了第一个compute shader,并且使用它替换掉quad的材质的纹理,现在我们将要在计算着色器中创建多个kernel。 首先调整上次的计算着色器,让它显示为红色。 然后再次创建一个kernel,显示为黄色。 结果应该是这样的…

mysql基础2——字段类型

整数类型 需要考虑存储空间和可靠性的平衡 浮点类型 浮点数类型不精准 将十进制数转换为二进制数存储 浮点数类型:float double real(默认是,double ) 如果需要将real设定为float ,那么通过以下语句实现 set sql_mode "real_as…

52 文本预处理【动手学深度学习v2】

将文本作为字符串加载到内存中。 将字符串拆分为词元(如单词和字符)。 建立一个词表,将拆分的词元映射到数字索引;将文本转换为数字索引序列,方便模型操作。

我在本地部署通义千问Qwen1.5大模型,并实现简单的对话和RAG

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

WordPress 告别 MySQL:Docker SQLite WordPress

本篇文章聊聊,如何将这个持续诞生和维护了 21 年的开源软件“脱离数据库”运行,让它能够更加轻量、适合低成本离线运行。 写在前面 2003 年,Michel Valdrighi 基于 b2/cafelog 创建了开源软件 WordPress,并在 GPL 协议下发布。 …

(一)Java EE企业级应用开发实战之Servlet教程——JDK安装

首先打开清华大学开源软件镜像站,清华大学开源镜像网站地址为: https://mirrors.tuna.tsinghua.edu.cn/ 打开该地址后的界面显示如下图所示 找到8版本对应的SDK安装包,我现在用的开发机器是Windows,所以我找的是Windows对应的版本…

[柏鹭杯 2021]试试大数据分解?

题目:(NSSCTF | 在线CTF平台) 题目就是如此,我没看到有5个不同的文本,其中最后一个文本以pem后缀,所以我们先来了解一下什么是pem格式。 PEM 格式 PEM格式通常用于数字证书认证机构(Certifica…

EelasticSearch的介绍和基于docker安装

1.概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计,提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的硬…

AES和RSA加解密算法学习笔记(实战版)

1. 写在前面 今天整理一篇有关密码学的学习笔记,原因是最近做的一个任务是在网络传输的时候,需要对传输的包进行加密和解密工作,以保证传输过程的安全性。所以,这个过程用到了AES和RSA两个算法。 场景:假设我要给我的老师传送毕设代码和论文, 我已经把代码和论文打成了一…

VSCode 配置 C/C++ 环境

1 安装 VSCode 直接去官网(https://code.visualstudio.com/)下载并安装即可。 2 配置C/C编译环境 方案一 如果是在Windows,需要安装 MingW,可以去官网(https://sourceforge.net/projects/mingw-w64/)下载安装包。 注意安装路径不要出现中文。 打开 w…

Ubuntu-18.04本地化部署Rustdesk服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、配置防火墙二、安装三大件1.下载三大件2.安装三大件 三、安装客户端1.下载客户端1.Windows2.Linux 四、配置客户端连接服务器五、总结 前言 如果你是想数据…

JEECG表格选中状态怎么去掉

官网代码(在取消选中状态的时候不生效) rowSelection() {return {onChange: (selectedRowKeys, selectedRows) > {console.log(selectedRowKeys: ${selectedRowKeys}, selectedRows: , selectedRows);},getCheckboxProps: record > ({props: {disa…