как рассчитать контрольную сумму в интернете? - PullRequest
17 голосов
/ 21 октября 2010

У меня есть вопрос относительно того, как вычисляется контрольная сумма в Интернете.Я не смог найти хорошего объяснения из книги, поэтому спрашиваю здесь.Я не уверен, что это правильное место, чтобы спросить, поэтому извините, если я спросил это в неправильном месте.

Если вы посмотрите на следующий пример.Следующие два сообщения отправляются 10101001 и 00111001. Контрольная сумма рассчитывается с дополнением 1.Пока я поняла.Но как рассчитывается сумма?Сначала я подумал, что это может быть XOR, но, похоже, это не так.

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

А потом, когда они вычисляют, пришло ли сообщение в порядке.И еще раз, как рассчитывается сумма?

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

Ответы [ 4 ]

9 голосов
/ 21 октября 2010

Используется сложение, отсюда и название «сумма».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 |
+------------+-----+----+----+----+---+---+---+---+--------+
8 голосов
/ 21 октября 2010

Если под контрольной суммой в Интернете вы имеете в виду контрольную сумму TCP, есть хорошее объяснение здесь и даже некоторый код .

Когда вы вычисляете контрольную сумму, помните, что это не только функция данных, но и «псевдо заголовка», который помещает исходный IP, dest IP, протокол и длину пакета TCP вданные для контрольной суммы.Это связывает метаданные tcp с некоторыми данными в заголовке IP.

TCP / IP Illustrated Vol 1 является хорошим справочным материалом для этого и объясняет все это подробно.

2 голосов
/ 12 марта 2014

При подсчете контрольной суммы в Интернете используются арифметика, дополняющая единицы. Рассмотрим контрольную сумму данных как последовательность 8-битных целых чисел. Сначала вам нужно добавить их, используя арифметику, дополняющую их, и взять результат, дополняющий результаты.

ПРИМЕЧАНИЕ. При добавлении чисел, дополняющих арифметику, к результату необходимо добавить перенос из MSB. Рассмотрим, например, добавление 3 (0011) и 5 ​​(0101).

3' -> 1100 5' -> 1010 0110 с переносом 1 Таким образом, мы имеем, 0111 (представление дополнения 1 -8).

Контрольная сумма является дополнением 1 к результату, полученному на предыдущем шаге. Следовательно, у нас 1000. Если переноса не существует, мы просто дополняем результат, полученный на этапе суммирования.

0 голосов
/ 11 декабря 2015

Контрольная сумма 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 00111101

1111 1111 1111 1111 // ясно, что это должен быть ответ, если это не так, то есть ссылка на ошибку: Компьютерные сети сверху вниз [Ross-kurose]

...