Пакетный маршрут UDP в Java

У меня есть вопрос, рассматривающий жизнь / маршрут пакета udp. У меня есть простая схема UDP клиент-сервер с вызовом отправки на стороне клиента и вызовом приема на стороне сервера. Допустим, вызывается метод send, и пакет фактически поступает на другую сторону, НО выполнение кода сервера еще не достигло вызова метода receive. Что происходит с пакетом за это время. Теперь я попытался остановить выполнение перед вызовом приема с помощью простой команды ввода, немного подождал, а затем позволил продолжить и заметил, что пакет получен. Можете ли вы объяснить, ПОЧЕМУ это произошло, например, буферизовать ли это на другом уровне OSI?

Заранее спасибо.

2 ответа

Каждый сокет TCP или UDP имеет буфер отправки и буфер приема. Ваша дейтаграмма была помещена в очередь в буфере отправки у отправителя, затем она была отправлена, затем она была помещена в очередь в буфере приема у получателя, а затем вы прочитали ее оттуда.

Вызов метода receive не получает пакет. Если для этого порта есть "открытый" сокет UDP, это означает, что выделено буферное пространство, и именно здесь ОС NIC+ помещает данные. Когда вы звоните "получать", он просто смотрит туда, и если там что-то есть, то он притворяется, что только что получил это.

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

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