как процессор распределяет данные из сети?

#tcp #operating-system #nic

#tcp #операционная система #сетевой адаптер

Вопрос:

Я изучаю сетевые коммуникации и уже знаком с сетевыми уровнями TCP / IP (физический, канал передачи данных… и прикладные уровни) и как данные перемещаются через эти узлы. Но у меня есть несколько вопросов о том, что происходит внутри машины, когда данные поступают на сетевую интерфейсную карту (NIC).

Вопросы:

  1. Как процессор узнает, что данные с другого компьютера получены?
  2. Как ЦП информирует ОС о поступлении данных с другого компьютера?
  3. Как ОС узнает, для какого приложения предназначены данные?

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

Комментарии:

1. Google «прерывания», «драйверы». Вы уже знаете ответ на (3).

Ответ №1:

Чтобы дать вам общее представление с точки зрения Linux (должно быть аналогично для других ОС):

Пакеты поступают в сетевой адаптер. Эти пакеты копируются в циклические очереди в ОЗУ через DMA. Поступление пакетов вызовет прерывание, чтобы сообщить системе, что это пакеты в ОЗУ. В соответствии с прерыванием будет процедура обработки прерываний, зарегистрированная в операционной системе через сетевой драйвер. (Для простоты не говорил о softirq). У каждого процессора есть функция опроса, задачей которой является сбор пакетов из этих очередей и передача их на верхние n / w уровни. Итак, отвечая на ваши запросы:

Как процессор узнает, что данные с другого компьютера получены?Когда происходит прерывание и цикл опроса не выполняется на ЦП, ОС (через сетевой драйвер) попросит ЦП запустить цикл опроса для сбора пакетов.

Как ЦП информирует ОС о поступлении данных с другого компьютера?Процессору не нужно информировать ОС. ОС будет знать, когда происходит прерывание, поскольку обработчик прерываний является частью сетевого драйвера, который является частью ОС. Фактически таким образом, ОС сообщит процессору начать сбор пакетов.

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