差错检测和纠错技术

一、差错检测和纠错技术简单介绍

本篇讲的差错检测和纠错技术主要是针对比特错误。
对一个节点发送到一个相邻节点的帧,检测是否出现比特差错,并纠正。相关技术有很多,下图为差错检测和纠正的过程。
《差错检测和纠错技术》
在发送节点,数据D附加若干差错检测和纠错位EDC,一起发送到链路。数据D包括网络层传来的数据报,以及链路级寻址信息、序列号和其他字段。保护范围包括数据D的所有字段。
接收节点接收比特序列D’和EDC’。接收方利用收到的D’按照规则来计算差错校验位EDC,看计算的EDC是否与收到的EDC’相同,相同则无错误,不相同则有错误。
这里需要说明一下差错检测技术和纠正技术不能保证接收方检测到所有的比特差错,即可能出现未检测到的比特差错,而接收方并未发现。所有我们需要选择一个合适的差错检测方案使未检测到的情况发生的概率很小即可。
差错检测和纠错技术越好,越复杂,开销更大。

二、三种主要的差错检测技术

(1)奇偶校验:最基本的方法。
(2)检查和方法:常用于运输层。
(3)循环冗余检测:常用于链路层。

1、奇偶校验

1.1、一比特奇偶校验

(1)发送方:
在要发送的信息D(d位)后面附加一个奇偶校验位,发送数据中1的个数是奇数则位奇校验,否则是偶校验。
《差错检测和纠错技术》
如上图所示,假设发送数据进行偶校验,则需要在校验位补充1以凑成偶数个1。 然后将d+1位数据一起传输发送。
(2)接收方:检测收到的信息(d+1位)中“1”的个数。
若是使用偶校验:当发现奇数个1时表示至少有一个比特发生差错(奇数个比特差错)。
若是使用奇校验:当发现偶数个1时表示至少有一个比特发生差错。
我们可以看到不管是奇校验还是偶校验都只能查出任意奇数个错误,不能发现偶数个错误。
若比特差错概率很小,差错独立发生,一比特奇偶校验可满足要求。 若差错集中在一起“突发”,一帧中未检测到的差错的概率达到50%。

1.2、二维奇偶校验

基本思想:
首先将要传的信息D(d比特)划分为i行j列,即i个组,每组j位。其次,对每行和每列分别计算奇偶校验值。最后结果的i+j+1个奇偶比特构成了帧的差错检测比特。
《差错检测和纠错技术》
如上图,假设需要发送的数据是10101 11110 01110共15比特。划分为3组,每组5个比特。分别进行、列偶校验,校验码如上图。假设在传输过程中有一个比特错误,例如第二行第二列的1变为0。在接收方进行校验时会发现第二行和第二列的校验码不对,这样就会发现是第二行第二列的数据发生了错误。
因此二维奇偶校验可以检测并纠正单个比特差错,可以检测但不能纠正分组中任意两个比特的差错。

2、检查和方法

2.1、过程

(1)发送方:首先在发送方将数据的每两个字节当作一个16位的整数,可分成若干整数。然后将所有16位的整数求和,对得到的和逐位取反,作为检查和,放在报文段首部,一起发送。
(2)接收方:对接收到的信息(包括检查和)按与发送方相同的方法求和。若结果全1则表示收到的数据无差错,若结果中有0表示收到的数据出现差错。
注意:当数字作加法时,最高位的进位要回加到结果中。
如下例子:
《差错检测和纠错技术》

2.2、检查和特点

(1)分组开销小:检查和位数比较少。
(2)差错检测能力弱。
(3)适用于运输层,因为差错检测用软件实现,检查方法简单、快速。
(4)链路层的差错检测由适配器中专用的硬件实现,采用更强的循环冗余检测方法。

3、循环冗余检测(CRC)

3.1、检测过程

这种检测方法在计算机网络中广泛采用。
循环冗余检测编码:即多项式编码,把要发送的比特串看作为系数是0或1的一个多项式,对比特串的操作看作为多项式运算。
例如10111可看作x 4 ^4 4+x 2 ^2 2+x+1。
(1)发送方:首先在发送方计算出一个r位附加比特R,添加到D的后面产生DR(d+r)比特。DR能被生成多项式G模2运算整除,一起发送。
《差错检测和纠错技术》
(2)接收方:用生成多项式G去除接收到的DR(d+r)比特。若余数非0则表明传输发生差错;若余数为0表示传输正确,去掉尾部r位,得所需数据D。

3.2、模2计算

模2计算:
加法不进位,减法不借位,即操作数的按位异或(XOR)。
乘法和除法与二进制运算类似,其中加法或减法没有进位或错位。例如乘以2 r ^r r,即比特模式左移r个位置。

3.3、R的计算

计算R的步骤如下:
将数据D后面添加r个0,除以给定的生成多项式G,所得余数即为R(r位),r表示CRC编码的位数。
设D=101110,d=6,G(生成多项式)=1001,CRC编码是3比特即生成多项式位数减1。r=3。计算过程为:
《差错检测和纠错技术》
最后算出的余数是011,即R。
因此实际传输的数据形式是:101110011

3.4、循环冗余码CRC的特点

生成多项式G的选择:有8、12、16和32比特生成多项式G。其中8比特的CRC用于保护ATM信元首部;32比特的标准CRC-32用于链路级协议。
CRC能检测小于r+1位的突发差错、以及任意个奇数个差错。

    原文作者:心若向阳,何谓悲伤
    原文地址: https://blog.csdn.net/weixin_42374938/article/details/119379403
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞