Почему контрольная сумма TCP инвертирована?

Со страницы Википедии:

Поле контрольной суммы является 16-битным дополнением к сумме дополнения всех 16-битных слов в заголовке и тексте.

Почему после суммирования 16-бит в заголовке и тексте принимается дополнение к нему для вычисления контрольной суммы TCP?

4 ответа

Решение

Дополнение используется для упрощения проверки контрольной суммы - вместо того, чтобы снова вычислять контрольную сумму и затем сравнивать вычисленное значение с полем контрольной суммы в заголовке (который находится в середине суммированных данных), можно суммировать (используя свое дополнение) арифметика) все 16-битные слова в заголовке (включая слово контрольной суммы) и сравнение результата с нулем.

Это может быть связано с тем, что значение всех нулей имеет смысл (из RFC 793):

При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.

таким образом, он может сохранить это значение от маловероятного события, когда контрольная сумма действительно равна нулю.

Контрольная сумма для результата, чтобы быть НУЛЯМИ, проблематична, поскольку все НУЛИ также генерируются выключенным устройством или чем-то, что не имеет питания. В результате получается "ВСЕ ЕДИНИЦЫ", поэтому больше уверенности в том, что аппаратное обеспечение работает правильно

Одно дополнение - более сложный термин для анализа битов один за другим, а не как единое целое (т. Е. AND/OR/XOR/NOT).

Одна арифметика дополнения была использована, потому что TCP был разработан в 1970-х годах для компьютеров 1970-х годов, большинство из которых использовали арифметику дополнения. Рост арифметики дополнения до двух, которую используют современные компьютеры, не начался всерьез до появления персональных компьютеров в конце 1970-х и 1980-х годов.

Другие вопросы по тегам