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

Я думаю, что комментарий на ваш вопрос об использовании парсера JSON лучше всего, за которым следует простой ответ fhdhsni. Но вот метод, который извлекает числа, а не заменяет скобки:

str = "[40.45694301152436, -3.6907402812214514]"
regex = ~r/([\d\.-]+), ([\d\.+-]+)/
Regex.run(regex, str, capture: :all_but_first) |> Enum.map(&String.to_float/1)

Вывод:

[40.45694301152436, -3.6907402812214514]
22
задан Net Citizen 6 September 2008 в 22:45
поделиться

5 ответов

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

23
ответ дан 29 November 2019 в 04:02
поделиться

В первую очередь, "контрольная сумма IP, на которую" ссылаются выше, является только контрольной суммой заголовка IP. Это не защищает полезную нагрузку. Посмотрите RFC 791

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

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

17
ответ дан 29 November 2019 в 04:02
поделиться

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

6
ответ дан 29 November 2019 в 04:02
поделиться

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

5
ответ дан 29 November 2019 в 04:02
поделиться

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

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

3
ответ дан 29 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: