Как TCP гарантирует доставку пакетов?

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

Ответ

TCP обеспечивает надёжную, упорядоченную доставку данных через комбинацию нескольких ключевых механизмов. С точки зрения DevOps, понимание этих механизмов критично для настройки сетевых таймаутов и диагностики проблем производительности.

Основные механизмы:

  1. Последовательные номера и подтверждения (ACK): Каждый байт данных имеет порядковый номер. Получатель отправляет подтверждение (ACK), указывая номер следующего ожидаемого байта. Если отправитель не получает ACK в течение таймаута повторной передачи (RTO), который динамически вычисляется на основе RTT (Round-Trip Time), пакет считается утерянным.
  2. Повторная передача: Неподтверждённые данные отправляются заново.
  3. Контроль перегрузки: TCP не просто ждёт таймаут, а пытается избежать перегрузки сети. Алгоритмы вроде Slow Start и Congestion Avoidance регулируют размер «окна перегрузки», определяя, сколько данных можно отправить без подтверждения.

Практическое значение для DevOps:

  • Таймауты в приложениях: Таймаут на уровне приложения (например, в HTTP-клиенте) должен быть значительно больше, чем TCP-таймауты на системном уровне, чтобы позволить протоколу выполнить свою работу по повторной передаче.
  • Настройка ядра Linux: Параметры, управляющие поведением TCP (например, net.ipv4.tcp_retries2), влияют на то, как долго система будет пытаться повторно отправить данные перед окончательным разрывом соединения.
  • Мониторинг: Высокий уровень ретрасмитов (retransmissions) в метриках сети (видимых через ss -i или мониторинг типа node_exporter) — явный индикатор проблем с сетью или перегрузки.