Поле контрольной суммы - это 16-битное дополнение к сумме всех 16-битных слов в заголовке и тексте.
Почему после суммирования 16 битов в заголовке и тексте для вычисления контрольной суммы TCP берется дополнение до единицы?
Дополнение используется для упрощения проверки контрольной суммы - вместо повторного вычисления контрольной суммы и последующего сравнения вычисленного значения с полем контрольной суммы в заголовке (которое находится в середине суммированных данных) можно суммировать (используя одно дополнение арифметика) все 16-битные слова в заголовке (включая слово контрольной суммы) и сравните результат с нулем.
Это может быть потому, что значение всех нулей имеет смысл (из RFC 793):
При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.
так что он может сохранить это значение на случай маловероятного события, когда контрольная сумма действительно равна нулю.
Подсчет контрольной суммы результата, равного нулю, проблематичен, так как все нули также генерируются выключенным устройством или чем-то, что не имеет питания. В результате ВСЕ ЕДИНОЕ, что дает больше уверенности в том, что оборудование работает правильно.
Дополнение до единицы - это более сложный термин для анализа битов по одному, а не как единое целое (то есть И / ИЛИ / ИСКЛЮЧАЮЩЕЕ ИЛИ / НЕ).
Арифметика с дополнением до одного был использован потому, что TCP был разработан в 1970-х годах для компьютеров 1970-х годов, в большинстве из которых использовалась арифметика с дополнениями. Развитие арифметики с дополнением до двух, которая используется в современных компьютерах, не началось всерьез до появления персональных компьютеров в конце 1970-х и 1980-х годах.