计算机网络 错误检测
当数据从一个设备传输到另一个设备时,系统无法保证设备接收到的数据是否与另一个设备传输的数据完全相同。错误是指接收方接收到的消息与发送方传输的消息不完全相同的情况。
错误类型
错误可以分为两类:
- 单比特错误
- 突发错误
单比特错误:
一个给定数据单元中的唯一一个比特从1改变为0,或从0改变为1。
在上图中,发送的消息存在单比特错误,即将0比特改为1。
单比特错误 在串行数据传输中不太常见。例如,发送方以10 Mbps的速度发送数据,这意味着比特只持续1微秒,发生单比特错误需要的噪声必须超过1微秒。
单比特错误主要发生在并行数据传输中。例如,如果使用八根线来发送一个字节的八个比特,如果其中一根线有噪声,则每个字节会有一个比特错误。
突发错误:
将两个或更多比特从0变为1或从1变为0的错误称为突发错误。
突发错误是从第一个错误比特到最后一个错误比特确定的。
串行数据传输中,突发错误的持续时间大于单比特的持续时间。
突发错误最有可能发生在串行数据传输中。
受影响位的数量取决于噪声的持续时间和数据传输速率。
错误检测技术:
最流行的错误检测技术包括:
- 单奇偶校验
- 二维奇偶校验
- 校验和
- 循环冗余检验
单奇偶校验
- 单奇偶校验是一种简单且廉价的错误检测机制。
- 在这种技术中,多余的位,也称为奇偶校验位,被添加在数据单元的末尾,以使1的数量变为偶数。因此,传输的总位数为9位。
- 如果1的位数为奇数,则在数据单元的末尾附加奇偶校验位1;如果1的位数为偶数,则在数据单元的末尾附加奇偶校验位0。
- 在接收端,从接收到的数据位计算奇偶校验位,并与接收到的奇偶校验位进行比较。
- 这种技术生成的1的总数为偶数,因此被称为偶奇校验。
单奇偶校验的缺点
- 它只能检测到非常罕见的单比特错误。
- 如果两个比特被互换,它无法检测到错误。
二维奇偶校验
- 通过使用 二维奇偶校验 可以提高性能,该方法以表格的形式组织数据。
- 对每一行计算奇偶校验位,这与单奇偶校验相当。
- 在二维奇偶校验中,一块比特位被划分成行,并且冗余行位被添加到整个块中。
- 在接收端,将校验位与接收到的数据计算出的校验位进行比较。
2D奇偶校验的缺点
- 如果一个数据单元中的两个位都被破坏,而另一个数据单元中相同位置的两个位也被破坏,那么2D奇偶校验器将无法检测到错误。
- 在某些情况下,这种技术无法检测到4位或更多的错误。
校验和
校验和是一种基于冗余概念的错误检测技术。
它分为两个部分:
校验和生成器
在发送端生成校验和。校验和生成器将数据分为相等长度为n位的片段,并使用补数算术将所有这些片段相加。总和取反并附加到原始数据上,称为校验和字段。扩展的数据通过网络传输。
假设L是数据片段的总和,则校验和为?L。
校验和检查器
接收方对校验和进行验证。接收方将传入的数据以每个n位进行等分,并将所有这些分段相加,然后对这个和进行补码。如果补码为零,则接受数据,否则拒绝数据。
循环冗余校验 (CRC)
CRC是一种用于确定错误的冗余误差技术。
以下是CRC用于错误检测的步骤:
- 在CRC技术中,将n个0串附加到数据单元上,其中n的数量小于预定数中的位数,即除数,为n+1位。
- 其次,使用二进制除法进行除数的新扩展数据。该除法生成的余数称为CRC余数。
- 第三,CRC余数替换原始数据末尾的附加0。这个新生成的单位被发送给接收方。
- 接收器接收数据后跟随CRC余数。接收器将这个整个单元视为单个单元,并且它被使用用于找到CRC余数的相同除数进行划分。
如果这个除法的结果是零,这意味着它没有错误,接收器将接受数据。
如果这个除法的结果不是零,这意味着数据包含错误。因此,数据被丢弃。
让我们通过一个例子来理解这个概念:
假设原始数据是11100,除数是1001。
CRC生成器
- CRC生成器使用模2除法。首先,在数据的末尾添加三个零,因为除数的长度为4,我们知道要添加的零串的长度总是比除数的长度少1。
- 现在,字符串变为11100000,然后将结果字符串除以除数1001。
- 二进制除法生成的余数称为CRC余数。生成的CRC余数的值为111。
- CRC余数替换数据单元末尾添加的零串,最终字符串将是11100111,发送到网络中。
CRC校验器
- CRC校验器的功能类似于CRC生成器。
- 当接收端接收到字符串11100111时,CRC校验器执行模2除法。
- 字符串被相同的除数1001除开。
- 在这种情况下,CRC校验器生成的余数为零。因此,数据被接受。