计算机网络数据链路层:检错编码

这一节的内容是围绕“错误”来进行讲解的。计算机链路通信中的错误主要是由噪声引起的。差错从来源上分为全局性差错和局部性差错。全局性差错是由计算机系统本身的电气特性引起的热噪声带来的,它在信道中固定存在而且固有,所以对于全局性差错的解决办法就是尽量的扩大信噪比,利用大量有效信息制造“人海战术”,将噪声对信息传输的干扰降到最低。局部性差错来自于外界的冲击、干扰形成的冲击噪声,这就需要利用编码技术来解决。

我们既然要用编码技术解决差错,那就要了解“究竟是什么出错了”这个最基本的问题。差错从形式上分为位错和帧错。所谓位错,就是传输的最基本的比特位”0“和”1“发生了错误。(即0变成1或者1变成0)而由比特位构成的数据帧又可能出现丢失、重复、失序的错误。

而对于数据链路层来说,检错主要是利用冗余编码的思想来实现。所谓冗余编码,指的是在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某种规则的码字以后再发送,当需要发送的有效数据位发生变化时,相应的冗余位也发生变化,遵从码字不变的规则。接收端根据接到的码字是否符合原规则,从而判断是否出错。

打个比方:小明在淘宝上买了6罐茶叶,那么商家在发货的时候一般要在快递包裹上标明是6罐茶叶。等小明收到包裹后,看见包裹上写着“6罐茶叶”,然后打开包裹后看见里面有6罐茶叶才能确认收到了完整的货物并给予五星好评,如果打开包裹发现不足6罐(也有可能不只6罐,这个时候要看小明的人品)那么商家或者物流方就可能出现了问题,就有可能收到小明的投诉。在这里快递包裹上的“6罐”就可以看成是冗余码,包裹里的货物必须遵守这个规则。

下面我们来看看具体的检错码。

1、奇偶校验码

在奇偶校验码中,一段n位的信息码字是由n-1位的信息位和1位校验位组成的。在这个校验位上,具体是“0”还是“1”要看系统要利用的是奇校验还是偶校验。如果采用奇校验,那么校验位上的数字必须保证这段信息码字中“1”的个数是奇数。同理如果采用偶检验码,那么检验位上的数字必须保证这段信息码字中的“1”的个数是偶数。

举个例子:如果发送的信息位为1100101这7位,那么如果我们采用奇校验码,那么必须在第一位添上校验码“1”,使这段信息码“1”的个数为5——奇数。所以如果在传输的过程中出现位错,另“1”的个数成为偶数个,那么接收端就可以判断在传输的过程中出现了错误。所以在这个例子中我们可以看出奇偶校验码的一个缺陷:检错能力只有50%。也就是说在这个例子中,如果出现位错后,“1”的个数又恰好为奇数,那么这个时候再采用奇校验码就根本不能判断出差错了。所以对于奇校验码来说,只能检测错误码中“1”的个数为“2、4、6……”等偶数情况,而对于“1、3、5……”等奇数情况则不好判断。反之同理,偶校验码也是如此。

2、CRC循环冗余码

循环冗余码很简单,最关键的是生成多项式。生成多项式存在于发送端和接收端,是生成冗余位的重要手段。其工作机制如下:

在发送端,原数据除以生成多项式得到商和余项,这个余项就作为冗余码自动添加到原数据上从而变成传输的数据。接收端得到传输数据后,将其除以生成多项式,如果余项为零,则可以判断是正确的传输。

在数据链路层仅仅使用循环冗余检验CRC差错检验技术,只能做到对帧的无差错接收,凡是接收端数据链路层接收到的帧,我们都可以100%相信它在传输过程中没有出现差错。接收端也曾接受过一些有差错的帧,但是在判断出有差错以后会自动丢弃。而我们说可靠传输是指的发送端发什么,接收端就得接什么。所以CRC只能实现对帧的无差错接收,要想做到可靠传输,还要考虑将那些出了错的帧改成正确的,这就涉及到我们接下来要讲到的纠错编码。

欲知后事如何,请听下回分解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值