Как вычислить контрольную сумму Интернета?
У меня есть вопрос о том, как рассчитывается интернет-контрольная сумма. Я не мог найти хорошего объяснения из книги, поэтому я прошу об этом здесь. Я не уверен, что это правильное место, чтобы спросить, поэтому я сожалею, если я попрошу об этом в неправильном месте.
Если вы посмотрите на следующий пример.
Следующие сообщения отправляются 10101001 и 00111001. Контрольная сумма рассчитывается с 1 дополнением. До сих пор я понял. Но как рассчитывается сумма? Сначала я подумал, что это, возможно, XOR, но, похоже, это не так.
10101001
00111001
--------
Sum 11100010
Checksum: 00011101
И затем, когда они подсчитают, пришел ли msg OK. И еще раз, как рассчитывается сумма?
10101001
00111001
00011101
--------
Sum 11111111
Complement 00000000 means that the pattern is O.K.
Ответы
Ответ 1
Он использует дополнение, отсюда и название "сумма". 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 |
+------------+-----+----+----+----+---+---+---+---+--------+
Ответ 2
Если по интернет-контрольной сумме вы имеете в виду TCP Checksum, там есть хорошее объяснение здесь и даже код.
Когда вы вычисляете контрольную сумму, помните, что это не только функция данных, но и "псевдо-заголовок", который помещает исходный IP-адрес, IP-адрес, протокол и длину TCP-пакета в данные, которые будут контрольная сумма. Это связывает метаданные tcp с некоторыми данными в заголовке IP.
TCP/IP Illustrated Vol 1 является хорошей ссылкой для этого и подробно объясняет все это.
Ответ 3
В расчете интернет-контрольной суммы используются арифметические дополнения. Рассмотрим, что контрольная сумма данных представляет собой последовательность из 8-битных целых чисел. Сначала вам нужно добавить их, используя арифметику комплемента и принять дополнения к результату.
ПРИМЕЧАНИЕ. При добавлении чисел, дополняющих арифметику, перенос из MSB необходимо добавить к результату. Рассмотрим, например, добавление 3 (0011) и 5 (0101).
3' → 1100
5' → 1010 0110 с переносом 1
Таким образом, мы имеем 0111 (1 дополнение-представление -8).
Контрольная сумма является 1 дополнением к результату, полученному на предыдущем шаге. Следовательно, мы имеем 1000. Если перенос не существует, мы просто дополняем результат, полученный на этапе суммирования.
Ответ 4
Контрольная сумма UDP создается на стороне отправки путем суммирования всех 16-разрядных слов в сегменте, при этом всякое переполнение обернуто вокруг, а затем выполняется 1 дополнение, и результат добавляется в поле контрольной суммы внутри сегмента.
на стороне приемника все слова внутри пакета добавляются и контрольная сумма добавляется к ним, если результат 1111 1111 1111 1111, тогда сегмент действителен, иначе сегмент имеет ошибку.
exmaple: 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]