バイト配列長 1000 のチェックサムのバイト数
破損を検出するにはどのくらいの大きさが必要かを尋ねる場合、それは非常に難しい質問です...
まず、チェックサムがどれほど大きくても、どのように計算されても、検出できない破損の可能性を完全に排除することはできません。(チェックサム値がメッセージ値と同じ数であっても、送信がメッセージとチェックサムの両方を破損する可能性を排除することはできません...まったく同じ方法です。)
考えられるすべての破損のセットを平均すると、N ビットのチェックサムが 2 Nに 1 回破損を検出できないことが期待できます。その確率が高すぎる場合は、N を増やす必要があります。
その単純な分析を超えるには、特定のチェックサム アルゴリズムと、一般的な種類のエラーを検出する能力を考慮する必要があります。たとえば、単一のビット フリップ、ビットの転置などです。私はこれについて「数学を知っている」わけではありませんが、実際のチェックサムアルゴリズムでは非常に複雑になり、経験的なアプローチが最良の答えをもたらすと思います。しかし、推奨されるアルゴリズムは理論上の「2 Nに 1 回」に近づき、一般的なエラー シンドロームに対する特定の弱点はないと思います。
したがって、おそらく最善のアドバイスは、自分が満足できる確率を把握し、それを使用してN
... と、そのサイズ (またはそれ以上) のチェックサムを提供するアルゴリズムを選択することです。
私が実行している信頼できないネットワークのシミュレーションは信頼できるようにすることができるため、これはパケットの破損の場合ではないことに注意してください。
その場合、任意のチェックサム アルゴリズムを使用できます。1 ビットのチェックサムでも。すなわちパリティビット。(またはゼロビットでも。100% 信頼できるネットワークにはチェックサムは必要ありません。)
...受信者は、保存されているものと同じチェックサムを取得できません。
書かれたコードはCRC32を使用しています。それは 32 ビットまたは 4 バイトのチェックサムです ... チェックサムされるデータのバイト数に関係なく。data_out
ただし、メッセージ内の CRC32 の最下位バイトのみを渡しているようです。受信者が同じことを (下位バイトのみを使用して) 行っていない限り、チェックサムは一致しません。