Re: Гарантирует ли ОС упорядоченность в UDP?
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.11.22 19:45
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Имеется клиент с протоколом UDP. Изменить это нельзя. От него приходят пакеты с определённой информацией. Клиент это девайс, к компьютеру с Windows подключен напрямую патч-кордом. В целом всё работает, но иногда бывают непонятные проблемы. Пакеты приходят маленькие. В ОС с ними работает обычная программа из юзерспейса. К сожалению в протоколе нет номеров пакетов или ещё какой-либо информации.


UDP не обрезает пакетов сам. Если пакеты перестают помещаться в буфер сокета, то пакет будет отброшен, а не обрезан.

Единственное место, где пакет может быть обрезан, это когда вызову recv() передают слишком маленький буфер для результата.

vsb>Правильно ли я понимаю, что размер UDP буфера в Windows 32 KB (для каждого сокета)? От клиента данные приходят со скоростью примерно 1.6 KB/s (20 пакетов в секунду). То бишь буфера хватает на 20 секунд. Программа работает постоянно, задержек больше, чем на сотые доли секунды не бывает, значит с размером буфера проблем быть не может.


Он управляется параметром SO_RCVBUF. Чего там по умолчанию, я уже забыл, но имеет смысл явно ставить, во избежании сюрпризов.

https://learn.microsoft.com/ru-ru/windows-hardware/drivers/network/so-rcvbuf (аж даже по-русски, до чего дошел прогресс...)

vsb>Можно ли быть уверенными, что сетевые драйверы в Windows гарантируют упорядоченность пакетов после того, как они их приняли, если в буфере место не кончилось?


vsb>Можно ли быть уверенными, что если патч-корд хороший, то потерь и переупорядочиваний пакетов на таких скоростях быть не может?


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