奇偶校验、crc循环冗余检验

2024-09-01 07:20

本文主要是介绍奇偶校验、crc循环冗余检验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据链路层

链路

从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换点

数据链路

是指把实现通信协议硬件软件加到链路上

数据链路上传输的数据包,称之为

数据链路层是以为单位进行传输和处理数据的

数据链路层的三个重要问题

封装成帧

将数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作称之为封装成帧

在这里插入图片描述

添加帧头帧尾的目的,都是为了以帧为单元传送数据,为了实现数据链路层的功能。

在这里插入图片描述

帧头和帧尾的作用之一就是帧定界

从数据链路层开始,将以太网的数据层封装好MAC帧后,将其交付给物理层,物理层在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送,前导码中的前七个字节为同步码,作用为使接收方的时钟同步,之后的一个字节为帧开始定界符,表明其后面跟随的为MAC帧,另外以太网规定了帧间时间间隔为96比特的发送时间。因此,MAC帧并不需要帧 结束定界符。

透明传输

是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在

数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符

处理方式,通过识别每个帧定界符,对除去第一个以及最后一个帧定界符进行添加转义字符

  • 对于面向字节的链路 使用字节填充的方法实现透明传输

  • 对于面向比特的链路 使用比特填充的方式实现透明传输

为了提高帧的传输效率,应该使帧的数据部分的长度尽可能的大一些

考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的最大长度,即为最大传送单元MTU

差错检错

比特差错,再传输中1变成0,0变成1

误码率

传输错误的比特占所传输总比特总数的比率称之为误码率BER(Bit error rate)

使用差错检错码来检测数据在传输过程之中是否发生了比特差错,是数据链路层的重要问题

eg:MAC帧和PPP帧中都存在一个4字节的FCS字段,目的是为了检测帧在传输过程中是否产生了误码。

奇偶校验

在待发送的数据后面添加一位奇偶校验位,使整个数据中的“1”的个数为奇数或者偶数
在这里插入图片描述

由于这种的误差太大,因此一般不采用。

循环冗余校验CRC(Cyclic Redundancy Check)

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

在这里插入图片描述

CRC算法要求生成多项式必须包含最低次项

例子:

在这里插入图片描述

进行除法的运算的时候为异或运算

在这里插入图片描述

[!warning]

  • 检错码只能检测错误,不能纠正错误
  • 纠正错误可使用冗余信息更多的纠错码进行前向纠错,但,纠错码的开销过大,因此在计算机网络中较少使用
  • CRC有很好的检测能力(漏检率低),虽然计算复杂,但是易用硬件实现,因此多用于数据链路层

可靠传输

可靠传输的基本概念

当产生误码的时候,

  • 对于不可靠传输,会丢弃存在误码的帧,其他什么也不做
  • 对于可靠传输服务, 会实现发送端发送什么,接收端就收到什么

[!warning]

在一般的情况下,有线链路的误码率比较低,为了减小开销,并不会要求数据链路层提供可靠服务

但是使用的为无线链路的时候,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务

传输差错

比特差错只是传输差错的一种。

从整个计算机网络体系结构来看:传输差错总共包含三种,分组丢失分组失序分组重复(在这之中,将帧变为了分组)

上述三种差错,一般不会出现在数据链路层之中,而是出现其上层。

可靠传输服务并不局限于数据链路层,其他层均可实现可靠传输

eg:802.11无线局域网要求数据链路层实现可靠传输

以太网不要求数据链路层实现可靠传输

ip向上层提供的是无连接、不可靠的传输服务

TCP向上层提供的是面向连接的可靠传输服务

UDP向上层提供无连接、不可靠传输服务

可靠传输的实现复杂,开销大,是否使用取决于应用需求

以下三种的可靠传输实现机制的基本原理并不局限于数据链路层,可以应用到计算机网络体系结构中的各层协议之中。

停止等待协议

具体实现过程

第一种错误,传输数据data丢失解决办法

在这里插入图片描述

第二种错误 : ACK丢失,导致分组重复的问题

在这里插入图片描述

第三种错误 : ACK时间太长导致的数据重复确认,

解决办法:通过对ACK进行编号

停止—等待协议的信道利用率

从下面这个例子进行理解

在这里插入图片描述

由于Ta远小于Td一般可与忽略

  • 当往返时延RTT远大于数据帧发送时延Td的时候(例如使用卫星电路)信道利用率极低。

  • 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低

回退N帧协议GBN(GO-BACK-N)

  1. 采用3个比特给分组编序,即序号为0~7
  2. 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=5
  3. 接受窗口的尺寸WR的取值:WR=1;

当窗口的值超过其大小的时候,接收方无法分辨新的、旧的分组

累计确认

接收方不一定要对收到的数据分组逐个发送确认而是可以在收到几个数据分组之后,对按序到达的最后一个数据分组发送确认

ACKN表示序号为n及以前的所有数据分组都已正确接收

  1. eg: 发送ACK1说明对1及其以前的数据都存储完成
  2. 发送ACK4说明对4及其以前的数据都存接收完成
  3. 因此即使ACK1丢失,只要ACK4也能够到达,发送方依旧不需要重传

优缺点

  • 减小接收方的开销

  • 减少对网络资源的占用

缺点:不能向发送方及时放映出接收方已经正确接受的数据分组

选择重传协议SR

  1. 采用3个比特给分组编序,即序号为0~7
  2. 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=4
  3. 接受窗口的尺寸WR的取值:WR=WT=1;

这篇关于奇偶校验、crc循环冗余检验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126301

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

2024年高教社杯数学建模国赛最后一步——结果检验-事关最终奖项

2024年国赛已经来到了最后一天,有必要去给大家讲解一下,我们不需要过多的去关注模型的结果,因为模型的结果的分值设定项最多不到20分。但是如果大家真的非常关注的话,那有必要给大家讲解一下论文结果相关的问题。很多的论文,上至国赛优秀论文下至不获奖的论文并不是所有的论文都可以进行完整的复现求解,大部分数模论文都为存在一个灰色地带。         白色地带即认为所有的代码均可运行、公开

Spring是如何解决循环依赖?

现象解释: 在Spring框架中,循环依赖(Circular Dependency)是指两个或多个Bean之间相互依赖,形成了一个循环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。Spring通过多种机制解决循环依赖问题,具体来说,主要有以下几种方式: 1.三级缓存机制 Spring容器在实例化Bean时使用了三级缓存来解决循环依赖,主要涉及三个缓存结构: 一级

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html

checksum 与 CRC的不同之处

实际应用: CRC:在外发电压时,在报文的最后两个字节做了CRC计算。 checksum : 在按键状态外发,在报文的最后一个字节做了checksum计算。 它们的共同之处:目的都是为了数据的错误检测功能。 只是在算法的复杂度上有较大的区别: 总的来说,CRC算法更复杂,可检测的错误也比较丰富。 CRC与checksum的计算方式都是固定的吗? 在实际应用中,并没有通知对方,所用

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例,讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报,并指定循环次数、播报内容。由于通知终端采用TTS语音合成技术,所以本次案例中无需预先录制音频。 代码实战 为了通过JavaScript调用博灵语音通知终端,实现HT