Чтобы дать вам общее представление с точки зрения Linux (должно быть похоже на другие ОС):
Пакеты поступают в NIC. Эти пакеты копируются в циклические очереди в ОЗУ через DMA. Поступление пакетов сгенерирует прерывание, чтобы система знала, что это пакеты в ОЗУ. Соответствующему прерыванию будет обработчик прерываний, зарегистрированный в операционной системе через сетевой драйвер. (Для простоты не говорите о softirq's). Каждый ЦП имеет функцию опроса, задачей которой является сбор пакетов из этих очередей и передача их на верхние н / ж уровни. Итак, отвечая на ваши вопросы:
Как процессор знает, что поступили данные с другой машины?
Когда происходит прерывание и цикл опроса не работает на ЦП, ОС (через сетевой драйвер)
попросит ЦПУ запустить цикл опроса для сбора пакетов.
Как CPU сообщает ОС, что поступили данные с другой машины?
CPU не нужно информировать ОС. ОС будет знать, когда возникнет прерывание, поскольку обработчик прерываний является частью сетевого драйвера, который является частью ОС. Фактически ОС скажет ЦПУ начать сбор пакетов.
Как ОС знает, для какого приложения предназначены данные?
Связь осуществляется через сокеты, которые будут иметь номер порта. Прибывшие пакеты будут иметь номер порта, который поможет ОС доставить пакет в требуемое приложение.