我是靠谱客的博主 开放摩托,最近开发中收集的这篇文章主要介绍计算机网络——数据链路层之差错控制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考链接

  1. CSKAOYAN.COM

差错控制

差错来源

概括来说,传输中的差错都是由于噪声引起的

  1. (全局性)由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。解决方法:提高信噪比来减少或避免干扰

  2. (局部性)外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。解决方法:通常利用编码技术来解决

差错分类

  1. 位错:比特位出错,1变成0,0变成1
  2. 帧错:丢失、重复、失序

差错控制(比特错)

物理层编码VS链路层编码

数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼切斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码技术实现一组二进制比特串在传输过程中是否出现了差错

冗余编码

在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到的码字是否符合原规则,从而判断是否出错

检错编码

奇偶校验码

奇偶校验码包含n-1位信息元和1位校验元。奇校验码中“1”的个数为奇数;偶校验码中“1”的个数为偶数

奇偶校验码只能检查出奇数个比特错误,检错能力为50%

循环冗余码CRC

最终发送的数据:要发送的数据+帧检验序列FCS

计算冗余码:

  1. 加0。假设生成多项式G(x)的阶为r,则加r个0
  2. 模2除法。数据加0后除以多项式,余数为冗余码/FCS/CRC检验码的比特序列

接收端检错过程:
把收到的每一个帧都除以同样的除数,然后检查得到的余数R。

  1. 余数为0,判定这个帧没有差错
  2. 余数不为0,判定这个帧有差错(无法确定到位)

FCS的生成以及接收端CRC检验都是由硬件实现,处理很迅速,因此不会延误数据的传输

纠错编码

海明码

海明码:发现双比特错,纠正单比特错

海明不等式: 2 r ⩾ k + r + 1 2^{r}geqslant k+r+1 2rk+r+1

工作流程:

  1. 确定校验码位数r
    设要发送的数据为:D=101101
    根据海明不等式,满足不等式的最小r为4,即D的海明码应该有6+4=10位,其中原数据6位,校验码4位

  2. 确定校验码和数据的位置
    校验码都放在2的幂的位置,数据则从左到右按序把空填满

  3. 求出校验码的值
    令所有要校验的位异或为0
    P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 ⊕ D 5 = 0 P_{1}oplus D_{1}oplus D_{2}oplus D_{4}oplus D_{5}=0 P1D1D2D4D5=0
    P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 ⊕ D 6 = 0 P_{2}oplus D_{1}oplus D_{3}oplus D_{4}oplus D_{6}=0 P2D1D3D4D6=0
    P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 0 P_{3}oplus D_{2}oplus D_{3}oplus D_{4}=0 P3D2D3D4=0
    P 4 ⊕ D 5 ⊕ D 6 = 0 P_{4}oplus D_{5}oplus D_{6}=0 P4D5D6=0

求解得到 P 1 = 0 , P 2 = 0 , P 3 = 0 , P 4 = 1 P_{1}=0,P_{2}=0,P_{3}=0,P_{4}=1 P1=0,P2=0,P3=0,P4=1

故101101的海明码位0010011101

  1. 检错并纠错
    令所有要检验的位异或运算
    得到的逆序二进制序列,就对应了出错的位置

最后

以上就是开放摩托为你收集整理的计算机网络——数据链路层之差错控制的全部内容,希望文章能够帮你解决计算机网络——数据链路层之差错控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部