0

TCP 段包括一个 16 位的校验和字段,IP 数据报和 UDP 数据包也是如此。但是在链路层,CRC 校验和只有 4 位(对于 802.3 和 802.4)。

在频谱的极端部分,仅计算奇偶校验位可能会产生很多误报,其中数据包看起来有效但实际上不是,因为偶数位已被更改。另一方面,在只有 4 位就足够的情况下使用 16 位校验和是浪费内存/带宽/金钱。

你如何评估你的校验和应该是多少位?

PS:我以互联网堆栈为例,但这确实适用于任何协议/软件。

PS2:我不确定使用哪个论坛。

4

2 回答 2

2

首先,快速的命名法校正 - 校验和和 CRC 是试图解决相同问题的两种不同方法:检测在噪声信道中数据传输期间发生的位错误。一般来说,CRC 检测错误的能力更强,但代价是更复杂。

选择正确的错误检测方案需要一些关于信道(例如错误概率)及其噪声特性(例如脉冲、突发)的知识。有论文详细分析了这个问题,并就如何选择错误检测方法给出了一些指导。我建议您尝试此介绍性演示文稿作为起点:

http://www.ece.cmu.edu/~koopman/pubs/KoopmanCRCWebinar9May2012.pdf

它将让您更好地了解这个美丽领域的复杂性,并为您提供一些其他学习材料的链接。

于 2013-05-14T14:50:57.467 回答
0

假设你有一个很好的 CRC 或散列函数可以很好地利用这些位,并且假设预期的损坏源没有一些不寻常的特征使第一个假设无效,那么你可以简单地设置一个可接受的误报概率,并从中获取位数。或者从位计算概率,看看你是否对此感到满意。概率是:

p = 2 -n

其中n是校验值的位数。这是一些随机数据上的n位校验值意外匹配其他数据集的n位校验值的概率。

于 2013-05-14T18:19:25.583 回答