计算机网络——数据链路层-差错检测(奇偶校验、循环冗余校验CRC)

目录

奇偶校验 

循环冗余校验CRC

发送方操作

接收方操作

生成多项式

举例-1

举例-2


我们知道,

  • 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错;1可能变成0,而0也可能变成1,这称为比特差错

如下图所示:

比特流在传输过程中由于受到各种干扰就可能会出现比特差错,或称为误码。

  • 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BERBit Error Rate)。
  • 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

例如以太网版本2的MAC帧格式和点对点协议PPP的帧格式,他们帧尾中都包含了帧检验序列FCS字段,其作用就是让接收方的数据链路层检查帧在传输过程中是否产生了误码。

奇偶校验 

接下来我们介绍基偶校验这种比较简单的检测方法。

在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。

举例说明:

  • 采用奇偶校验,如果有奇数个位发生误码,则奇偶性会发生变化,也就是奇变偶或者是偶变奇,这样就可以检查出误码
  • 而如果有偶数个位发生误码,则奇偶性不会发生变化,不能检查出误码(漏检)

这是因为:每个误码对奇偶性的影响相互抵消了,这样就无法检查出误码,也称为漏检。

由于奇偶校验的漏检率比较高,因此计算机网络的数据链路层一般不会采用这种检测方法。

循环冗余校验CRC

CRC(Cyclic Redundancy Check)

接下来我们介绍循环冗余校验CRC,这是一种具有很强检错能力的检测方法,漏检率极低。

  • 收发双方约定好一个生成多项式G(x)
  • 发送方基于待发送的数据和生成多项式计算出差错检测码,称为冗余码,并将其添加到待传输数据的后面一起传输;
  • 接收方通过生成多项式来计算收到的数据是否产生了误码。

发送方操作

使用除法(模二除法)来计算冗余码,

  • 待发送的数据作为被除数的一部分,后面添加生成多项式最高次数个0以构成被除数
  • 生成多项式各项系数构成的比特串作为除数
  • 进行模二除法得到商和余数
  • 余数就是所计算出的冗余码,将其添加到待发送数据的后面一起发送 。

需要注意的是,冗余码的长度与生成多项式最高次数相同,而商仅作为标记防止计算过程中对错位

对模二除法不太了解的同学可以前往:模2除法——用非常直观的例子解释_模二除法-CSDN博客 

——作者:

猫咪钓鱼

接收方操作

被除数就是接收到的数据,除数仍是生成多项式各项系数构成的比特串,进行模二除法得到商和余数,如果余数为0,可判定传输过程没有产生误码,否则可判定传输过程产生了误码 。

生成多项式

下面我们对生成多项式举例说明,这是一个生成多项式:

这是该生成多项式的完整形式:

生成多项式各项系数构成的比特串就是我们做除法时所用到的除数

这是常用的生成多项式:

使用这些生成多项式进行CRC校验可以达到较好的检测效果,也就是漏检率比较低。

需要注意的是,CRC算法要求生成多项式必须包含最低次项

举例-1

待发送的信息为101001,生成多项式为G(x)=x^3+x^2+1,计算余数。

该题给定了待发送的信息和一个生成多项式,要求计算余数:

第一步构造被除数。在待发送信息后面添加生成多项式最高次数个0,就可以构造出被除数。

这是待发送信息:

这是添加生成多项式最高次数个0:

第二步构造除数。生成多项式各项系数构成的比特串就是除数:

第三步做模二除法,得到余数为1:

第四步检查余数。余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补0来凑足位数,将余数添加到待发送信息的后面就可以发送了 :

 

举例-2

再来做一个练习

接收到的信息为101101001,生成多项式为G(x)=x^3+x^2+1,判断传输是否误码?

该题给定了接收方收到的信息和一个生成多项式,要求判断传输过程是否产生了误码:

需要说明的是,

  • 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
  • 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错,但纠错码的开销比较大,在计算机网络中较少使用
  • 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件来实现,因此被广泛应用于计算机网络的数据链路层
  • 在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

 


END


学习自:湖科大——计算机网络课程

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

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

相关文章

浪潮信息 KeyarchOS 安全可信攻防体验

1. KeyarchOS——云峦操作系统简介 KeyarchOS 即云峦服务器操作系统(简称 KOS)是浪潮信息基于 Linux 内核、龙蜥等开源技术自主研发的一款服务器操作系统,支持 x86、ARM 等主流架构处理器,广泛兼容传统 CentOS 生态产品和创新技术产品,可为用…

c++--面向对象特性

1.面向对象指的是继承,封装,多态。 继承主要关注类的构造,赋值,析构。 以下对多态,封装进行补充说明。 2、多态 2.1.定义 a.赋值 派生类的指针,可以赋值给基类的指针。 派送类的对象,可以赋值给…

Avalonia中使用Prism实现区域导航功能

前言 上一篇文章我们讲了在Avalonia开发中,引入Prism框架来完成项目的MVVM迁移。本章内容将带领大家学习如何在Avalonia中使用Prism框架实现区域导航功能。如果你还不知道Avalonia中如何引入Prism框架,请看我上一篇文章:Avalonia框架下面使用…

【WPF.NET开发】构造动态布局

本文内容 系统必备创建项目配置默认的 Grid Panel 控件向面板中添加控件测试布局汇总所有内容后续步骤 在动态定位中,您通过指定子元素相对于父元素应该如何排列以及应该如何包装来排列子元素。 您还可以将窗口和控件设置为在其内容扩展时自动扩展。 适用于 Vis…

Oracle merge into语句(merge into Statement)

在Oracle中,常规的DML语句只能完成单一功能,,例如insert/delete/update只能三选一,而merge into语句可以同时对一张表进行更新/插入/删除。 目录 一、基本语法 二、用法示例 2.1 同时更新和插入 2.2 where子句 2.3 delete子句 2.4…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的,它是数据库操作中的一种重要操作,能够帮助用户删除不需要的数据,以便保持数据库的整洁和高效。在使用Delete操作时,需要注意确保操作的准确性和安全性,以免误删重要…

[JavaScript前端开发及实例教程]计算器井字棋游戏的实现

计算器&#xff08;网页内实现效果&#xff09; HTML部分 <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>My Calculator&l…

Ruff智能物联网网关助力工厂数智化运营,实现产量提升5%

数字化转型是大势所趋&#xff0c;以工业互联网为代表的数实融合是发展数字经济的重要引擎&#xff0c;也是新质生产力的一大助力。工业互联网是新工业革命的重要基石&#xff0c;加快工业互联网规模化应用&#xff0c;是数字技术和实体经济深度融合的关键支撑&#xff0c;是新…

回归预测 | MATLAB实现CNN-BiLSTM(卷积双向长短期记忆神经网络

效果一览 基本介绍 提出一种同时考虑时间与空间因素的卷积&#xff0d;双向长短期记忆&#xff08; CNN-BiLSTM&#xff09;模型&#xff0c;将具有空间局部特征提取能力的卷积神经网络&#xff08;CNN&#xff09;和具有能同时考虑前后方向长时间信息的双向长短期记忆&#xf…

JavaScript基础知识21——for循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天学习for循环&#xff0c;以下为学习笔记。 1、while循环和for循环有啥不同&#xff1f; 1.1、在实际开发中&#xff0c;while循环用来解决循环次数不确定时使用&#xff0c;当一个循环不确定会循环多少次时&#…

【每日OJ —— 94. 二叉树的中序遍历】

每日OJ —— 94. 二叉树的中序遍历 1.题目&#xff1a;94. 二叉树的中序遍历2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;94. 二叉树的中序遍历 2.解法 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间&#xff0c;这样的效率太低…

OWASP安全练习靶场juice shop-更新中

Juice Shop是用Node.js&#xff0c;Express和Angular编写的。这是第一个 完全用 JavaScript 编写的应用程序&#xff0c;列在 OWASP VWA 目录中。 该应用程序包含大量不同的黑客挑战 用户应该利用底层的困难 漏洞。黑客攻击进度在记分板上跟踪。 找到这个记分牌实际上是&#…

【PyTorch】tensorboardX的安装和使用

文章目录 1. tensorboardX的安装2. tensorboardX的使用 tensorboardX是一种能将训练过程可视化的工具 1. tensorboardX的安装 安装命令&#xff1a; pip install tensorboardXVSCode集成了TensorBoard支持&#xff0c;不过事先要安装torch-tb-profiler&#xff0c;安装命令&…

文件管理和操作工具Path Finder mac功能介绍

Path Finder mac是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder mac软件功能 - 文件浏览&#xff1a;可以快速浏览文…

如何购买华为云服务器

华为云是华为推出的云计算服务平台&#xff0c;旨在为企业和个人提供全面的云端解决方案。它提供了包括计算、存储、数据库、人工智能、大数据、安全等多种云服务&#xff0c;覆盖了基础设施、平台和软件级别的需求。华为云致力于构建安全可信赖的云计算基础设施&#xff0c;以…

vite初识

Vite是伴随着Vue3正式版一起发布的&#xff0c;最开始Vite 1.0的版本是为Vue3服务的&#xff0c;并不是跨框架的。之后半年时间左右&#xff0c;出现了Vite 2.0版本&#xff0c;Vite 2.0真正脱离了和Vue3的强关联&#xff0c;以插件的方式&#xff0c;可以集成到目前流行的主流…

【每日一题】到达首都的最少油耗

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心深搜 写在最后 Tag 【递归/深度优先搜索】【树】【2023-12-05】 题目来源 2477. 到达首都的最少油耗 题目解读 每个城市都有一位代表需要前往城市 0 进行开会。每个城市都有一辆座位数为 seats 的汽车&#xff0…

2023.12.4 关于 Spring Boot 统一异常处理

目录 引言 统一异常处理 异常全部监测 引言 将异常处理逻辑集中到一个地方&#xff0c;可以避免在每个控制器或业务逻辑中都编写相似的异常处理代码&#xff0c;这降低了代码的冗余&#xff0c;提高了代码的可维护性统一的异常处理使得调试和维护变得更加容易&#xff0c;通…

Python智能语音识别语翻译平台|项目后端搭建

Python程序设计基础&#xff0c;第三方库Django、requests、hashlib、pyttsx3等的使用&#xff0c;百度API语音识别业务接口、文本朗读业务接口、翻译业务接口的传入。 01、任务实现步骤 任务描述&#xff1a;本任务利用Django框架搭建智能语音识别与翻译平台的后端&#xff0…

leetcode:统计感冒序列的数目【数学题:组合数含逆元模版】

1. 题目截图 2.题目分析 需要把其分为多个段进行填充 长为k的段&#xff0c;从两端往中间填充的方案数有2 ** (k - 1)种 组合数就是选哪几个数填哪几个段即可 3.组合数含逆元模版 MOD 1_000_000_007 MX 100_000# 组合数模板 fac [0] * MX fac[0] 1 for i in range(1, MX…