Что происходит, когда мы говорим «слушаем порт»?

Когда мы запускаем серверное приложение, нам всегда нужно указывать номер порта, который оно слушает. Но как этот «механизм прослушивания» реализован под капотом?

Мое текущее воображение выглядит следующим образом:

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

Когда какие-то данные поступят по сети, операционная система узнает об этом, а затем проверит данные и увидит, нацелены ли они на этот номер порта. И затем он заполнит соответствующий буфер . И тогда ОС уведомит заблокированное серверное приложение, и серверное приложение получит данные и продолжит работу.

Вопрос:

  • Если описанный выше сценарий верен, как может операционная система узнать есть данные, поступающие по сети? Это не может быть занятый опрос. Это какой-то механизм, основанный на прерываниях?

  • Если прибывает слишком много данных, а буфер недостаточно велик, будет ли потеря данных?

  • Действительно ли операция "прослушивание порта" является операцией блокировки?

Большое спасибо.

24
задан Nishant 5 February 2018 в 17:09
поделиться