计算机网络——差错检测

365 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

差错检测

  • 实际的通信链路都是不理想的,比特在传输过程中可能会产生差错:1可能会变成0而0也可能变成1。这种称之为比特差错
  • 在一段时间内,传输错误的比特占所传输比特总数的比特率称之为误码率(Bit Error Rate)
    image.png

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的问题之一。

以太网的v2的MAC帧(最大长度为1518字节)
6字节6字节2字节46-1500字节4字节
目的地址源地址类型数据载荷FCS

image.png

  • 奇偶校验
    在待发送的数据后面添加一位奇偶校验位,使整个数据(包括在添加的校验位之内)中"1"的个数为奇数(奇数验)或偶数校验
    如果有奇数个位发生误码,则奇偶性发生变化,可以检测出误码
    如果有偶数个位发生误码,则奇偶性不发生改变,不能检测出误码

    奇校验——传输过程中产生1位误码 "1"数量的奇性改变,可检出错误 奇校验
    奇校验——传输过程中产生2位误码 "1"数量的奇性不改变,无法检出错误 奇校验
    偶校验——传输过程中产生1位误码 "1"数量的偶性改变,无法检出错误 偶校验
    偶校验——传输过程中产生2位误码 "1"数量的奇性不改变,无法检出错误 偶校验

循环冗余校验CRC

  • 收到双方约定好生成一个多项式G(x)
  • 发送基于待发送的数据和生成多项式计算错检测(冗余码),将其添加待传输数据的后面一起传输;
  • 接收方通过生成多项式来计算收到的数据是否产生了误码
    生成多项式举例

G(x) = x^4+ x2 + x + 1
=1 * x^4 +0 * x^3 +1 * x^2 + 1 * x^1 + 1 * x^0

生成多项式各项系数构成的比特串为:10111

差错检测

  • 检错码 只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误
  • 要想纠正错误的差错,可以使用冗余信息更多的纠错码来前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
  • 循环冗余校验CRC有很好的检错能力(漏检率非常低)虽热计算比较复杂,但非常易于用硬件实现,因此被广泛用于数据链路层