2012-04-23 5 views
1

ネットワークを介して複数のチャンクを送信したいのですが、単にチェックサムを使用してすべてが正常になったことを確認できるようにしたいと考えています(これは主に防御チェックです私が実際の低レベルのデータ破損を見たり期待したりしているわけではありません。だから私は、私が部品のチェックサムから全体のチェックサムを計算させるチェックサムアルゴリズムを探しています。どのようなチェックサム手法を使用すると、その部分のチェックサムから全体のチェックサムを計算できますか?

私が思うような技術の簡単な例は、各チャンクの各バイトを整数として扱い、これらの整数をすべて追加することです(もちろん、ゼロバイトが見つからない)。もう一つは、各チャンクの長さを計算することです(もちろん、ネットの挿入や削除を引き起こさないデータ変更は検出されません)。もう1つは、すべてのバイトを一緒にXORすることだと思いますが、これは1バイトのチェックサムを生成することしかできません(それぞれのバイトを4つずつ取ることができますし、 4倍の倍数であれば、ちょっと混乱して、別々のチャンクをつなぎ合わせる能力はおそらくなくなってしまうはずです)。

私はより深刻なチェックサムやハッシュアルゴリズムを探していますが、各チャンクのチェックサムが与えられていれば、いくつかの連結チャンクのチェックサムを簡単に計算できます。存在しますか?

+2

[Incremental Checksums]の複製が可能です(http://stackoverflow.com/questions/1173481/incremental-checksums) – gsteff

答えて

0

TCPを介してメッセージを正しく転送するには、プロトコルが必要です。このプロトコルは、メッセージの開始、終了、または好ましくは両方を定義する必要があります。これは、メッセージの長さを常に知ることを意味します。あなたのプロトコルがメッセージの最後に開始点と整数チェックサムを置くと、送信されたチェックサムがストリーム内の間違ったバイトから復元されるのでゼロバイトが見つからないので、平均で65535時間は65536からです。

関連する問題