文章目录
1. 误码的相关概念
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错):
- 比特1可能变成比特0
- 比特0可能变成比特1
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为 误码率(Bit Error Rate,BER)。
提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
使用 差错检测技术 来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
2. 奇偶校验
2.1 定义
奇校验是在待发送的数据后面 添加1个校验位,使得添加该校验位后的整个数据中 比特1的个数为奇数。
偶校验是在待发送的数据后面 添加1个校验位,使得添加该校验位后的整个数据中 比特1的个数为偶数。
通过上图可以看到, 如果采用奇校验, 产生2位误码(数据位和校验位各1位), “1”数量的奇性不改变,不能检出错误。
通过上图可以看到, 采用偶校验, 产生2位误码(数据位和校验位各1位), “1”数量的偶性不改变,不能检出错误。
在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码。
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)。
在实际使用时,奇偶校验又可分为垂直奇偶校验、水平奇偶校验以及水平垂直奇偶校验。
2.2 奇偶校验在实践中的应用
尽管奇偶校验有其局限性,但它在某些场景中仍然有实际应用,主要原因包括其实现简单和计算开销低。以下是一些常见的应用场景:
内存系统:
在早期的计算机内存中,奇偶校验被广泛用于检测和纠正单比特错误。现代计算机内存通常使用更复杂的错误检测和纠正技术(如ECC内存),但奇偶校验仍然被用于一些简单的内存保护场景中。
通信协议:
一些简单的通信协议(尤其是在嵌入式系统中)使用奇偶校验来检测传输中的错误。这种方法对实现简单,适合资源受限的环境。
数据存储:
在一些简化的数据存储系统中,奇偶校验可以作为初步的错误检测手段。它通常与其他更复杂的错误检测和纠正机制一起使用。
数据传输:
在某些网络通信中,奇偶校验用作额外的错误检测手段,尤其是在需要快速检测数据错误但不要求高可靠性的应用中。
3. 循环冗余校验
数据链路层广泛使用 漏检率极低 的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。
3.1 循环冗余校验CRC的基本思想
- 收发双方约定好一个生成多项式G(X)。
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。
- 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
3.2 发送方CRC操作
3.3 接受方CRC操作
举例
注意:
奇偶校验 循环冗余校验等差错检验技术, 只能检测出传输过程中出现了差错, 但并不能定位错误, 因此无法纠正错误.
要想纠正传输中的差错, 可以使用冗余信息更多的纠错码(例如海明码) 进行前向纠错. 但纠错码开销比较大, 在计算机网络中较少使用.
在计算机网络中, 通常采用检错重传方式来纠正传输中的差错, 或者仅仅丢弃检测到差错的桢, 这取决于数据链路层向上层提供的是可靠传输服务还是不可靠传输服务.
=循环冗余校验CRC具有很好的检错能力 (漏检率极低), 虽然计算比较复杂, 但 非常易于用硬件实现, 因此被广泛应用于数据链路层.
4. 习题
【CRC举例1】 待发送的数据为101001,生成多项式为G(X)= X^3+ X^2+1,计算冗余码。
【CRC举例2】 接收到的信息为101101001,生成多项式为G(X)= X^3+ X^2+1,判断传输是否误码?
5. 解答
【CRC举例1】
【CRC举例2】