12. Транспортный уровень (Уровень 4)


Зачем нужен транспортный уровень?

Сетевой уровень (IP) доставляет пакеты до компьютера. Но на компьютере работает много программ одновременно: браузер, почта, мессенджер, игра...

Вопрос: Как понять, какой программе предназначены данные?
Для этого придумали порты — числовые идентификаторы программ.

Аналогия: IP-адрес — это адрес многоквартирного дома. Порт — это номер квартиры.

Что такое порт?

Порт — число от 0 до 65535, которое указывает на конкретное приложение.
Когда вы открываете сайт, браузер отправляет запрос на:
  • IP-адрес сервера (например, 142.250.185.14)
  • Порт 443 (потому что это HTTPS)

Сервер знает: «Раз порт 443 — значит, это запрос к веб-серверу, а не к почте».

TCP и UDP — два способа доставки

На транспортном уровне работают два протокола. Они решают одну задачу (доставить данные приложению), но делают это по-разному.
TCP — надёжная доставка
TCP = Transmission Control Protocol = Протокол управления передачей

Что означает название?
  • Transmission — передача данных
  • Control — контроль (проверяем, дошли ли данные)
  • Protocol — набор правил

Как работает TCP?
  1. Устанавливает соединение перед отправкой
  2. Нумерует каждый пакет
  3. Ждёт подтверждения от получателя
  4. Повторяет отправку, если пакет потерялся
  5. Собирает пакеты в правильном порядке

Аналогия: Заказное письмо с уведомлением о вручении. Вы точно узнаете, дошло ли письмо. Если не дошло — отправите снова.

Где используется TCP?
  • Веб-страницы (HTTP/HTTPS)
  • Электронная почта (SMTP, POP3, IMAP)
  • Передача файлов (FTP)
  • Удалённый доступ (SSH)

Везде, где важно получить ВСЕ данные без потерь.


UDP — быстрая доставка

UDP = User Datagram Protocol = Протокол пользовательских датаграмм

Что означает название?
  • User — пользовательский (прикладной)
  • Datagram — отдельный независимый пакет данных
  • Protocol — набор правил

Как работает UDP?
  • Не устанавливает соединение — сразу отправляет
  • Не ждёт подтверждения — отправил и забыл
  • Не повторяет потерянные пакеты
  • Не гарантирует порядок — пакеты могут прийти вразнобой

Аналогия: Крикнуть в толпу. Быстро, но не факт, что все услышат. И переспрашивать не будете.

Где используется UDP?
  • Видеозвонки и стриминг (YouTube, Twitch, Zoom)
  • Онлайн-игры
  • DNS-запросы
  • VoIP (интернет-телефония)

Везде, где скорость важнее надёжности. Если потеряется один кадр видео — не страшно, картинка чуть дёрнется. Но если ждать подтверждения каждого кадра — видео будет тормозить.


TCP 3-Way Handshake — рукопожатие
Перед отправкой данных TCP устанавливает соединение. Это называется 3-way handshake (тройное рукопожатие).

Что означают термины?
Термин Расшифровка Значение
SYN Synchronize «Хочу синхронизироваться / начать разговор»
ACK Acknowledge «Подтверждаю / понял»
SYN-ACK SYN + ACK «Понял, тоже хочу начать разговор»

Как происходит рукопожатие?
Клиент                              Сервер
   │                                   │
   │ ──── 1. SYN ──────────────────►   │  "Привет! Хочу поговорить"
   │                                   │
   │ ◄─── 2. SYN-ACK ──────────────    │  "Привет! Слышу тебя. Тоже хочу"
   │                                   │
   │ ──── 3. ACK ──────────────────►   │  "Отлично, начинаем!"
   │                                   │
   │ ◄───── ДАННЫЕ ───────────────►    │  Теперь можно передавать данные


Зачем нужны три шага? 
Почему не один?
    Клиент отправил SYN, но не знает, получил ли сервер. Может, сервер выключен.
Почему не два?
    Сервер ответил SYN-ACK, но не знает, получил ли клиент ответ. Может, ответ потерялся.
Три шага — минимум, чтобы ОБЕ стороны убедились, что связь работает в обе стороны.

Завершение соединения (4-Way Handshake)
Закрытие соединения требует 4 шага:
Клиент                              Сервер
   │ ──── FIN ─────────────────────►  │  "Я закончил отправлять"
   │ ◄─── ACK ─────────────────────   │  "Понял"
   │ ◄─── FIN ─────────────────────   │  "Я тоже закончил"
   │ ──── ACK ─────────────────────►  │  "Понял, пока!"
FIN = Finish = «Заканчиваю»


Как это выглядит на практике?
Когда вы открываете google.com:

SYN → Ваш браузер: «Гугл, хочу соединиться!»
SYN-ACK ← Гугл: «Окей, давай!»
ACK → Браузер: «Отлично!»
HTTP-запрос → Браузер: «Дай мне главную страницу»
HTTP-ответ ← Гугл: «Держи HTML-код страницы»
FIN/ACK — Закрытие соединения

Всё это происходит за доли секунды!

time 1000 ms
memory 256 Mb

Комментарий учителя