Ответ
Модель OSI (Open Systems Interconnection) — это эталонная модель, описывающая 7 уровней взаимодействия в сетях. Она стандартизирует коммуникацию между различными системами, где каждый уровень выполняет строго определённую функцию, предоставляя сервисы уровню выше и используя сервисы уровня ниже.
Семь уровней модели OSI:
- Физический (Physical) — передача битовых потоков по физической среде (медный кабель, оптоволокно, радиоволны).
- Канальный (Data Link) — формирование кадров (frames), управление доступом к среде (MAC), обнаружение и коррекция ошибок (например, Ethernet).
- Сетевой (Network) — логическая адресация (IP-адреса) и маршрутизация пакетов между сетями (протоколы IP, ICMP).
- Транспортный (Transport) — обеспечение сквозной надёжности, управление потоком и сегментация данных (TCP — надёжный, UDP — ненадёжный).
- Сеансовый (Session) — установление, управление и завершение сеансов связи между приложениями.
- Представления (Presentation) — преобразование данных (шифрование, сжатие, кодирование) в форму, понятную прикладному уровню.
- Прикладной (Application) — интерфейс для сетевых сервисов, с которыми взаимодействует пользователь (HTTP, FTP, SMTP).
Пример в контексте сетевого программирования на C/C++: При создании TCP-клиента мы напрямую работаем с сокетами, которые абстрагируют работу транспортного (4) и сетевого (3) уровней.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
// Создание сокета (уровень 4 - транспортный, выбор TCP)
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET; // Уровень 3 - сетевой (IPv4)
server_addr.sin_port = htons(80); // Уровень 4 - транспортный (порт)
inet_pton(AF_INET, "93.184.216.34", &server_addr.sin_addr); // Уровень 3 - IP-адрес
// Установление соединения (уровень 4 - транспортный, handshake TCP)
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
// Отправка HTTP-запроса (уровень 7 - прикладной, протокол HTTP)
const char *msg = "GET / HTTP/1.1rnHost: example.comrnrn";
send(sockfd, msg, strlen(msg), 0);
// ...
}
Модель OSI помогает понять, как данные инкапсулируются: HTTP-запрос (уровень 7) упаковывается в сегмент TCP (уровень 4), который помещается в IP-пакет (уровень 3), а тот — в Ethernet-кадр (уровень 2) для передачи по проводу (уровень 1).