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

深入浅出讲解UDP检验中如何计算检验和

一、计算机中的进制:二进制与十六进制

1. 十进制(Decimal)
  • 特点:用0-9表示,逢10进1。

  • 例子:数字 123 表示 1×102+2×101+3×1001×102+2×101+3×100。

2. 二进制(Binary)
  • 特点:用0和1表示,逢2进1。

  • 例子:二进制 1101 转为十进制:

    1×23+1×22+0×21+1×20=8+4+0+1=131×23+1×22+0×21+1×20=8+4+0+1=13
  • 快速转换

    • 二进制 → 十进制:记住权值 20=1,21=2,22=4,23=820=1,21=2,22=4,23=8,逐位相加。

    • 十进制 → 二进制:不断除以2取余数,倒序排列。

      13 ÷ 2 = 6 余 1 → 最低位
      6 ÷ 2 = 3 余 0
      3 ÷ 2 = 1 余 1
      1 ÷ 2 = 0 余 1 → 最高位
      结果为 1101
3. 十六进制(Hexadecimal)
  • 特点:用0-9和A-F(A=10, B=11, ..., F=15)表示,逢16进1。

  • 例子1A3 转为十进制:

    1×162+10×161+3×160=256+160+3=4191×162+10×161+3×160=256+160+3=419
  • 二进制 ↔ 十六进制快速转换

    • 每4位二进制对应1位十六进制(不足补0)。

      二进制 1101 0011 → D3(1101=D, 0011=3)
      十六进制 F → 1111

二、为什么UDP需要校验和?

  • 核心目的:检测数据传输过程中是否发生位错误(如电磁干扰导致0变1或1变0)。

  • 设计特点

    • UDP本身不保证可靠性,但校验和是可选的安全基线。

    • 校验失败时,UDP直接丢弃数据包,不会重传。


三、UDP校验和的计算步骤

1. 数据分片
  • 将UDP报文(头部+数据)按16位(2字节)分组,不足则补0。

    示例数据(十六进制):
    源端口:11 22
    目的端口:33 44
    长度:00 08(8字节)
    校验和:00 00(初始值)
    数据:AA BB CC DD
    → 分片为:1122, 3344, 0008, 0000, AABB, CCDD
2. 反码求和
  • 反码(Ones' Complement):二进制数按位取反(0→1,1→0)。

  • 计算步骤

    1. 所有16位分片按二进制相加。

    2. 若结果超过16位(溢出),将溢出部分加到低位(循环进位)。

    3. 对最终结果取反码,即为校验和。

3. 实际计算示例
  • 示例数据(用十六进制简化计算):

    分片:0x1122, 0x3344, 0x0008, 0x0000, 0xAABB, 0xCCDD
  • 步骤1:十六进制直接相加

    1122+3344+0008+0000+AABB+CCDD1122+3344+0008+0000+AABB+CCDD

    转换为十进制计算:

    1122 = 4386
    3344 = 13124
    0008 = 8
    0000 = 0
    AABB = 43707
    CCDD = 52445
    总和 = 4386 + 13124 + 8 + 0 + 43707 + 52445 = 113,670
  • 步骤2:处理溢出

    • 113,670 转为二进制:11011101100000110(17位,溢出1位)。

    • 循环进位:将溢出的1加到低位:

      剩余16位:1011101100000110(十进制为 47,622)
      加溢出位:47,622 + 1 = 47,623 → 0xB9E7(十六进制)
  • 步骤3:取反码

    • 0xB9E7 的二进制:1011100111100111

    • 取反码:0100011000011000 → 0x4618

  • 最终校验和:0x4618。


四、验证校验和的接收方行为

  1. 接收方将整个UDP报文(含校验和)按同样步骤计算。

  2. 若计算结果为 0xFFFF(全1),说明数据未损坏。

  3. 否则,数据包被丢弃。


五、趣味记忆法

1. 二进制加法 → 堆积木
  • 想象每16位分片是一堆积木,总和超过高度(溢出)时,把多余的积木移到最下面。

2. 校验和 → 安全封印
  • 发送方将数据包“封印”(校验和),接收方验证封印是否完整。


六、动手实验

1. 用Python计算UDP校验和
import numpy as npdef udp_checksum(data):# 将数据按16位分组(假设data为字节流)if len(data) % 2 != 0:data += b'\x00'  # 补0words = np.frombuffer(data, dtype='>H')  # 大端序读取16位total = sum(words)# 处理溢出(循环进位)while total > 0xFFFF:total = (total & 0xFFFF) + (total >> 16)# 取反码return np.uint16(~total)# 示例数据
data = bytes.fromhex('1122334400080000AABBCCDD')
checksum = udp_checksum(data)
print(f"校验和: 0x{checksum:04X}")  # 输出 0x4618

总结

  • 进制基础:二进制和十六进制是计算机的“母语”,掌握快速转换是理解底层机制的关键。

  • UDP校验和:本质是反码求和,通过简单的位运算实现数据完整性检查。

  • 学习技巧:用代码和实际数据包验证理论,将抽象计算具象化。

相关文章:

深入浅出讲解UDP检验中如何计算检验和

一、计算机中的进制:二进制与十六进制 1. 十进制(Decimal) 特点:用0-9表示,逢10进1。 例子:数字 123 表示 110221013100110221013100。 2. 二进制(Binary) 特点:用0和…...

Python类和对象一(十)

封装: 在创建对象之前,通过类将相关的属性和方法打包到一起,然后通过类来生成响应的对象 定义类: 创建对象: 方法里面有个参数self:new的对象 当我们调用类里面方法的时候,py是怎么知道是哪…...

jupyter切换存储路径

一、问题描述 当我采用官网提供的安装方式pip install jupyterlab,在Windows下的powershell里安装jupyterlab成功,并启动:jupyter lab 打开网页:http://localhost:8888/lab 显示如下:成功了,可是我发现这…...

PH热榜 | 2025-04-20

1. Checklist GG 标语:基于人工智能的清单管理工具 介绍:checklist.gg 是一款基于人工智能的检查清单管理工具,旨在帮助组织确保每次都能准确完成任务。 产品网站: 立即访问 Product Hunt: View on Product Hunt 关…...

YOLOv11改进——基于注意力机制和密集小目标增强型EVA模块的设计与实现

随着计算机视觉技术的快速发展,目标检测算法在实时性与检测精度间的平衡成为研究重点。YOLO(You Only Look Once)系列算法以其高效性和准确性,长期占据实时目标检测领域的前沿位置。然而,尽管最新版本在通用场景表现优…...

n8n 中文系列教程_04.半开放节点深度解析:Code与HTTP Request高阶用法指南

在低代码开发领域,n8n凭借其独特的半开放架构打破了传统自动化工具的边界。本文深度剖析两大核心节点——Code与HTTP Request,从底层原理到企业级实战,揭秘如何通过代码自由扩展与API无缝集成,突破平台限制。无论是对接国产生态&a…...

Linux学习——了解和熟悉Linux系统的远程终端登录

Linux学习——了解和熟悉Linux系统的远程终端登录 一.配置Ubuntu系统的网络和用户 1、设置虚拟机网络为桥接模式 打开VMWare,选择编辑虚拟机设置,在网络适配器设置中,选择“桥接模式”,保存设置并启动Ubuntu。 2、配置Ubuntu的…...

PFLM: Privacy-preserving federated learning with membership proof证明阅读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...

十倍开发效率 - IDEA插件之 Maven Helper

0X00 先看效果 第一个选项表示存在冲突的依赖,可以看到图片中 mysql 的连接依赖发生了冲突,在低版本的上面直接右键选择 Exclude,冲突的依赖就被解决掉了。 0X01 安装 在 Plugins 中直接搜索 Maven Helper,选择第一个进行安装&am…...

线程安全总结

1.线程安全 1.1什么是线程安全 线程安全问题指的是当多个线程同时访问和操作共享资源(如变量、数据结构等)时,由于缺乏有效的同步控制,导致程序出现不可预期的错误或数据不一致的现象。其核心在于并发操作破坏了程序的正确性。 …...

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…...

10.QT-显示类控件|LCD Number|ProgressBar|Calendar Widget(C++)

LCD Number QLCDNumer 是⼀个专⻔⽤来显⽰数字的控件.类似于"⽼式计算器"的效果 属性说明intValueQLCDNumber 显⽰的数字值(int).valueQLCDNumber 显⽰的数字值(double).和intValue是联动的.例如给value设为1.5,intValue的值就是2.另外,设置value和intValue的⽅法名…...

深入探索 Unix 与 Linux:历史、内核及发行版

引言 在当今的计算世界中,Unix 和 Linux 操作系统的影响力无处不在。从驱动互联网的服务器到我们口袋里的智能手机,再到无数嵌入式设备,它们的身影随处可见 1。这两个操作系统家族共享着丰富的历史和相似的设计哲学,但又各自走过…...

HCIP第三次作业

一、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 2整个0SPF环境IP基于172.16.0.0/16划分; 3所有设备均可访问R5的环回; 4减少LSA的更新量,加快收敛…...

Linux 入门:基础开发工具(下)git,cgdb操作指南

目录 一.进度条 一).补充:回车与换行 二).行缓冲区 三).进度条代码 二.版本控制器Git 一).Git 安装与配置 二).创建仓库 三).开始操作 1.简单流程 2.配置公钥 1).身份…...

【上位机——MFC】消息映射机制

消息映射机制 Window消息分类消息映射机制的使用代码示例 MFC框架利用消息映射机制把消息、命令与它们的处理函数映射起来。具体实现方法是在每个能接收和处理消息的类中,定义一个消息和消息函数指针对照表,即消息映射表。 在不重写WindowProc虚函数的大…...

提交bug单时,应该说明哪些信息?

在提交 Bug 单时,为了让开发人员能够快速定位和解决问题,需要详细说明以下几方面信息: Bug 的基本信息 标题:简洁明了地概括 Bug 的主要问题,例如 “登录页面输入错误密码后提示信息不准确”。Bug 类型:明确…...

max31865典型电路

PT100读取有很多种方案,常用的惠斯通电桥,和专用IC max31865 。 电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD,镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围&#x…...

【网工第6版】第4章 无线通信网

目录 ■ 移动通信与4G 5G技术 ▲ 移动通信发展 ▲ 移动通信制式 ▲ 移动通信技术标准 ▲ 4G标准 ▲ 4G关键技术 ◎ OFDMA ◎ 4G关键技术-MIMO ◎ 4G关键技术-SDR ◎ 4G关键技术-VolP ▲ 5G应用场景 ▲ 5G两种组网模式 ▲ 5G关键技术 ■ CDMA计算 ■ WLAN通信技术…...

辅助函数构造题目(缓慢更新,遇到更道)

题1...

图论基础:图存+记忆化搜索

图的储存 储存图有很多种方式,在此介绍两种:邻接数组,邻接表 第一种虽然简单,但访问的时间和空间花销过大,因此第二种最为常见。 让我们分别看看它们是什么 在介绍之前,我们先解释一下此处说的“图”是什…...

使用docker任意系统编译opengauss

使用docker任意系统编译opengauss 本人使用开发机器为ubuntu系统,不在官方推荐的编译系统内。但是不想为了开发opengauss重装系统。所以采用docker进行编译。 代码拉取 本人是在/home/yuyang/Documents/opengauss目录下进行操作。 先获取源代码:git clone https:/…...

JavaScript 一维数组转二维数组

题目描述&#xff1a; <script>const num [1,2,3,4]const out (function(num,m,n){if(num.length ! m*n){return []}const newarr []for(let i 0;i<m;i){newarr.push(num.slice(i*n,(i1)*n))}return newarr})(num,2,2)console.log(out)</script>不使用Stri…...

C#进阶学习(八)常见的泛型数据结构类(3)SortedDictionary<TKey, TValue>与SortedList<TKey, TValue>

目录 关于默认的排序可以看这篇文章的第二点中关于排序的部分&#xff1a; 一、SortedDictionary 1. 核心特性 2. 常用方法和属性 二、SortedList 1. 核心特性 2. 常用方法和属性 三、关于TryGetValue(TKey key, out TValue value) 方法的详细说明 &#xff08;一&…...

运维侠职场日记9:用DeepSeek三天通关详解自动化操作pdf批量提取PDF文字将PDF转Word文档(附上脚本代码)

一. 痛点 运维侠小白想将pdf文档转换成word文档,但是,wps等等这些软件的转换功能都是要付费,开通会员,这该怎么办?听说python也有这个功能于是迫不及待想学… 学会基础,学习的乐趣一点点积累 基础学习成本低,掌握所需的技能要求也少,学会一两行代码,看着输出,心理慢…...

热门算法面试题第19天|Leetcode39. 组合总和40.组合总和II131.分割回文串

39. 组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 ta…...

IDEA连接达梦数据库

1. 参考在IDEA中连接达梦数据库&#xff1a;详细配置指南_idea连接达梦数据库-CSDN博客 . jdbc:dm://127.0.0.1:5236?schemaSALES...

React Router V7使用详解

1,安装 React Router是React生态系统中最流行的路由解决方案,它允许开发者在单页应用的不同页面之间进行切换,而不需要重新加载整个页面,React Router与React框架深度集成,使得开发者在单页面应用中进行页面切换时变得轻而易举。 作为官方推荐的路由解决方案,React Rou…...

国际数据加密算法(IDEA)详解

以下是修正后的准确版本,已解决原文中的术语、符号及技术细节问题: ​国际数据加密算法(IDEA)​ IDEA是一种分组加密算法,由Xuejia Lai(来学嘉)和James Massey于1990年设计。IDEA使用128位密钥对64位明文分组进行加密,经过8轮迭代运算后生成64位密文分组。其安全性基于…...

2025年4月19日-米哈游春招笔试题-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 魔法网格变换术 问题描述 在魔法学院,卢小姐正在研究一种特殊的魔法网格变换术。这种魔法作用于一个 n n n...

基于STM32串口通信

基于STM32串口通信 一、串口简介 串口&#xff0c;也称为串行接口或串行通信接口&#xff08;通常指COM接口&#xff09;&#xff0c;是一种采用串行通信方式的扩展接口。它实现了数据一位一位地顺序传送&#xff0c;具有通信线路简单、成本低但传送速度慢的特点。 只要一对传…...

即梦AI与可灵AI视频生成功能对比分分析

一、核心功能与特点对比 维度可灵AI&#xff08;快手旗下&#xff09;即梦AI&#xff08;字节跳动旗下&#xff09;视频生成能力✅ 支持最长3分钟视频生成&#xff08;通过续写功能&#xff09;✅ 1080p分辨率、30fps帧率✅ 物理模拟&#xff08;流体运动、重力效果&#xff0…...

【任务调度】Quartz入门

Quartz 入门 代码仓库地址&#xff1a; GitHub&#xff1a;chenmeng-test-demos/demo8-task at master cmty256/chenmeng-test-demosGitee&#xff1a;demo8-task chenmeng/chenmeng-test-demos - 码云 - 开源中国 基本介绍 Quartz 是一个开源的作业调度框架&#xff0c;它完…...

【网络编程】从零开始彻底了解网络编程(二)

本篇博客给大家带来的是网络编程的知识点,. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便进步 1. …...

常见浏览器 WebDriver 驱动下载

以下是常见浏览器 WebDriver 驱动的下载地址及注意事项&#xff0c;综合多个可靠来源整理而成&#xff1a; 一、Chrome 浏览器&#xff08;ChromeDriver&#xff09; 官方下载地址 http://chromedriver.storage.googleapis.com/index.html • • 版本匹配&#xff1a;需与 Chro…...

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录 昨日内容复习TCP 的四次挥手&#xff1f;TCP 为什么要四次挥手&#xff1f;在客户端处于 FIN_WAIT_2 状态时&#xff0c;如果此时收到了乱序的来自服务端的 FIN 报文&#xff0c;客户端会如何处理&#xff1f;何时进入 TIME_WAIT 状态&#xff1f;TCP 四次挥手丢了怎么…...

大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...

LeetCode第159题_至多包含两个不同字符的最长子串

LeetCode 第159题&#xff1a;至多包含两个不同字符的最长子串 题目描述 给定一个字符串 s&#xff0c;找出 至多 包含两个不同字符的最长子串 t&#xff0c;并返回该子串的长度。 难度 中等 题目链接 点击在LeetCode中查看题目 示例 示例 1&#xff1a; 输入: s &qu…...

PG CTE 递归 SQL 翻译为 达梦版本

文章目录 PG SQLDM SQL总结 PG SQL with recursive result as (select res_id,phy_res_code,res_name from tbl_res where parent_res_id (select res_id from tbl_res where phy_res_code org96000#20211203155858) and res_type_id 1 union all select t1.res_id, t1.p…...

JavaScript 位掩码常量教程

JavaScript 位掩码常量教程 位掩码&#xff08;Bitmask&#xff09;是一种高效使用内存的技术&#xff0c;在JavaScript中可以用来存储和操作多个布尔值标志。下面我将为您介绍位掩码的基本概念、应用场景以及实践示例。 什么是位掩码常量&#xff1f; 位掩码利用二进制位&a…...

Linux守护进程

一、相关概念 QQ邮箱关于三种协议的解释&#xff1a;SMTP/IMAP服务 1.SMTP协议 SMTP&#xff08;​​Simple Mail Transfer Protocol​​&#xff0c;简单邮件传输协议&#xff09;是一种用于发送电子邮件的互联网标准。它在TCP/IP协议族中&#xff0c;通常使用25端口进行通…...

Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南

引言 在多进程并发编程中&#xff0c;资源竞争问题如同“隐形炸弹”&#xff0c;稍有不慎就会导致数据不一致或程序崩溃。无论是银行转账的余额错误&#xff0c;还是火车票超卖&#xff0c;其根源都在于共享资源的无序访问。如何安全高效地管理这些资源&#xff1f;Python中的锁…...

mysql的5.7版本与8.0版本的差异与兼容性

MySQL 5.7 和 8.0 是两个重要的版本&#xff0c;它们在性能、功能、安全性等方面都有显著的改进&#xff0c;同时也存在一些兼容性问题。以下是具体的改进点和兼容性问题&#xff1a; 一、MySQL 8.0 的改进点 性能提升 优化器改进&#xff1a;MySQL 8.0 对查询优化器进行了重大…...

【Rust 精进之路之第4篇-数据基石·上】标量类型:整数、浮点数、布尔与字符的精妙之处

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:构成万物的“原子”——标量类型 在上一篇文章【变量观】中,我们深入探讨了 Rust 如何通过 let、mut、const、static 和 Shadowing 来管理变量绑定,并理解了其背后对安全性…...

LangChain4j模型参数配置全解析:释放大语言模型的真正潜力

LangChain4j模型参数配置全解析&#xff1a;释放大语言模型的真正潜力 前言 在大语言模型应用开发中&#xff0c;参数配置是连接算法理论与工程实践的关键桥梁。合理的参数设置能让模型输出更精准、响应更高效&#xff0c;而错误的配置可能导致成本激增或业务逻辑失效。本文将…...

【深度学习入门_NLP自然语言处理】序章

本部分开始深度学习第二大部分NLP章节学习&#xff0c;找了好多资料&#xff0c;终于明确NLP的学习目标了&#xff0c;介于工作之余学习综合考量&#xff0c;还是决定以视频学习为主后期自主实践为主吧。 分享一个总图&#xff0c;其实在定位的时候很迷茫&#xff0c;单各章节…...

计算机组成原理笔记(十六)——4.1基本算术运算的实现

计算机中最基本的算术运算是加法运算&#xff0c;加、减、乘、除运算最终都可以归结为加法运算。 4.1.1加法器 一、加法器的基本单元 加法器的核心单元是 全加器&#xff08;Full Adder, FA&#xff09;&#xff0c;而所有加法器都由 半加器&#xff08;Half Adder, HA&…...

AI日报 - 2025年04月21日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | O3模型性能引热议&#xff0c;Rich Sutton提出「体验时代」新范式&#xff0c;自递归AI构建仍存挑战。 新模型如O3展示高IQ&#xff0c;但AGI定义与实现路径讨论加剧&#xff0c;强调自主生成数据与体验学习。 ▎&…...

基于Python的推荐算法的电影推荐系统的设计

标题:基于Python的推荐算法的电影推荐系统的设计与实现 内容:1.摘要 本文围绕基于Python的推荐算法的电影推荐系统展开研究。背景在于随着电影数量的急剧增加&#xff0c;用户在海量电影中找到符合自身喜好的影片变得困难。目的是设计并实现一个高效准确的电影推荐系统&#x…...

【perf】perf工具的使用生成火焰图

文章目录 1. What is perf?2. perf使用2.1 perf的子工具集2.2 常用指令perf list指令格式参数perf中事件分类使用示例 perf stat指令格式参数 perf top指令格式参数交互式界面操作使用示例 perf record指令格式参数使用示例 perf report指令格式参数交互式界面操作使用示例 pe…...