计算机网络之差错控制(奇偶校验、海明校验、循环冗余校验)

差错控制

由于数据通信系统传输特性的不理想和外部干扰的存在,传输中出现差错是不可避免的。
差错控制的目的:确保所有的帧按顺序正确递交到数据链路层用户(网络层实体)。
差错的分类:随机差错(随机的、单个的),突发差错(成片的、连续的)
差错控制的原理:在发送的数据码元序列中加入监督位,使监督位和数据位之间存在某种约束关系;在接收端检测约束关系是否被破坏从而查错,甚至可以纠错。
检错码:可以发现错误,但不能纠正错误。
纠错码:可以自动纠正错误。
在这里插入图片描述
码间距离(d) :两个码字的对应位取值不同的个数。
汉明距离(d0) :一个有效编码集中,任意两个码字的码间距离的最小值。即一组编码中的最小码距。
如果要能检测 e 个差错,则编码集的汉明距离至少为 e + 1; 如果要能纠正 t 个差错,则编码集的汉明距离至少为 2 t + 1; 如果要能检测 e 个差错,同时能纠正 t 个差错( e > t ) ,则编码集的汉明距离至少为 e + t + 1;
检错码:循环冗余码、奇偶校验码
纠错码:汉明码

差错控制的几种编码

奇偶校验码

奇偶校验码是在数据码后附加一个校验位,使构成的码组中“1”的个数为奇数(奇校验)或偶数(偶校验)。接收端收到这组二进制数据后,则校验“1”的个数是否为奇数(偶数),从而确定传输代码的正确性。

水平奇偶校验

在每一行数据的最后加上一个校验位,使信息位与校验位处于同一行。

垂直奇偶校验

把数据分成若干组,一组数据排成一列,每一列后面加一个校验位,针对每一列采用奇校验或偶校验,最后数据列向传输。
例:
有32位数据10100101 00110110 11001100 10101011
垂直奇校验
1011
0010
1101
0100
0011
1110
0101
1001
1110 校验位

二维奇偶校验码

就是同时用水平校验和垂直校验。

接收端收到这组二进制数据后,则校验“1”的个数是否为奇数(偶数),从而确定传输代码的正确性。
特点:奇偶校验码只能检测出奇数个错码,而不能检测出偶数个错码,更不能纠错。奇偶校验码检错能力不高,但易于实现。

海明校验码

详细步骤:
1.确定校验位个数
核心公式:2^r ≥k+r+1 ,(其中r代表校验个数,k表示数据位数)
(重要!)从公式带入计算可得一张表:
在这里插入图片描述
2.确定校验位的位置
核心:校验码Pi 必须是在2的n次方位置,即只能放在H1,H2,H4,H8…
注意:这里指的位置都是从右向左排序,即:…H5 H4 H3 H2 H1
以下以4位信息码为例进行编码。
信息码组:1101 -----即: D3 D2 D1 D0 = 1 1 0 1
根据公式:2^r ≥k+r+1(或者表)得校验位 r=3,即校验位为 P3 P2 P1。
又因为上述Pi 只能放在2的n次方的位置,所以 P1插入H1,P2插入H2,P3插入H4。
信息码填入剩下的位置。
即:D0为H3,D1为H5,D2为H6,D3为H7
整理可得: H7 H6 H5 H4 H3 H2 H1
= D3 D2 D1 P3 D0 P2 P1
代入数字 = 1 1 0 P3 1 P2 P1
3.计算校验位
核心:通过数据位的下标可分解为几个校验位的下标之和,例如H7=H1+H2+H4;H6=H2+H4;H5=H1+H4;H3=H2+H1。
可得:P1(H1) = H3 ⊕ H5 ⊕ H7 (⊕表示异或,即:与H1有关的信息码进行异或)
P2(H2) = H3 ⊕ H6 ⊕ H7
P3(H4) = H5 ⊕ H6 ⊕ H7
计算可得:P1 = 0,P2 = 1,P3 = 0
所以:最终海明码: H7 H6 H5 H4 H3 H2 H1 = 1 1 0 0 1 1 0
4.检错和纠错
设检测位G1,G2,G3:
则有:G1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;
G2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;
G3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;
当校验时得到G3 G2 G1 值皆为0则数据无误,若G3 G2 G1不全为0说明数据传输有误,且其十进制指出了错误发生的位置。
例如:G3 G2 G1 = 101,其十进制为 5 ,即:H5 发生了错误,H5的位置为D1,则说明D1传输错误,则将D1的位置的二进制数取反,即可纠错。
特点:具有纠正一位错误的能力。

循环冗余码

码多项式:(n,k)循环码中(n是数据位+监督位之后的位数,k是数据位位数),为了便于描述与计算,经常使用 n-1 次 码多项式来表示码字,码字 A =[an-1 an-2 … a1 a0 ],它对应的码多项式为:
在这里插入图片描述
CRC 算法的基本思想是将传输的数据当做一个位数很长的数,将这个数除以生成多项式,得到的余数作为校验数据附加到原数据后面。
以一个题目为例:设待校验的数据为:D8~D1 = 10101011,若采用CRC,且生成多项式为 10011。这里要注意题目中的一个表述——“多项式”,该题目中写作“10011”,在有的题目中往往写作“x^4+x+1”。
首先,在数据位后加生成多项式最高幂次个0,比如这里的多项式最高次项为x^4,那就在数据位后加四个0,变成:101010110000,作为被除数
然后,将多项式 10011 作为除数进行模2除法,对应位做异或运算,即相同位结果为0,不同位结果为1,然后将得到的余数作为校验位加到数据位之后则为整个CRC码:10101011 1010。
接收端:用CRC码与多项式 10011 仍然进行模2除法,若余数为0,则说明传输正确,若余数不为0,则说明数据传输中发生了错误。
特点:这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。一旦检测出差错,就丢弃这个差错的帧。
仅用CRC 差错检测技术只能做到无差错接受(accept)。“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近1的概率认为这些帧在传输过程中没有产生差错”。 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。

CRC与FCS

FCS:在数据后面添加上的冗余码称为帧检验序列。
CRC与FCS的区别:
1.CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
2.FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。

CRC(Cyclic Redundancy Check)校验是一种基于多项式计算的校验方法,用于检测数据传输过程中的错误。它通过将数据与一个固定的生成多项式进行除法运算,并将余数附加到原始数据上形成校验码,接收方在接收到数据后进行相同的除法运算,如果余数为零,则认为数据传输没有错误。 CRC 校验的原理如下: 1. 选择生成多项式:在 CRC 校验中,首先需要选择一个生成多项式。该多项式通常是一个固定的、预先定义好的多项式,例如 CRC-16、CRC-32 等。生成多项式的选择会影响到 CRC 校验的性能检测能力。 2. 将数据进行扩展:在进行 CRC 校验之前,需要将待校验的数据进行扩展,即在数据末尾添加一个固定长度的零序列,这个长度通常与生成多项式的位数相对应。 3. 进行除法运算:将扩展后的数据与生成多项式进行除法运算。除法运算按位进行,从最高位开始,逐位进行异或运算。如果当前位为 1,则进行异或运算;如果当前位为 0,则直接移动到下一位。 4. 得到校验码:除法运算完成后,最后得到的余数就是校验码,它是一个固定长度的二进制序列。将校验码附加到原始数据的末尾,形成最终的校验数据。 接下来是关于汉明距离 CRC 的诊断覆盖率的问题: 汉明距离是指两个等长字符串之间对应位置不同字符的个数。在 CRC 校验中,使用生成多项式来计算校验码,这个过程实际上是对数据进行除法运算,并将余数作为校验码。因此,CRC 校验的诊断覆盖率与生成多项式的性质有关。 通常情况下,生成多项式的位数越高,校验码的长度就越长,从而可以检测到更多的错误。如果两个数据位错的位置之间的距离小于生成多项式的位数,那么 CRC 校验可以检测到这个错误。这就是说,CRC 校验能够检测到汉明距离小于生成多项式位数的错误。 因此,通过比较生成多项式的位数与所需检测的错误之间的汉明距离,可以评估 CRC 校验的诊断覆盖率的高低。如果生成多项式的位数足够大,能够覆盖所需检测的错误的汉明距离,那么 CRC 校验的诊断覆盖率就会较高。反之,如果生成多项式的位数较小,无法检测到所需检测的错误的汉明距离,那么 CRC 校验的诊断覆盖率就会较低。因此,在选择生成多项式时,需要根据具体的应用需求错误模型来进行评估选择,以获得适当的诊断覆盖率。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值