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

差错控制

由于数据通信系统传输特性的不理想和外部干扰的存在,传输中出现差错是不可避免的。
差错控制的目的:确保所有的帧按顺序正确递交到数据链路层用户(网络层实体)。
差错的分类:随机差错(随机的、单个的),突发差错(成片的、连续的)
差错控制的原理:在发送的数据码元序列中加入监督位,使监督位和数据位之间存在某种约束关系;在接收端检测约束关系是否被破坏从而查错,甚至可以纠错。
检错码:可以发现错误,但不能纠正错误。
纠错码:可以自动纠正错误。
在这里插入图片描述
码间距离(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 的唯一方法。

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
差错控制是在计算机网络中解决数据传输过程中出现的差错问题的一种方法。其中有两类常见的差错控制技术:自动重传请求(ARQ)和前向纠错(FEC)。 ARQ方式通过接收端检测出差错后通知发送端重发数据,直到接收到正确的数据为止。这种方式主要依靠重传来纠正差错。 FEC方式则在每个要发送的数据块上附加足够的冗余信息,使得接收方能够推导出发送方实际发送出来的比特串。最常见的纠错编码是海明码,它能够发现双比特错,但只能纠正单比特错。 另外,在差错控制中还可以分为检错编码和纠错编码。检错编码使用奇偶校验码、循环冗余码(CRC)等方法,在数据发送之前附加冗余位构成码字,接收端根据接收到的码字是否符合原规则来判断是否出错。而纠错编码,如海明码,不仅能发现差错,还能确定错误的位置并进行纠正。 综上所述,计算机网络中的差错控制主要包括ARQ和FEC两种方式,并且可以使用检错编码和纠错编码来实现差错控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [计算机网络(18)数据链路层:差错控制奇偶校验码、循环冗余码、海明编码)](https://blog.csdn.net/weixin_40179091/article/details/105951724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [计算机网络(十)-数据链路层-差错控制](https://blog.csdn.net/TxyITxs/article/details/104312664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值