Почему контрольная сумма TCP / UDP наконец дополняется? - PullRequest
3 голосов
/ 04 октября 2011

В TCP / UDP отправитель записывает 16-битные слова, и окончательный результат снова дополняется, чтобы получить контрольную сумму.Теперь это сделано для того, чтобы получатель пересчитал контрольную сумму с данными и контрольной суммой, и если бы результат был один, то можно быть уверенным (ну, почти!), Что ошибки нет.Мой вопрос заключается в том, почему мы должны сделать окончательное дополнение к результату у отправителя.Мы могли бы также отправить его так, чтобы, когда получатель пересчитывает контрольную сумму, ему пришлось бы проверять все нули, а не все, как в другом случае.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2012

Потому что 0 имеет особое значение. Он используется для указания того, что вычисление контрольной суммы следует игнорировать.

0 голосов
/ 04 октября 2011

Так что получатель может просто сделать 1 дополнительную сумму всех данных (включая поле контрольной суммы) и посмотреть, равно ли это -0 (0xffff).

...