web-dev-qa-db-ja.com

インターネットチェックサムの計算方法

インターネットチェックサムの計算方法に関して質問があります。私は本から良い説明を見つけることができなかったので、ここでそれを尋ねます。これが尋ねるべき正しい場所であるかどうかはわかりませんので、間違った場所で尋ねた場合は申し訳ありません。

次の例をご覧ください。次の2つのメッセージが10101001および00111001に送信されます。チェックサムは1の補数で計算されます。これまでのところ理解しました。しかし、合計はどのように計算されますか?最初はXORかもしれないと思っていましたが、そうではないようです。

              10101001
              00111001
              --------
   Sum        11100010
   Checksum:  00011101

そして、メッセージが正常に到着したかどうかを計算するときに。そしてもう一度、合計はどのように計算されますか?

               10101001
               00111001
               00011101
               --------
   Sum         11111111
   Complement  00000000  means that the pattern is O.K.
18
starcorn

加算を使用するため、「sum」という名前が付けられます。 10101001 + 00111001 = 11100010。

例えば:

+------------+-----+----+----+----+---+---+---+---+--------+
| bin value  | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | result |
+------------+-----+----+----+----+---+---+---+---+--------+
| value 1    |   1 |  0 |  1 |  0 | 1 | 0 | 0 | 1 |    169 |
| value 2    |   0 |  0 |  1 |  1 | 1 | 0 | 0 | 1 |     57 |
| sum/result |   1 |  1 |  1 |  0 | 0 | 0 | 1 | 0 |    226 |
+------------+-----+----+----+----+---+---+---+---+--------+
9
Wooble

インターネットのチェックサムでTCPチェックサムを意味する場合、適切な説明 ここ 、さらには コード があります。

チェックサムを計算するとき、それはデータの機能だけでなく、ソースIP、宛先IP、プロトコル、およびTCPパケットをチェックサムするデータに入れるこれにより、tcpメタデータがIPヘッダーの一部のデータに結び付けられます。

TCP/IP Illustrated Vol 1 はこのための良いリファレンスであり、すべて詳細に説明しています。

8
Paul Rubel

インターネットチェックサムの計算には、1の補数演算が使用されます。チェックサムされるデータが8ビット整数のシーケンスであると考えてください。最初に、1の補数演算を使用してそれらを追加し、結果の1の補数を取る必要があります。

注:数字の1を追加すると算術演算が補完され、MSBからのキャリーオーバーを結果に追加する必要があります。たとえば、3(0011)および5(0101)の追加を考慮してください。

3 '-> 1100 5'-> 1010 0110キャリーが1であるため、0111(-8の1の補数表現)があります。

チェックサムは、前のステップで得られた結果の1の補数です。したがって、1000になります。キャリーが存在しない場合は、加算段階で得られた結果を補完するだけです。

2
user3411417

UDPチェックサムは、送信側で、セグメント内のすべての16ビットワードを合計することで作成され、オーバーフローがラップされた後、1の補数が実行され、結果がセグメント内のチェックサムフィールドに追加されます。受信側では、パケット内のすべてのワードが追加され、結果が1111 1111 1111 1111の場合はチェックサムが追加され、セグメントは有効です。そうでない場合、セグメントにエラーがあります。例:0110 0110 0110 0000 0101 0101 0101 0101

1000 1111 0000 1100

1 0100 1010 1100 0001 //オーバーフローがあるので、まとめて合計に追加します。合計= 0100 1010 1100 0010ここで、1の補数チェックサム= 1011 0101 0011 1101を取ります。

受信側で合計が計算され、チェックサムに追加されます0100 1010 1100 0010

1011 0101 0011 1101

1111 1111 1111 1111 //それが答えでなければならないことは明らかです。もしそうでなければ、エラー参照があります:コンピュータネットワークトップダウンアプローチ[Ross-kurose]

0
Mohamed AbuIssa