MSerhio
@MSerhio
Вхожу в IT

Взаимодействие уровней сетевых моделей?

Здравствуйте!
Как взаимодействуют между собой протоколы разных уровней сетевых моделей (OSI и пр.)?
Много написано о самих уровнях, но о том, как данные перемещаются между ними, обычно не говорят. Ну или я не нашел / не понял.
Сама по себе мысль, что протокол вышележащиего уровня вкладывается в качестве полезной нагрузки в протокол нижележащего уровня - понятна.
Как именно это происходит?
Например, браузер. Вот мы ввели qna.habr.com, браузер хочет открыть HTTP соединение. Он формирует набор данных для передачи, затем стучится вниз, на уровень TCP, и говорит: "вот у меня пачка данных, передай их серверу на таком-то адресе". TCP, в свою очередь, стучится на уровень IP и просит о том же самом?
Тогда что конкретно означает "стучится вниз/вверх"? Ищет службу, которая может обслужить подобный запрос, и связывается с ней через некоторый интерфейс межпроцессного взаимодействия?
Спасибо.
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
hint000
@hint000
у админа три руки
что конкретно означает "стучится вниз/вверх"? Ищет службу, которая может обслужить подобный запрос, и связывается с ней через некоторый интерфейс межпроцессного взаимодействия?
Часть имплементации сетевого стека содержится в ядре операционной системы, часть - в драйвере сетевого адаптера, часть - в железе сетевого адаптера. Некоторые протоколы вынесены в службы\демоны (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.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev Куратор тега Компьютерные сети
software engineer
А что ты уже читал хотябы в википедии?

Ну вот например протокол низкого уровня - мы по кабелю пересылаем данные при помощи дискретного сигнала. Это же явно уровень ниже, чем HTTP
или вместо кабеля на каком-то этапе нам нужно перейти на wifi, и передавать данные уже радиоволной, со своими особенностями, синхронизацией сигнала, отвержением отраженных повторений.

Разные уровни могут работать по-разному, для этого читается их спецификация.
Стандартизация была введена для того, чтобы можно было придумать свою реализацию чего-либо, и внедрить в остальной стек так, чтобы выше/нижележащие протоколы продолжали работать как работали.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
На примере письма

Вы пишете письмо- прикладной уровень
Либо электронное либо бумажное протокольный уровень
Его доставляют либо по земле либо по воздуху либо по энтернету это уже физика
На каждом уровне лепят марку от кого и куда

Когда идёт в обратную эти марки снимают и вы получаете ответ в итоге ваше письмо выглядит так в идеале

7654321234567
Ответ написан
vabka
@vabka
Токсичный шарпист
Никто никуда не стучится.
Просто "открытие http соединения" подразумевает собой открытие TCP.
Открытие TCP подразумевает, что сетевая карта будет отправлять IP-датаграммы и так далее.
Ответ написан
@res2001
Developer, ex-admin
Взаимодействие между уровнями - это детали реализации.
Тот же TCP/IP можно реализовать очень по разному с разными интерфейсами для прикладного приложения.
Наиболее распространенное сейчас сетевое API это Berkeley Sockets (или просто сокеты). Сокеты реализуют в т.ч. и взаимодействие по TCP/IP. Есть и другие сетевые API, например TLI, но я никогда в реальности не встречал его использования.
Сетевое API - это то с помощью чего прикладной программист использует сеть. Внутри тех же сокетов есть свои интерфейсы для передачи между сетевыми уровнями.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы