Могут ли данные UDP быть доставлены поврежденными?

StackOverflow https://stackoverflow.com/questions/47901

  •  09-06-2019
  •  | 
  •  

Вопрос

Могут ли данные UDP прийти к вам поврежденными?Я знаю, что его можно потерять.

Это было полезно?

Решение

Пакеты UDP используют 16-битную контрольную сумму.Повреждения пакетов UDP не исключены, но это маловероятно.В любом случае он не более подвержен повреждениям, чем TCP.

Другие советы

Прежде всего, упомянутая выше «контрольная сумма IP» — это всего лишь контрольная сумма заголовка IP.Это не защищает полезную нагрузку.См. RFC 791.

Во-вторых, UDP допускает транспортировку без контрольной суммы, что означает, что 16-битная контрольная сумма установлена ​​в 0 (т. е. отсутствует).См. RFC 768.(Все нулевое значение передаваемой контрольной суммы означает, что передатчик не генерировал контрольную сумму)

В-третьих, как уже отмечали другие, UDP имеет 16-битную контрольную сумму, что не лучший способ обнаружить многобитную ошибку, но неплохой.Необнаруженная ошибка, конечно, возможна, но очень маловероятна.

Возможный?Абсолютно.Необнаруженный? Вряд ли, поскольку UDP использует контрольную сумму, которая требует, чтобы многобитные ошибки выглядели действительными.Если будет обнаружена ошибка, система, скорее всего, отбросит пакет — таковы риски использования UDP.

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

Распространенной формой «порчи», которая поражает ничего не подозревающих программистов, является усечение дейтаграммы.Для получения дополнительной информации см. «Сетевое программирование Unix» Стивенса (стр. 539 во 2-м изд.).

Вы можете проверить флаг MSG_TRUNC...

Короткий ответ:ДА.

Подробный ответ:

Около 7 лет назад (может быть, в 2011 году?) мы обнаружили, что дейтаграммы UDP непреднамеренно изменяются при обмене дейтаграммами UDP между компьютером в Китае и другим компьютером в Корее.Разумеется, контрольная сумма в заголовке пакета UDP также пересчитывается с учетом изменения полезной нагрузки.На двух компьютерах не было вредоносного ПО.

Мы обнаружили, что непреднамеренное изменение происходит только при совпадении следующих условий:

  • Первые несколько байтов дейтаграммы аналогичны предыдущей дейтаграмме.
  • Происходит только тогда, когда дейтаграммы UDP передаются из одной страны в другую.

Я точно не знаю причину, но примерно предполагаю, что это так. Золотой Щит Китая.

Поэтому мы добавили алгоритм искажения датаграмм в наше программное обеспечение ProudNet, и проблема исчезла.Это не сложно реализовать.Просто закодируйте или запутайте первые несколько байтов вашей дейтаграммы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top