UDP API Java получает только пакеты с правильной контрольной суммой?

1

Я новичок в UDP и Java UDP API, и я знаю, что пакеты могут быть повреждены, разбиты на IP или неправильно каким-либо другим способом. Конечно, если такой пакет будет расколот, контрольная сумма в заголовке UDP будет неправильной.

При чтении UDP-пакета в Java, например DatagramSocket.receive(DatagramPacket), гарантировано ли, что содержимое принятого пакета является правильным (что означает, что вычисленная контрольная сумма является правильной)? Или Java также передаст поврежденные UDP-пакеты в приложение?

  • 0
    Это не имеет ничего общего с Java. Операционная система не будет передавать поврежденные пакеты в JVM.
  • 0
    @EJP Итак, ЕСЛИ я получаю пакет, я могу быть уверен, что его содержимое полно и не повреждено?
Показать ещё 1 комментарий
Теги:
networking
sockets
udp

2 ответа

1

Короткий ответ:

Да, если не указано иное.

Длительный ответ:

Пакеты Udp включают в себя CHECKSUM, который используется вашей ОС, - это проверка пакетов для вас. Когда пакет с неправильной контрольной суммой получен, отбрасывается стеком ОС (до достижения уровня приложения).

Я никогда не пробовал, но в Ubuntu можно отключить контрольную сумму с помощью

ethtool --offload eth0 rx off
0

Из IETF RFC 5405 раздел 3.4 я цитирую:

[...] разработчикам приложений СЛЕДУЕТ проводить дополнительные проверки, где важна целостность данных [...]

Теперь, насколько важна целостность данных для вашего приложения и как вы цените "СЛЕДУЕТ" заглавными буквами, это зависит от вас.

Другими словами:

  • По определению целостность данных пакетов UDP гарантирована.
  • По спецификации целостность данных пакетов UDP не гарантируется на прикладном уровне.

Следовательно, при реализации на сетевом уровне целостность принятых данных пакетов UDP остается неясной на прикладном уровне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню