计算机网络(7) 错误检测

一.校验和

使用补码计算校验和是一种常见的错误检测方法,应用于网络协议如IP和TCP。补码是二进制数的一种表示方法,可以有效地处理符号位和进位。下面是如何利用补码计算校验和的详细步骤和算数例子。

### 计算步骤

1. **将数据分块**:将数据分成16位(2字节)一块。
2. **求和**:将所有16位块的值求和,如果求和结果超过16位,则将高位的进位加回到结果中。
3. **取反**:将最终的和取反,得到校验和。

### 算数例子

假设我们有一个简单的数据序列,用于计算IP或TCP校验和。这里以16进制表示的数据序列为例:

```
4500 003C 1C46 4000 4006 B1E6 C0A8 0001 C0A8 00C7
```

#### 第一步:分块

将数据分成16位(2字节)一块:

```
4500
003C
1C46
4000
4006
B1E6
C0A8
0001
C0A8
00C7
```

#### 第二步:求和

将每个16位块转换为十进制并求和,注意每一步保持结果在16位以内(即如果有进位,则将进位加回到和中):

```
4500 -> 0x4500 = 17664
003C -> 0x003C = 60
1C46 -> 0x1C46 = 7238
4000 -> 0x4000 = 16384
4006 -> 0x4006 = 16390
B1E6 -> 0xB1E6 = 45542
C0A8 -> 0xC0A8 = 49320
0001 -> 0x0001 = 1
C0A8 -> 0xC0A8 = 49320
00C7 -> 0x00C7 = 199
```

将这些值相加:

```
17664 + 60 + 7238 + 16384 + 16390 + 45542 + 49320 + 1 + 49320 + 199 = 201118
```

由于这个和超过16位,我们需要将进位加回:

```
201118 = 0x313AE (以16进制表示)
将0x313AE分解为16位和进位部分:
0x313AE = 0x13AE + 0x30000 = 5038 + 3 = 5041 (0x13AE + 3 = 0x13B1)
```

所以最终的和为:

```
5041 = 0x13B1
```

#### 第三步:取反

将最终的和取反,得到校验和:

```
0x13B1 -> 取反 -> 0xEC4E
```

所以,校验和为:

```
0xEC4E
```

### 代码示例

下面是上述计算过程的Python实现:

```python
def calculate_checksum(data):
    checksum = 0
    # 将数据分块,每块16位(2字节)
    for i in range(0, len(data), 2):
        word = (data[i] << 8) + (data[i + 1] if (i + 1) < len(data) else 0)
        checksum += word
        # 如果有进位,则加回到结果中
        if checksum > 0xFFFF:
            checksum = (checksum & 0xFFFF) + 1
    # 取反
    checksum = ~checksum & 0xFFFF
    return checksum

# 示例数据,以字节数组形式表示
data = [
    0x45, 0x00, 0x00, 0x3C, 0x1C, 0x46, 0x40, 0x00,
    0x40, 0x06, 0xB1, 0xE6, 0xC0, 0xA8, 0x00, 0x01,
    0xC0, 0xA8, 0x00, 0xC7
]

# 计算校验和
checksum = calculate_checksum(data)
print("校验和: 0x{:04X}".format(checksum))
```

### 解释

1. **分块**:将数据分成16位一块。
2. **求和**:将所有块的值相加,如果超过16位,将进位部分加回到和中。
3. **取反**:将最终的和取反,得到校验和。

通过这个例子,我们可以清楚地看到如何利用补码计算校验和,这种方法在网络协议中广泛应用,确保数据传输的完整性和正确性。

解释

  1. 分块:将数据分成16位一块。
  2. 求和:将所有块的值相加,如果超过16位,将进位部分加回到和中。
  3. 取反:将最终的和取反,得到校验和。

通过这个例子,我们可以清楚地看到如何利用补码计算校验和,这种方法在网络协议中广泛应用,确保数据传输的完整性和正确性。

校验和的工作原理

校验和的目的是检测数据传输中的错误。当发送方发送数据时,它计算数据的校验和,并将这个校验和附加到数据包中。接收方在接收到数据包后,会重新计算数据的校验和,并将这个校验和与接收到的校验和进行比较。如果两个校验和相同,说明数据在传输过程中没有错误;如果不同,则表示数据在传输过程中发生了错误。

取反的作用

取反的目的是使得校验和的计算能够检测到尽可能多的错误类型。具体原因如下:

  1. 生成全零结果:取反后,当接收方计算校验和时,将所有数据块、校验和以及取反结果相加,如果数据传输没有错误,总和应该为全1(即0xFFFF)。这个全1结果取反后应该是全0(即0x0000)。如果数据在传输过程中发生了变化,总和将不会是全1,取反后也不会是全0,从而可以检测到错误。

  2. 错误检测的增强:通过取反,可以确保即使某些位翻转(例如1变成0或0变成1),校验和也能更有效地检测到这些错误。取反增加了检测到单个位错误和多位错误的可能性,从而增强了校验和的错误检测能力。

二.CRC校验(循环冗余码)

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

服务器远程桌面经常连接不上,造成远程桌面连接不上的原因都有哪些

服务器远程桌面连接不稳定或经常连接不上是一个较为常见的技术问题&#xff0c;其可能的原因涉及多个层面&#xff0c;包括网络设置、服务器配置、系统安全等方面。下面将详细探讨一些可能造成远程桌面连接问题的主要原因&#xff1a; 首先&#xff0c;网络连接不稳定是导致远…

【类脑计算】突触可塑性模型之Hebbian学习规则和STDP

1 引言 突触可塑性 (Synaptic plasticity)指经验能够修改神经回路功能的能力。特指基于活动修改突触传递强度的能力&#xff0c;是大脑适应新信息的主要调查机制。分为短期和长期突触可塑性&#xff0c;分别作用于不同时间尺度&#xff0c;对感官刺激的短期适应和长期行为改变…

港理工最新综述:基于LLM的text-to-SQL调查(方法实验数据全面梳理)1

【摘要】文本到SQL旨在将自然语言问题转换为可执行的SQL语句,这对用户提问理解、数据库模式理解和SQL生成都是一个长期存在的挑战。传统的文本到SQL系统包括人工工程和深度神经网络。随后,预训练语言模型(PLMs)被开发并用于文本到SQL任务,取得了可喜的成绩。随着现代数据库变得…

前端开发和UI设计师的互怼,大概率逃不出这10个协作盲区。

前端和UI作为产品开发两个工序&#xff0c;按理说应该是合作亲密无间的&#xff0c;而实际工作中却是经常起摩擦&#xff0c;互怼成了常态&#xff0c;贝格前端工场通过本文带领大家一探背后的原因。 一、UI设计师和前端开发的岗位职责 UI设计师的职责&#xff1a; 1. 与产品…

iPad键鼠充电otg转接器 | LDR6020解决方案

随着科技的快速发展&#xff0c;iPad已经成为我们日常生活中不可或缺的一部分。它不仅是一个娱乐工具&#xff0c;更是一个高效的生产力工具。为了更好地满足用户的需求&#xff0c;iPad支持在充电的同时连接鼠标和键盘&#xff0c;极大地提升了使用的便捷性和效率。 iPad键鼠同…

SSM医院线上线下全诊疗系统-计算机毕业设计源码02210

目 录 摘要 1 绪论 1.1背景及意义 1.2研究现状 1.3ssm框架介绍 1.4论文结构与章节安排 2 医院线上线下全诊疗系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分…

多线程中run()和start()的区别

我们知道&#xff0c;在多线程中 Thread thread new Thread(runnable); thread.start();以及 thread.run();都可以执行runnable中run方法下的代码&#xff0c;但是二者又有所不同 下面给出一段代码用以体现二者的区别&#xff1a; 以下代码中&#xff0c;通过thread.start()启…

SAP RFC 输入一张表(C# 使用 SapNwRfc 二)

SapNwRfc中的配置参数&#xff0c;记录日志关闭 Trace0&#xff0c;可以得到很好的性能。 有网友在问&#xff0c;SAP RFC返回多张表&#xff08;C# 使用 SapNwRfc 一&#xff09;中如何输入一张表的数据&#xff0c;正好博主也遇到了这个场景&#xff0c;今天做了一个DEMO&…

一文带你搞清楚AI领域的高频术语!RAG、Agent、知识库、向量数据库、知识图谱、Prompt...都是在讲啥?

随着AI人工智能技术的不断发展&#xff0c;一些领域有关的概念和缩写总是出现在各种文章里&#xff0c;像是Prompt Engineering、Agent 智能体、知识库、向量数据库、RAG 以及知识图谱等等&#xff0c;但是这些技术和概念也的的确确在AI大模型的发展中扮演着至关重要的角色。这…

重塑IT审计的未来:数智化审计赋能平台的创新与实践

重塑IT审计的未来&#xff1a;数智化审计赋能平台的创新与实践 一、当前企业开展IT审计面临的挑战 随着信息技术的快速发展、企业数字化转型的持续深入&#xff0c;以及网络安全合规要求的不断增强&#xff0c;企业开展新型IT审计重要性越来越突出&#xff0c;但实施难度却越来…

自定义Unity组件——ABManager(AB包管理器)

需求描述 在Unity3D引擎中&#xff0c;AB包作为常用的游戏资源存储格式之一。而对于资源管理我们就不得不谈到集中管理的优势了&#xff0c;通过统一的接口加载和卸载AB包及其中的资源将进一步提升我们的编程效率。本文将围绕这个需求进行尝试。 功能描述 1. AB包的加载包括同…

软考初级网络管理员__Web网站的建立、管理维护以及网页制作单选题

1.在HTML 中&#xff0c;用于输出“>”符号应使用()。 gt \gt > %gt 2.浏览器本质上是一个&#xff08;&#xff09;。 连入Internet的TCP/IP程序 连入Internet的SNMP程序 浏览Web页面的服务器程序 浏览Web页面的客户程序 3.HTML 语言中&#xff0c;单选按钮的…

工业 web4.0 的 UI 卓越非凡

工业 web4.0 的 UI 卓越非凡

深度学习(八)——神经网络:卷积层

一、卷积层Convolution Layers函数简介 官网网址&#xff1a;torch.nn.functional — PyTorch 2.0 documentation 由于是图像处理&#xff0c;所以主要介绍Conv2d。 class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, b…

vite-plugin-mock前端自行模拟接口返回数据的插件

vite-plugin-mock前端自行模拟接口返回数据的插件 安装导入、配置&#xff08;vite.config.js&#xff09;使用目录结构/mock/user.js具体在页面请求中的使用 注意事项 中文文档&#xff1a;[https://gitcode.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md) 参考其他…

SpringBoot+Maven笔记

文章目录 1、启动类2、mapper 接口3、控制类4、补充&#xff1a;返回数据时的封装5、补充a、mybatisplus 1、启动类 在启动类上加入MapperScan扫描自己所写的mapper接口 package com.example.bilili_springboot_study;import org.mybatis.spring.annotation.MapperScan; impo…

【因果推断python】36_断点回归2

目录 RDD 估计 内核加权 RDD 估计 RDD 依赖的关键假设是阈值处潜在结果的平滑性。用比较正式地表述来说&#xff0c;当运行变量从右侧和左侧接近阈值时&#xff0c;潜在结果的极限应该是相同的。 如果这是真的&#xff0c;我们可以在阈值处找到因果关系 从其本身意义来说&…

统计信号处理基础 习题解答10-16

题目&#xff1a; 对于例10.1&#xff0c;证明由观察数据得到的信息是&#xff1a; 解答&#xff1a; 基于习题10-15的结论&#xff0c;&#xff0c;那么&#xff1a; 而根据习题10-15的结论&#xff1a; 此条件概率也是高斯分布&#xff0c;即&#xff1a; 根据相同的计算&a…

为什么都在避坑抖店?现阶段小白真的很难做起来吗?现状分析

我是王路飞。 如果有想做抖店的&#xff0c;你们可能都发现了一个现象。 那就是现在很多抖店商家都在劝告新手小白&#xff0c;不要入局抖店了&#xff0c;都在劝避坑。 难道现阶段新手小白入局抖音小店&#xff0c;真的很难做起来吗&#xff1f; 我给你们分析下抖店现状&a…