
Прежде всего, извините, если этот вопрос покажется вам несколько упрощенным.
В соответствии сэтот ответ, TCP-пакеты поврежденывсе времябез учета контрольной суммы.
Если это происходит так часто, почему это не более заметно? Разве это не должно приводить к повреждению изображений, файлам скриптов, содержащим неправильные символы ascii и т. д.?
Конечно, люди склонны проверять контрольную сумму md5 для критически важных файлов, но почему для обычных и ежедневных сетевых приложений это не вызывает большего хаоса, чем кажется? (кажется, что этого даже не происходит, но статистика и логика в этом ответе подтверждаются)
решение1
Если это происходит так часто...
Это не так, и ответ, на который вы ссылаетесь, не утверждает обратного.Часто" будет означать, что большое количество пакетов поврежденородственникк абсолютному числу переданных пакетов. Но это не так. В то время как ответ, на который вы ссылаетесь, утверждает, чтомногопакеты повреждены, повреждение все еще естьредкийпо сравнению сабсолютныйколичество переданных пакетов.
Помимо этого, могут быть дополнительные средства защиты поверх TCP. Например, TLS (используемый в HTTPS) заметит практически каждое повреждение данных, поскольку HMAC, используемый для обнаружения манипуляции данными, гораздо более надежен (но также имеет больше накладных расходов), чем простой CRC, используемый в TCP. Хотя обнаружение проблем на этом этапе не приведет к повторной передаче данных, как это было бы сделано с ошибками контрольной суммы TCP, соединение будет просто считаться разорванным и, таким образом, будет неотличимым от многих других ошибок, которые ежедневно возникают при разорванном соединении. Аналогично, из-за того, как работают форматы изображений, поврежденные данные в изображении обычно будут либо практически невидимыми, либо приведут к тому, что все изображение будет разорвано (не отобразится или будет обрезано посередине), что также похоже на типичные проблемы с подключением.
решение2
Вы описываете смещение выборки. То, что вы лично не заметили много проблем с коррупцией при использовании TCP, не означает, что это не происходит постоянно. Это происходит. Ответы, на которые вы ссылаетесь, достаточно полны по этому вопросу.