Взаимодействие уровней сетевых моделей?
что конкретно означает "стучится вниз/вверх"? Ищет службу, которая может обслужить подобный запрос, и связывается с ней через некоторый интерфейс межпроцессного взаимодействия?Часть имплементации сетевого стека содержится в ядре операционной системы, часть - в драйвере сетевого адаптера, часть - в железе сетевого адаптера. Некоторые протоколы вынесены в службы\демоны (ppp, pptp, openvpn,..). Протоколы 6-го и 7-го уровня реализуются либо в службах, либо в прикладных программах.
Например, браузер. Вот мы ввели qna.habr.com, браузер хочет открыть HTTP соединение. Он формирует набор данных для передачи, затем стучится вниз, на уровень TCP, и говорит: "вот у меня пачка данных, передай их серверу на таком-то адресе". Браузер сначала на уровне API операционной системы обращается к резолверу (клиенту DNS), резолвер (сперва проверив свой кэш) берёт адрес DNS-сервера из настроек ОС и стучится на порт 53/UDP с запросом, а не "ищет службу". Получает ответ и передаёт его браузеру. Браузер запоминает IP-адрес хоста qna.habr.com и снова через API операционной системы говорит "хочу установить соединение с хостом, адрес такой-то, порт 443/TCP". ОС устанавливает соединение, сообщает об этом браузеру и передаёт какой-то там хэндлер, через который можно использовать уже готовое TCP-соединение. Дальше браузер просто заливает свои данные в соединение, и читает оттуда же ответы. Более высокий уровень - протокол 7-го уровня http - браузер реализует самостоятельно, вот прямо самостоятельно, никого ни о чём не просит, когда дело в http. Более низкие уровни - как уже сказал, на совести ОС, драйвера, железа. Чтобы обеспечить высокую эффективность, там взаимодействие довольно низкоуровневое, такая каша, что не только в рамках ответа, а даже в рамках статьи не описать, целая книга нужна, а то и не одна. Причём для каждой ОС своя отдельная книга, в Linux сетевой стек будет отличаться от сетевого стека Windows, сетевого стека MacOS, сетевого стека BSD.
Никто никуда не стучится.
Просто "открытие http соединения" подразумевает собой открытие TCP.
Открытие TCP подразумевает, что сетевая карта будет отправлять IP-датаграммы и так далее.