MSerhio
@MSerhio
Вхожу в IT

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

Здравствуйте!
Как взаимодействуют между собой протоколы разных уровней сетевых моделей (OSI и пр.)?
Много написано о самих уровнях, но о том, как данные перемещаются между ними, обычно не говорят. Ну или я не нашел / не понял.
Сама по себе мысль, что протокол вышележащиего уровня вкладывается в качестве полезной нагрузки в протокол нижележащего уровня - понятна.
Как именно это происходит?
Например, браузер. Вот мы ввели qna.habr.com, браузер хочет открыть HTTP соединение. Он формирует набор данных для передачи, затем стучится вниз, на уровень TCP, и говорит: "вот у меня пачка данных, передай их серверу на таком-то адресе". TCP, в свою очередь, стучится на уровень IP и просит о том же самом?
Тогда что конкретно означает "стучится вниз/вверх"? Ищет службу, которая может обслужить подобный запрос, и связывается с ней через некоторый интерфейс межпроцессного взаимодействия?
Спасибо.
  • Вопрос задан
  • 323 просмотра
Решения вопроса 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
Ответ написан
Никто никуда не стучится.
Просто "открытие http соединения" подразумевает собой открытие TCP.
Открытие TCP подразумевает, что сетевая карта будет отправлять IP-датаграммы и так далее.
Ответ написан
@res2001
Developer, ex-admin
Взаимодействие между уровнями - это детали реализации.
Тот же TCP/IP можно реализовать очень по разному с разными интерфейсами для прикладного приложения.
Наиболее распространенное сейчас сетевое API это Berkeley Sockets (или просто сокеты). Сокеты реализуют в т.ч. и взаимодействие по TCP/IP. Есть и другие сетевые API, например TLI, но я никогда в реальности не встречал его использования.
Сетевое API - это то с помощью чего прикладной программист использует сеть. Внутри тех же сокетов есть свои интерфейсы для передачи между сетевыми уровнями.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы