Как отмечалось другими, существует много возможностей для повреждения данных, когда любая контрольная сумма на транспортном уровне не может помочь, например, повреждение происходит уже до того, как контрольная сумма вычислена на отправляющей стороне, MITM перехватывает и изменяет поток (данные также в качестве контрольных сумм), повреждение происходит после проверки контрольной суммы на принимающей стороне и т. д.
Если мы игнорируем все эти другие возможности и сосредоточимся на специфике самой контрольной суммы TCP и на том, что она на самом деле делает с точки зрения проверки целостности данных, оказывается, что свойства этой контрольной суммы совсем не являются исчерпывающими с точки зрения обнаружения ошибок. То, как был выбран этот алгоритм контрольной суммы, скорее отражает требование к скорости в сочетании с периодом времени (конец 1970-х годов).
Вот как вычисляется контрольная сумма TCP :
Контрольная сумма: 16 бит
Поле контрольной суммы является 16-битным дополнением к сумме дополнения всех 16-битных слов в заголовке и тексте. Если сегмент содержит нечетное количество заголовков и текстовых октетов для контрольной суммы, последний октет дополняется нулями справа, чтобы сформировать 16-битное слово для целей контрольной суммы. Пэд не передается как часть сегмента. При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.
Это означает, что любое искажение, которое уравновешивается при суммировании данных таким образом, останется незамеченным. Существует несколько категорий искажения данных, которые это допустят, но это просто тривиальный пример: изменение порядка 16-битных слов всегда останется незамеченным.
На практике он улавливает много типичных ошибок, но совсем не гарантирует целостность. Этому также помогает то, как уровень L2 также выполняет проверки целостности (например, CRC32 кадров Ethernet), хотя только для передачи по локальной линии связи, и многие случаи поврежденных данных даже не передаются в стек TCP.
Проверка данных с использованием надежного хэша или, предпочтительно, криптографической подписи, находится на совершенно другом уровне с точки зрения обеспечения целостности данных. Эти два понятия едва ли можно сравнить.