Веб-сайты, которые предоставляют файлы ISO для загрузки, часто предоставляют контрольные суммы md5 этих файлов, которые мы можем использовать для подтверждения того, что файл был загружен правильно и не был поврежден.
Зачем это нужно? Конечно, исправляющих ошибок свойств TCP достаточно. Если пакет получен неправильно, он будет передан повторно. Разве сама природа соединения TCP / IP не гарантирует целостность данных?
Как было отмечено другими, существует много возможностей для повреждения данных, когда любая контрольная сумма на транспортном уровне не может помочь, например, повреждение происходит уже до того, как контрольная сумма вычисляется на стороне отправителя, MITM перехватывает и изменяет поток (данные также в качестве контрольных сумм), повреждение происходит после проверки контрольной суммы на принимающей стороне и т. д.
Если отбросить все эти возможности и сосредоточиться на специфике Контрольная сумма TCP и то, что он на самом деле делает с точки зрения проверки целостности данных, оказывается, что свойства этой контрольной суммы совсем не исчерпывающие с точки зрения обнаружения ошибок. Выбор этого алгоритма контрольной суммы скорее отражает требование скорости в сочетании с периодом времени (конец 1970-х).
Вот как Контрольная сумма TCP рассчитывается:
Контрольная сумма: 16 бит
Поле контрольной суммы - это 16-битное дополнение к сумме всех 16-битных слов в заголовке и тексте. Если сегмент содержит нечетное количество октетов заголовка и текста для контрольной суммы, последний октет дополняется справа нулями для формирования 16-битного слова для целей контрольной суммы. Пэд не передается как часть сегмента. При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.
Это означает, что любое повреждение, которое уравновесится при таком суммировании данных, останется незамеченным. Существует несколько категорий повреждения данных, которые это позволяет, но это просто тривиальный пример: изменение порядка 16-битных слов всегда остается незамеченным.
На практике он выявляет многие типичные ошибки, но не гарантия целостность. Этому также способствует то, как уровень L2 также выполняет проверки целостности (например, CRC32 кадров Ethernet), хотя и только для передачи по локальному каналу, а во многих случаях поврежденные данные даже не попадают в стек TCP.
Проверка данных с использованием надежного хэша или, предпочтительно, криптографической подписи - это совершенно другой уровень с точки зрения обеспечения целостности данных. Их трудно даже сравнивать.
Вероятно, существует миллион причин, по которым следует проверить md5sum, но некоторые из них приходят мне на ум:
И в любом случае это займет всего несколько секунд.
TCP / IP действительно гарантирует целостность данных *. Но это не гарантирует, что 100% файла загружено. Это могло произойти по многим причинам. Например: возможно, вы можете смонтировать ISO, который пропускает один или два байта где-то посередине. У вас не будет проблем с этим, пока вам не понадобится один или два конкретных файла, которые повреждены. Сравнение контрольных сумм гарантирует, что вы действительно загрузили весь файл.
* см. комментарий
Контрольная сумма TCP составляет всего 16 бит. Это означает, что при отсутствии других контрольных сумм один из каждых 65536 поврежденных пакетов будет принят как неповрежденный. Если, например, вы загружали образ DVD объемом 8 ГБ по зашумленному каналу со степенью повреждения 1%, можно было бы ожидать 81 необнаруживаемый поврежденный пакет.
MD5 - это гораздо большая контрольная сумма, 128 бит. Вероятность того, что из этих 81 пакета получится что-то с той же контрольной суммой, что и у оригинала, составляет примерно 1 к 10000000000000000000000000000000000.
Есть несколько причин для проверки контрольной суммы файла, загруженного по HTTP:
1 источники в комментариях, потому что lol rep
Даниэль, в зависимости от инструмента, который вы используете для загрузки ISO, скажем. Если это скажем Firefox .. Он может показать загрузку файла. Однако у вас может не быть полного ISO. Если вы сожжете его, попробуйте использовать, информация может отсутствовать. Это происходит время от времени на разных веб-серверах, на которых размещаются файлы.
Рекомендуется хотя бы сравнить размер файла (общее количество байтов или бит), чтобы убедиться, что они совпадают. Windows покажет количество байтов файла, отличное от Linux. Проверка суммы MD5 покажет те же значения независимо от используемой ОС. Надеюсь, что это помогает немного. Ура ...
Я замечаю много интересных ответов, но нужно учесть последнее:Проблема двух генералов
Проблема двух генералов и проблема византийских генералов конкретно рассматривают последствия надежной передачи информации по ненадежным каналам.
Контрольные суммы - это просто еще один уровень «повышения надежности», с очень малой вероятностью отказа. Это причина, по которой он так популярен.