Часто встречал на собеседовании кандидатов, которые легко отвечают на вопросы по языкам программирования, фреймворкам, паттернам и методологиям. Но как только задаешь вопрос «Зачем нужно так много уровней в модели OSI?» тут приходит конец уверенности кандидата. Давайте ответим на этот вопрос.
На приведенной диаграмме показано, как данные инкапсулируются и деинкапсулируются при передаче по сети. Данные передаются в процессе осуществления покупок в интернет-магазине (Сервер) клиентом с мобильного устройства (пусть будет iPhone).
Шаг 1. когда iPhoneотправляет данные на Сервер по сети по протоколу HTTP, к нему сначала добавляется заголовок HTTP на уровне приложения.
Шаг 2: затем к данным добавляется заголовок TCP или UDP. Он инкапсулируется в сегменты TCP на транспортном уровне. Заголовок содержит исходный порт, порт назначения и порядковый номер.
Шаг 3: затем сегменты инкапсулируются с заголовком IP на сетевом уровне. Заголовок IP содержит IP-адреса источника/получателя.
Шаг 4: в дейтаграмму IP добавляется заголовок MAC на канальном уровне с MAC-адресами источника/получателя.
Шаг 5: инкапсулированные фреймы отправляются на физический уровень и затем передаются по сети в виде двоичных битов.
Шаги 6–10. когда Сервер получает биты из сети, он выполняет процесс деинкапсуляции. Заголовки удаляются слой за слоем, и, в конце концов, Сервер может считывать данные.
Нам нужны уровни в сетевой модели, потому что каждый уровень фокусируется на своих собственных обязанностях.