链路层中的差错检测和纠正技术--链路层

差错检测和纠正技术

我们知道,数据报在链路层中传输时,可能会出现比特损失(如0变成1,1变成0),我们当然不想要传输错误的数据报,因此我们需要对数据进行差错检测和纠正

差错检测一般和纠正同时实现,差错检测技术有以下几种

  • 奇偶校验(用来描述差错纠正以及背后的思想)
  • 检验和方法(通常更多的应用于运输层)
  • 循环冗杂检测(通常更多的应用在适配器的链路层)

纠正的作用:当我们一个数据报出错时,一般会要求重发,而发送方重发的开始需要收到一个NAK或者超时,而纠正技术就能减少这段时延,这样就能显著提高数据传输的速度


奇偶校验

奇偶校验基本思想:我们假设数据D有d个比特,如果我们用的是偶校验,这在这d个比特后再加一个校验比特(0或1),让这d+1个比特中1的个数为偶数个

例:

D: 1 1 0 1
偶校验:校验比特:1
奇校验:校验比特:0

校验比特一般放在一个单独的字段

在偶检验方案中,如果接收方检查到接受到的比特中1的个数为奇数个,这说明出现了奇数个比特错误

显然,这种校验是不够健壮的,因为当出现偶数个时,他就没办法检测出来了,但是现在先不考虑更复杂的,我们先用这个理解一个纠正技术

二维奇偶校验:我们将数据D中的比特扩展为一个二维的矩阵,然后每一行每一列计算校验值

例:

发送的数据D: 101011111001110
扩展为二维矩阵           
1 0 1 0 1 | 1
1 1 1 1 0 | 0
0 1 1 1 0 | 1
-----------
0 0 1 0 1   0
接受的数据D: 101011011001110
扩展为二维矩阵
1 0 1 0 1 | 1
1 0 1 1 0 | 0
0 1 1 1 0 | 1
-----------
0 0 1 0 1   0

我们观察一下,是不是就可以发现 第二行第二列位置(2,2) 的比特出错了,这时就可以纠正该 比特


校验和方法

校验和方法基本思想:d中的比特被当错k比特的数据处理,校验和就是这些这些k比特数据的和

例:

D中:
0110011001100000
0101010101010101
1000111100001100
前两个的和为
0110011001100000
0101010101010101
----------------
1011101110110101
前两个的和于第三个相加的和
1011101110110101
1000111100001100
----------------
0100101011000001

将结果进行反码运算,得到校验和=1011010100111110,当接收方将其接受到的数据的和跟校验和相加的结果应该为1111111111111111,如果结果有一个比特不为1,说明出现了比特错误


循环冗杂检测

现在计算机网络中广泛应用的差错检测技术基于循环冗杂检测编码(CRC),CRC编码也称为多项式编码,因为该编码能够将要发送的比特串看作为系数为0和1一个多项式,对比特串的操作被称为多项式算术

CRC基本思想:d比特的数据D,发送节点要将其发送给接收节点,它们之间必须协商一个r+1比特模式,我们将其表示为G,我们将要求G的最高位有效比特是1,CRC的关键思想在于,一个d比特的数据加上一个r比特的R,得到的d+r比特模式用摸2除法恰好能被G整除,用CRC进行差错检测的原理很简单:接收方用G去除接收到的d+r比特,如果余数为非零,则表示数据出错了

现在问题就是如何计算出R,因为R是发送方附加上去的r个比特

我们前面可以看到,加上R之后,接收方使用G除于D余数为0,因此R满足:

D * 2^r XOR R = nG  
//*2^r表示左移r位,XOR R表示将R"拷贝"上去(XOR的特点,于0XOR后的值等于自身)

我们对两边都进行R异或,得到

D * 2^r = nG XOR R

我们可以看到用G/D*2^r余数刚好是R,因此我们可以这样来计算R

R = remainder(D*2^r/G) // 也就是D*2^r/G的余数

我们看一个例子:

D=101110, d=6, G=1001, r=3

t6hApt.png

上面的计算为模2除法

简单介绍一下模2除法,因为模2除法不借位,因此,图中看到的操作其实都可以看作为异或计算,当被除数的位数小于除数(G)时,就结束计算,因此我们可以看到余数为0 1 1,这个就是R,发送方在发送D时会附加3个比特R(0 1 1),这样接收方用G除于D时余数就应该为0,当余数不为0时,说明出现了比特错误(只要有一个位置的比特出错,余数就不为0

猜你喜欢

转载自blog.csdn.net/jump_into_zehe/article/details/106605804