Здесь много слоев. И что немаловажно, многие из них взаимозаменяемы.
Например, у вас может быть сеть с коаксиальным кабелем, Ethernet или Wi-Fi на физическом уровне. HTTP работает поверх всего этого, но у каждого из них есть немного различная обработка полезной нагрузки, отправляемой вокруг.
HTTP работает поверх другого протокола, называемого TCP, который, в свою очередь, более или менее работает поверх еще одного протокола, называемого IP (в настоящее время в основном в двух вариантах - IPv4 и IPv6).
Таким образом, HTTP-сервер регистрирует IP-адрес (например 184.38.45.1
, или чаще всего «любой») вместе с TCP-портом ( 80
по умолчанию для HTTP, но, в общем, что угодно, начиная 1
с 65535
) в операционной системе. Теперь HTTP-сервер сообщает ОС пропинговать его, когда приходят данные (или другое сообщение). ОС знает, когда это произойдет, потому что драйвер сетевой карты сообщает об этом. А драйвер сетевого адаптера получает информацию от самого сетевого адаптера, который на самом деле имеет собственное программное обеспечение для интерпретации электрических сигналов на сетевом кабеле (или беспроводных сигналов в воздухе и т. Д., Вы поймете).
Примечание стороны :
Если вы хотите узнать больше о том, как NIC может инициировать связь с драйвером / ОС, вам может потребоваться просмотреть некоторую основную информацию о аппаратных прерываниях - в основном, независимо от того, что процессор в данный момент делает, останавливается, и поток программы переключается на прерывание. подпрограмма обработчика - чрезвычайно простой кусок кода, который заботится об уведомлении системы, а затем немедленно возвращает управление обратно к исходной вещи, которую делал процессор. Фактически, это может ответить на многие вопросы о внутренней работе ОС и самого компьютера - например, как операционная система может «красть» ЦП из запущенных приложений и перетасовывать ресурсы ЦП между различными приложениями, работающими одновременно, даже если они не сотрудничают.
Вернемся к делу:
В своей телефонной аналогии представьте, что ваш телефон на самом деле не звонит. Чтобы узнать, если у вас есть попытка телефонного звонка, вам придется периодически смотреть на экран и проверять. Чтобы упростить управление для HTTP-сервера (поскольку эта периодическая проверка уже выполняется довольно многими слоями), вы можете заблокировать попытку проверки.
Таким образом, вместо проверки, видя, что там ничего нет, и проверки снова, вы в основном все время смотрите на экран. Тем не менее, у вас в основном есть отдельная система для обработки этого (в вашем случае, слуховой центр, который проверяет вибрации воздуха на предмет полезной информации, звон), так что на самом деле он не требует вашего внимания (время процессора).
Это еще более улучшено с помощью методов, которые позволяют вам контролировать много соединений одновременно (IOCP). Это все ближе и ближе к системе телефонных звонков - у вас есть комната с десятью тысячами телефонов, но вы заботитесь только о тех, которые звонят в данный момент, другие не привлекают вашего внимания.