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

«Что такое протокол TCP?» — вопрос из категории Сети, который задают на 28% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые характеристики TCP:

  • Надежность: Гарантирует доставку данных. Использует подтверждения (ACK), повторные передачи (retransmission) и контрольные суммы.
  • Установка соединения (3-way handshake): Перед обменом данными клиент и сервер устанавливают логическое соединение.
    1. Клиент → Сервер: SYN (синхронизация)
    2. Сервер → Клиент: SYN-ACK (подтверждение + синхронизация)
    3. Клиент → Сервер: ACK (подтверждение)
  • Управление потоком (Flow Control): Предотвращает переполнение буфера получателя с помощью механизма скользящего окна.
  • Управление перегрузкой (Congestion Control): Динамически регулирует скорость отправки данных, чтобы не перегрузить сеть.
  • Полнодуплексная связь: Данные могут передаваться в обоих направлениях одновременно.

С точки зрения DevOps и администрирования:

  • Порты: TCP использует порты для идентификации сервисов (например, 80 — HTTP, 443 — HTTPS, 22 — SSH).
  • Мониторинг: Утилиты вроде netstat, ss или tcpdump используются для диагностики TCP-соединений.
  • Настройка ядра: Параметры ядра Linux (/proc/sys/net/ipv4/tcp_*) позволяют тонко настраивать поведение TCP (таймауты, размеры буферов, алгоритмы управления перегрузкой).

Пример использования в инфраструктуре: Когда балансировщик нагрузки (например, NGINX) принимает TCP-соединение от клиента и проксирует его на бэкенд-сервер, он работает на транспортном уровне, обеспечивая надежную передачу запросов и ответов.

Отличие от UDP: В отличие от ненадежного и дейтаграммного UDP, TCP жертвует скоростью и накладными расходами на установку соединения и подтверждения ради гарантии доставки и порядка пакетов.