Зачем нужен транспортный уровень?
Сетевой уровень (IP) доставляет пакеты до компьютера. Но на компьютере работает много программ одновременно: браузер, почта, мессенджер, игра...
Вопрос:
Как понять, какой программе предназначены данные?
Для этого придумали порты — числовые идентификаторы программ.
Аналогия: IP-адрес — это адрес многоквартирного дома. Порт — это номер квартиры.
Что такое порт?
Порт — число от 0 до 65535, которое указывает на конкретное приложение.
Когда вы открываете сайт, браузер отправляет запрос на:
- IP-адрес сервера (например, 142.250.185.14)
- Порт 443 (потому что это HTTPS)
Сервер знает: «Раз порт 443 — значит, это запрос к веб-серверу, а не к почте».
TCP и UDP — два способа доставки
На транспортном уровне работают два протокола. Они решают одну задачу (доставить данные приложению), но делают это по-разному.
TCP — надёжная доставка
TCP = Transmission Control Protocol = Протокол управления передачей
Что означает название?
- Transmission — передача данных
- Control — контроль (проверяем, дошли ли данные)
- Protocol — набор правил
Как работает TCP?
- Устанавливает соединение перед отправкой
- Нумерует каждый пакет
- Ждёт подтверждения от получателя
- Повторяет отправку, если пакет потерялся
- Собирает пакеты в правильном порядке
Аналогия: Заказное письмо с уведомлением о вручении. Вы точно узнаете, дошло ли письмо. Если не дошло — отправите снова.
Где используется 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 — Закрытие соединения
Всё это происходит за доли секунды!