LZ对CRC的工作原理理解有误。CRC适用于校验数据传输过程中偶然发生的个别位的改变,如果线路非常不稳定,则CRC校验很可能出错。
对于标准CRC16多项式G(x) = x16 + x15 + x2 + 1,有下面的特性:
1,所有长度r < 16的突发错误。
2,所有影响奇数个比特韦德任意长度的突发错误。
3,以(2^(r-1) - 1)/2^(r-1)的概率检测出所有长度为r+1的突发错误。
4,以(2^r - 1) / 2^r的概率检测出所有长度>r+1的突发错误。
总的来说,如果你的一个数据包有一定概率出现2处错误,CRC就不适合你。移动硬盘之类的数据线相对来说是比较可靠的,所以CRC就够用了。但是网络传输中CRC32则不是那么可靠,所以很多网站会提供下载文件的SHA或MD5值作为校验。 |