UDP буферы, где они, что гарантировано? - PullRequest
0 голосов
/ 13 октября 2018

Я экспериментирую с библиотекой сокетов python (3.5, на linux mint 18), пытаюсь понять UDP.Я - аппаратный человек, занимающийся программным обеспечением, и UDP кажется проще, чем TCP.Мне хорошо известно, что UDP не гарантирует доставку пакетов один за одним.

До сих пор я мог следовать инструкциям, чтобы передавать данные обратно с сервера на клиент.

Однако яЯ люблю писать, чтобы увидеть, что происходит, когда приложения не следуют по ожидаемому пути, я ненавижу писать вещи, которые «зависают», когда происходят непредвиденные события.

Если сервер привязывает сокет к номеру порта, тоКлиент отправляет несколько сообщений на этот порт, прежде чем сервер несколько раз вызывает recvfrom (), я обнаружил, что каждый вызов возвращает одно сообщение с сообщениями по порядку.Другими словами, сообщения были буферизованы, более поздние сообщения не перезаписывают более ранние сообщения в очереди.Я не был удивлен, увидев это, но также не удивился, обнаружив, что доступно только последнее принятое сообщение, то есть длина буфера, равная единице.

Является ли этот буфер и его глубина подробностями реализации Python,детали linux mint / ubuntu, или определенные протоколом UDP?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Является ли этот буфер и его глубина подробностями реализации Python, подробностями linux mint / ubuntu или определены протоколом UDP?

Размеры буфера сокета UDP являются реализациейдеталь сетевого стека вашей ОС.Каждая ОС пытается установить разумный размер по умолчанию на основе ожидаемых сценариев использования, но вы можете переопределить размер ОС по умолчанию (в любом случае, до некоторого максимального значения) для каждого сокета, вызвав socket.setsockopt (socket.SOL_SOCKET, socket.SO_SNDBUF, newSizeInBytes) и / или socket.setsockopt (socket.SOL_SOCKET, socket.SO_RCVBUF, newSizeInBytes)

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

0 голосов
/ 13 октября 2018

Буферы UDP находятся в сетевом стеке операционной системы.Размер буферов будет зависеть от объема памяти вашего компьютера и настроек конфигурации ядра.На современных компьютерах с гигабайтами памяти вполне вероятно, что в ОС будет достаточно места для буферов UDP, и будет сложно переполнить их, если компьютер не будет перегружен.

Возможно, для вас найдется какой-то способнастроить ОС для ограничения объема памяти, используемой для буферов UDP, чтобы вы могли вызвать переполнение и посмотреть, каковы симптомы в вашем тестовом приложении.Я не знаю параметров конфигурации, вы можете попробовать спросить в Unix & Linux или AskUbuntu.com .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...