Если UDP-пакеты находятся в сети, могу ли я получить их на прикладном уровне?

Во-первых, я ценю, что UDP не является надежным протоколом, и мне не гарантирован прием пакетов через сеть.

Однако, если пакет действительно достигает моей машины, гарантированно ли я получу его на уровне приложения, или сетевой стек может отбросить его безнаказанно?

Причина, по которой я спрашиваю, заключается в том, что мне иногда не хватает пакетов, хотя я знаю, что они находятся в сети (простая шина EtherCAT, поэтому пакеты всегда возвращаются назад).

1 ответ

Решение

Нет, нет гарантии, что пакеты дойдут до вашего приложения, даже если они достигнут вашей машины.

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

Вы можете увеличить размер буфера приема (см. Этот вопрос), но вы не можете сделать его неограниченным.

Другие вопросы по тегам