Опишите сетевую модель OSI. Как она соотносится с моделью TCP/IP?

Ответ

Сетевая модель OSI (Open Systems Interconnection) — это концептуальная модель, которая стандартизирует сетевые функции, разделяя их на 7 логических уровней. Каждый уровень обслуживает вышестоящий уровень и использует сервисы нижестоящего.

Семь уровней модели OSI (сверху вниз):


  1. Прикладной (Application): Предоставляет интерфейс для взаимодействия приложений с сетью. Протоколы: HTTP, FTP, SMTP, DNS.



  2. Представления (Presentation): Отвечает за преобразование, шифрование и сжатие данных, чтобы они были понятны приложению на другом конце. Примеры: JSON, XML, SSL/TLS.



  3. Сеансовый (Session): Устанавливает, управляет и завершает сеансы (соединения) между приложениями. Отвечает за аутентификацию и авторизацию.



  4. Транспортный (Transport): Обеспечивает надёжную сквозную (end-to-end) доставку данных между хостами. Управляет сегментацией данных и контролем потока. Протоколы: TCP (с гарантией доставки) и UDP (без гарантии).



  5. Сетевой (Network): Отвечает за логическую адресацию (IP-адреса) и маршрутизацию пакетов данных через несколько сетей. Протоколы: IP (IPv4/IPv6), ICMP.



  6. Канальный (Data Link): Обеспечивает передачу кадров (frames) между двумя узлами, соединенными напрямую. Отвечает за физическую адресацию (MAC-адреса) и обнаружение ошибок. Протоколы: Ethernet, Wi-Fi.



  7. Физический (Physical): Отвечает за передачу необработанных битов по физической среде (кабели, радиоволны). Определяет характеристики среды: напряжение, частоты, разъемы.


Соотношение с моделью TCP/IP:

Модель TCP/IP — это более практическая, реализованная модель, которая используется в современном интернете. Она состоит из 4 уровней, которые соотносятся с OSI следующим образом:

Модель TCP/IPУровни модели OSI
Application7. Прикладной, 6. Представления, 5. Сеансовый
Transport4. Транспортный
Internet3. Сетевой
Network Access2. Канальный, 1. Физический

Пример в Go:

// net.Dial работает на Транспортном (TCP) и Сетевом (IP) уровнях.
// "tcp" - протокол 4-го уровня, "example.com:80" - разрешается в IP-адрес (3-й уровень) и порт.
conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

// Отправка HTTP-запроса - это работа на Прикладном уровне (7-й уровень OSI).
// Мы формируем текстовые данные по протоколу HTTP.
request := "GET / HTTP/1.1rnHost: example.comrnrn"
_, err = fmt.Fprint(conn, request)
if err != nil {
    log.Fatal(err)
}