3.3.1_1 检错编码(奇偶校验码)

 从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一种解决方案就是接收方只负责发现这种比特错。如果一个帧有位错误,就直接把这个帧丢弃,并且想办法通知发送方,让他重新传输这个帧,关于如何通知发送方重传帧这个问题,我们会在可靠传输功能里边再进行探讨。在差错控制这个部分,我们先把注意力放在如何发现比特错误上。使用检错编码技术可以发现比特错,我们会学习奇偶校验码和 CRC,也就是循环冗余校验码这两种检错编码技术。除了直接把帧丢弃重传之外,还可以有第二种解决方案,就是接收方可以发现并且纠正帧内部的比特错误。如果要纠正这种比特错误,我们就需要使用纠错编码的技术,之后我们会探讨海明教验码,这就是一种纠错编码。既可以发现比特错,同时还可以纠正比特错。

在这个视频中,我们先探讨最简单的奇偶校验码。我们会首先介绍奇偶校验的这种校验原理,如何检测出比特错误,紧接着,我们会为跨考的同学补充异或运算的一个规则。在这个视频中,我们依然需要对异或运算进行一个简单的补充,因为除了奇偶校验之外,接下来要学习的CRC校验码以及海明校验码都需要使用到异或运算。

接下来看奇偶校验码的校验原理,奇偶校验具体来说可以分为两种,一种就是奇校验,另一种是偶校验。二者的原理类似。假设有n个有效信息位,我们会在这n个信息位之前或者之后增加一个比特的这种奇偶校验位,如果我们采用的是奇校验的规则,那么我们添加这一个比特之后需要确保这 n+1位当中总共有奇数个1。相应的如果是偶校验的规则,那么我们需要确保添加了这一位之后,整体来看总共需要有偶数个1。

举个例子,假设这儿给出了两个比特串,我们分别求这两个比特串的基叫页码和偶叫页码。我们假设这个校验位是添加在有效信息位之前,那如果我们采用的是基校验的规则。看第一个比特串,这个比特串总共有七个信息位。其中包含一个一两个一三个一四个一,我们需要在这七个信息位之前增加一个校验位。并且要确保整体来看总共有奇数个1,那么原本有四个1,因此这个校验位我们就得填1,这样的话,整体就有五个1,也就是奇数个1。再来看第二个比特串,同样有七个比特的信息位,那么其中包含一个两个三个四个五个一。所以前边这个校验位,我们只需要添零。这是采用奇校验的规则,如果采用的是偶校验规则,原理类似。前边这个比特串,总共有四个1,添加这个校验位之后,需要确保整体来看总共有偶数个1,因此这个校验位我们只能添0。对于第二个比特串,总共有一个两个三个四个五个一,所以为了使整体拥有偶数个1,我们需要在校验位这儿再添加一个比特1。这就是基于偶校验规则的校验位的确定。在计算机网络中,发送方给接收方发送一个帧,那么发送方的数据链路层,会在帧的数据部分添加这个校验位的信息,然后把校验位和信息位一起发给接收方,而接收方的数据链路层又会基于奇偶校验的规则去检查整个帧有没有出错。

接收方的数据链路层是这么来检错的,如果发送方和接收方共同约定使用奇校验的规则,接收方的数据链路层收到这个帧之后会检查这个帧的校验位和信息位里边含有的比特1是不是奇数个?如果是奇数个,那么就认为没有错误。如果不是奇数个,就认为有错误。在现实应用中,偶校验要比基校验更常用,一些原因是偶校验很容易用简单的异或门来实现。

我们简单介绍一下异或运算的规则,异或运算又称为模2加运算,如果两个比特进行异或运算,那么当且仅当两个比特都相异不同的时候,运算的结果才等于1。比如说第二个式子0和1两个比特相异,它们俩异或运算得到的结果是1,第三个式子1和0两个比特相异,所以它们俩异或得到的结果等于1。相反,两个零进行异或得到的结果是0,两个0进行异或得到的结果也是零,这就是异或运算的规则。

如果我们把几个比特的信息位全部一起来异或就可以得到偶校验位。比如我们以这一串比特串为例,刚才我们用手算的方式得到它的偶校验位等于0。如果用机器计算偶校验位,我们只需要把这七个比特依次进行异或。首先1和0异或等于1,这个1和后一个0异或同样等于1,这个1和后一个1再进行异或等于0,这个0和后一个1继续异或等于1,这个1再和后一个0进行异或等于1,最后还有一个1再进行异或最后的结果就是0。所以把这七个信息位分别异或最终计算的结果是零,可以看到这个计算的结果和我们刚才手算求得的偶校验位是一致的。所以如果要用硬件来求偶校验位会非常快,只需要用异或门就可以实现。

第二个例子也是类似的,把所有的这七个信息位分别异或最终得到的结果就是1,和我们手算求得
的偶校验位是相同的。这儿就不再赘述。

这就是数据的发送方要做的事情,他会把帧的这n个信息位分别进行异或求得一个偶校验位,然后把这个偶校验位加入到信息位的前面。当然,也可以加入到信息位的后面这个都 OK,那么发送方会把这个校验位和n比特的信息位一起传给数据的接收方,而数据的接收方他的数据链路层会对收到的这 n+1个比特进行偶校验。进行偶校验,也可以用异或运算来实现。接收方会把所有的比特依次进行异或运算。我们总共收到八个比特,大家可以自己算一下这八个比特进行异或得到的结果等于0,此时说明这八个比特并没有发生错误。这个式子对应的是偶校验的第一个,这个比特串八个比特都没有发生错误,现在假设数据的接收方接收到的是后面的这八个比特,并且这八个比特当中最后一个比特1跳变成了0。此时对所有的比特进行异或运算,得到的结果就是1,结果为1,说明出现了比特错误。我们可以用人类视角数一数,总共有几个1,总共有五个1,接收方收到的这八个比特当中包含奇数个1。这并不符合偶校验的规则。所以我们从人类视角来看也能发现,这八个比特当中肯定有某些比特出现了错误。

接下来再看一个例子,同样是发送这八个比特。假设最后的两个比特发生了跳变,都是从1变成了0,那么此时数据的接收方对这八个比特进行异或运算之后,得到的结果等于零结果为零,意味着这一串比特符合偶校验的规则。我们从人类的视角来数一下,里边包含四个1,有偶数个1,因此这串二进制数是符合偶校验的规则的。然而,我们从上帝视角可以知道,这一串二进制数当中有两个比特发生了错误。因此,如果有偶数个比特发生错误,那么,数据的接收方将无法检测出这种错误。

刚才我们主要介绍了偶校验的硬件实现的原理,对于奇校验来说,硬件实现原理也是类似的,同样可以通过异或运算去实现。对于计算机网络的考试来说,我们只需要能够用人类的算法确定这个校验位等于多少,以及能够分辨一串二进制数是否符合校验的规则就可以了,大家不需要深究机器实现原理。

在这个视频中我们介绍了一种最简单的检错技术:奇偶校验码。我们提到了信息位、校验位这两个概念。信息位指的就是帧内部的有效数据,而校验位在有的教材中又会把它称为冗余位,因为校验位是我们为了给帧的数据部分纠错或者检错而附加的一些冗余比特信息。对于奇偶校验来说校验原理很简单,我们只需要在n比特信息位的首部或者尾部添加一个比特的校验位。如果数据的发送方和接收方约定的是奇校验规则,就需要确保添加了这个校验位之后。整体来看,总共会有奇数个1,而如果采用偶校验的约定,就需要确保添加校验位之后整体来看,有偶数个1。

需要注意的是,这种奇偶校验码只能检测出奇数位的错误,如果刚好有偶数个比特发生了这种比特跳变,奇偶校验码是没办法检测出这种错误的。同时,奇偶校验码只能检错,不能纠错。在这个视频中,我们也为跨考的同学补充了异或运算,又叫模2加运算的运算规则。当两个比特进行异或运算的时候,只有二者相异的时候,计算的结果才等于1,否则为0,当我们采用偶校验规则的时候,数据的接收方会把所有的信息位和校验位全部进行异或,如果异或的结果等于0,说明没有错误,如果等于1,说明有错误。如果恰巧有偶数个比特发生错误,那么此时数据的接收方,这个异或的结果也会等于零,也就是说发现不了偶数比特的错误。
以上就是这个视频的全部内容。

 

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

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

相关文章

【Pandas】pandas DataFrame isna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一个有效观测值”&#xff09…

MQTT协议:物联网时代的通信基石

MQTT协议:物联网时代的通信基石 在当今快速发展的物联网(IoT)时代,设备之间的通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)协议作为一种轻量级的消息传输协议,正逐渐成为物联…

Excel 表格内批量添加前缀与后缀的实用方法

我们经常需要为 Excel 表格中的内容统一添加前缀或后缀,例如给编号加“NO.”、给姓名加“会员_”等。手动操作效率低,本文将介绍几种实用的方法,帮助你快速完成批量添加前缀和后缀的操作。 使用“&”运算符添加前缀或后缀(推…

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…

分布式锁实战:Redisson vs. Redis 原生指令的性能对比

分布式锁实战:Redisson vs. Redis 原生指令的性能对比 引言 在DIY主题模板系统中,用户可自定义聊天室的背景、图标、动画等元素。当多个运营人员或用户同时修改同一模板时,若没有锁机制,可能出现“甲修改了背景色,乙…

C++ 设计模式《复制粘贴的奇迹:小明的原型工厂》

👨‍🎓 模式名称:原型模式(Prototype Pattern) 📖 背景故事 创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”—— “老…

【Elasticsearch】映射:fielddata 详解

映射:fielddata 详解 1.fielddata 是什么2.fielddata 的工作原理3.主要用法3.1 启用 fielddata(通常在 text 字段上)3.2 监控 fielddata 使用情况3.3 清除 fielddata 缓存 4.使用场景示例示例 1:对 text 字段进行聚合示例 2&#…

开源 vGPU 方案:HAMi,实现细粒度 GPU 切分

本文主要分享一个开源的 GPU 虚拟化方案:HAMi,包括如何安装、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案,HAMi 除了 GPU 共享之外还可以实现 GPU core、memory 得限制,保证共享同一 GPU 的各个 Pod 都能拿到足够的资源。…

PlayDiffusion上线:AI语音编辑进入“无痕时代”

在语音合成与语音编辑领域,一个长期存在的挑战是如何在修改语音内容的同时,保持原始语音的自然性、连贯性和说话人特征。近日,一款名为 PlayDiffusion 的新型 AI 语音修复模型应运而生,成功实现了这一目标。 PlayDiffusion 是一个…

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…

微信小程序前端面经

一、技术栈与编码能力(10min) 1. Vue 3 & Composition API Q1:请解释一下 ref 和 reactive 的区别?你在项目中是如何使用的? 答:ref是包装一个原始值或对象,通过.value访问,r…

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…

Houdini POP入门学习07 - 分组

使用PopGroup可对粒子进行分组操作,并通过表达式从而更灵活的处理粒子行为。 1.创建box作为发射器,连接popnet节点。 2.双击进入popnet,添加popwind添加向上风力。现在播放粒子可见粒子向上方移动。 3.添加popgroup进行分组,开启…

机器学习复习3--模型评估

误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为:误差(error)。 误差定义: ①在训练集上的误差称为训练误差(training error)或经验误差(empirical error&#x…

Docker 镜像上传到 AWS ECR:从构建到推送的全流程

一、在 EC2 实例中安装 Docker(适用于 Amazon Linux 2) 步骤 1:连接到 EC2 实例 ssh -i your-key.pem ec2-useryour-ec2-public-ip步骤 2:安装 Docker sudo yum update -y sudo amazon-linux-extras enable docker sudo yum in…

MobileNet 改进:基于MobileNetV2和SSPP的图像分类

1.创新点分析 在计算机视觉领域,高效的图像分类模型一直是研究热点。 本文将详细解析一个结合了MobileNetV2和空间金字塔池化(SSPP)的深度学习模型实现。 模型概述 这个代码实现了一个轻量级但功能强大的图像分类器,主要包含两个核心组件: MobileNetV2作为特征提取器 自定…

Java中List的forEach用法详解

在 Java 中,List.forEach() 是 Java 8 引入的一种简洁的遍历集合元素的方法。它基于函数式编程思想,接受一个 Consumer 函数式接口作为参数,用于对集合中的每个元素执行操作。 基本语法 java 复制 下载 list.forEach(consumer); 使用示…