数据帧的差错检验
- 奇偶校验:1位奇偶校验是最简单、最基础的校验码
- 简单校验和:主要用于 TCP/IP体系中的网络层和传输层
- 循环冗余校验(CRC):数据链路广泛使用的校验方法
奇偶校验
奇校验码:增加一比特位校验位,使得数据+校验位中‘1’的个数为奇数。
偶校验码:增加一比特位校验位,使得数据+校验位中‘1’的个数为偶数。
例如::
1011010 1 奇校验
1011010 0 偶校验
但是奇偶校验只能检验出奇数位误码
例如:利用奇校验
发送方: 1011010 1
接收方:1001110 1
接收方检查,仍然是奇数位个‘1’,没有检出错误
其次,奇偶校验不能纠错,发现错误后,只能重发。
简单校验和
TCP/IP体系主要校验方法
16位校验和:
发送方:将32位的数据分两部分,进行16位二进制补码求和运算,结果取反,随数据一同发送
接收方:进行16位二进制补码求和运算(包括校验和),结果全为1,则未检测到错误。
例如:
1110 0110 0110 0110
1101 0101 0101 0101
——————————
1 1011 1011 1011 1011
—————————— 多于16位,继续求和
1011 1011 1011 1100
0100 0100 0100 0011 取反
所以校验和为0100 0100 0100 0011
发送方将数据以及校验和发送,接收方将两者进行16位二进制补码求和运算
例如:
1110 0110 0110 0110
+1101 0101 0101 0101
——————————
1 1011 1011 1011 1011
——————————
1011 1011 1011 1100
+0100 0100 0100 0011
——————————
1111 1111 1111 1111
没有错误
到这里很明白了,校验和为数据二进制补码求和运算后的反码,一个数与自己反码的求和运算为全1。
循环冗余校验:CRC
假设CRC校验码为:m比特位
发送方:将要发送的数据作为被除数(左移m位,或补m个0),选择一个预定的二进制数( m+1位)作为除数;利用二进制模二除法运算,计算得到一个余数,作为CRC校验码,随数据帧发送给接收方。
接收方: 以发送方发送的数据-CRC校验码为被除数,选同样的预定的二进制码为除数,如果余数为0,表明没有差错(接近概率1),否则证明发生差错。
预定的二进制数(除数)
标准的国际编码,用户不能随意规定
实例