Компьютерные сети

6.1 TCP

Что такое TCP?

TCP (Transmission Control Protocol) — протокол транспортного уровня, который обеспечивает надежную, упорядоченную доставку данных между приложениями. Работает поверх ненадежного IP.

Аналогия: Если IP — это "почтовая служба без гарантий", то TCP — это "заказная почта с подтверждением получения". TCP гарантирует, что данные дойдут и в правильном порядке.

Основные характеристики TCP

Ключевые особенности:

  • Надежность: Гарантирует доставку данных (если пакет потерян, он будет переотправлен)
  • Упорядочивание: Данные приходят в правильном порядке
  • Установление соединения: Перед передачей данных устанавливается соединение (connection-oriented)
  • Контроль потока: Управляет скоростью передачи, чтобы не перегрузить получателя
  • Управление перегрузкой: Адаптируется к загрузке сети

Установление соединения: трехстороннее рукопожатие

Перед передачей данных TCP устанавливает соединение через процесс, называемый "трехстороннее рукопожатие":

Процесс установления соединения:

  1. SYN — клиент отправляет запрос на установление соединения с начальным номером последовательности
  2. SYN-ACK — сервер подтверждает запрос и отправляет свой начальный номер последовательности
  3. ACK — клиент подтверждает получение SYN-ACK, соединение установлено

Порты: TCP использует порты для идентификации приложений. Например, порт 80 для HTTP, порт 443 для HTTPS, порт 22 для SSH.

Надежность: подтверждения и повторные передачи

Как TCP обеспечивает надежность:

  • Нумерация байтов: Каждый байт имеет номер последовательности
  • Подтверждения (ACK): Получатель подтверждает получение данных
  • Таймауты: Если подтверждение не пришло в течение определенного времени, данные переотправляются
  • Проверка целостности: Контрольная сумма проверяет, не повреждены ли данные

Контроль потока: окно получателя

Окно получателя (rwnd) — это размер буфера получателя, который показывает, сколько данных он может принять. Отправитель не может отправить больше данных, чем позволяет окно получателя.

Как работает контроль потока:

  • Получатель сообщает размер доступного буфера в поле "Window Size"
  • Отправитель не отправляет больше данных, чем позволяет окно
  • Когда получатель обработал данные, он увеличивает окно
  • Это предотвращает переполнение буфера получателя

Управление перегрузкой

TCP автоматически адаптируется к загрузке сети, чтобы не перегружать каналы:

Механизмы управления перегрузкой:

  • Медленный старт: Начинает с малой скорости и постепенно увеличивает
  • Избегание перегрузок: При обнаружении потерь уменьшает скорость
  • Fast Retransmit: Быстрая переотправка при получении дублирующихся ACK
  • Congestion Window (cwnd): Окно перегрузки ограничивает количество неотправленных данных

Завершение соединения: четырехшаговое закрытие

Процесс закрытия соединения:

  1. FIN — одна сторона отправляет запрос на закрытие
  2. ACK — другая сторона подтверждает получение FIN
  3. FIN — вторая сторона также отправляет FIN (может отправить данные перед этим)
  4. ACK — первая сторона подтверждает, соединение закрыто

TIME_WAIT: После закрытия соединения сторона, которая инициировала закрытие, ждет 2×MSL (Maximum Segment Lifetime) перед освобождением ресурсов. Это нужно, чтобы убедиться, что все пакеты дошли.

Состояния TCP-соединения

Основные состояния:

  • CLOSED — соединение закрыто
  • LISTEN — сервер ждет входящих соединений
  • SYN-SENT — клиент отправил SYN, ждет ответа
  • SYN-RECEIVED — сервер получил SYN, отправил SYN-ACK
  • ESTABLISHED — соединение установлено, идет передача данных
  • FIN-WAIT — ожидание подтверждения закрытия
  • CLOSE-WAIT — ожидание закрытия от приложения
  • TIME-WAIT — ожидание перед полным закрытием

Резюме

Ключевые моменты:

  • TCP — надежный протокол транспортного уровня с установлением соединения
  • Трехстороннее рукопожатие: SYN → SYN-ACK → ACK для установления соединения
  • Надежность: Подтверждения, нумерация, повторные передачи
  • Контроль потока: Окно получателя ограничивает скорость передачи
  • Управление перегрузкой: Автоматическая адаптация к загрузке сети
  • Четырехшаговое закрытие: FIN → ACK → FIN → ACK

Цель: Обеспечить надежную, упорядоченную доставку данных между приложениями поверх ненадежной сети IP.

6.2 UDP

UDP — простой дейтаграммный протокол без установления соединения и подтверждений. Минимальные накладные расходы и отсутствие механизма восстановления потерь делают его подходящим для приложений, где критичны задержки и допускаются потери: голос/видео в реальном времени, DNS, игры.

Особенности UDP

  • Заголовок 8 байт: порты источника/назначения, длина, контрольная сумма (обязательна в IPv6).
  • Отсутствие порядка/доставки: логика повторов и упорядочивания реализуется приложением при необходимости.
  • Use‑cases: QUIC/HTTP/3 (на базе UDP), DNS, RTP/SRTP.

6.3 Порты

Порты (0–65535) определяют конечную точку взаимодействия на хосте и совместно с IP‑адресом образуют сокет. Диапазоны: известные (0–1023), зарегистрированные (1024–49151), динамические/частные (49152–65535).

Практические аспекты

  • Сокеты: {srcIP:srcPort → dstIP:dstPort} уникально идентифицируют соединение TCP.
  • Эфемерные порты: динамически выделяются клиентам для исходящих соединений.
  • Безопасность: фильтрация/ограничение открытых портов, принцип наименьших привилегий.
# Просмотр прослушиваемых портов
# Windows
netstat -ano | findstr LISTENING
# Linux/macOS
ss -tulpen

6.4 Для профессионалов

  • Window Scaling: расширяет размер окна и повышает Throughput на высоколатентных каналах.
  • QUIC (HTTP/3): транспорт поверх UDP с шифрованием и мультиплексированием потоков.
  • PMTUD и MSS Clamping: обнаружение MTU по пути, настройка MSS на границах (особенно при туннелях/VPN).
  • Алгоритмы перегрузок: CUBIC (дефолт в Linux), BBR (Google) — выбор влияет на латентность/пропускную способность.

Настройки

Цветовая схема

Тема