Какие ключевые требования и механизмы обеспечивает протокол TCP?

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

Ответ

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

  1. Установление соединения (3-way handshake): Гарантирует, что обе стороны готовы к обмену данными перед его началом.

    Клиент -> Сервер: SYN (seq=x)
    Сервер -> Клиент: SYN-ACK (seq=y, ack=x+1)
    Клиент -> Сервер: ACK (seq=x+1, ack=y+1)
    Соединение установлено.
  2. Надежная доставка и подтверждение (ACK): Каждый полученный сегмент должен быть подтвержден (ACK). Если отправитель не получает ACK в течение таймаута, сегмент отправляется повторно.

  3. Упорядочивание (Sequence Numbers): Каждому байту в потоке присваивается порядковый номер. Получатель собирает сегменты в правильном порядке, даже если они пришли в сети в другом.

  4. Контроль потока (Flow Control - Sliding Window): Предотвращает "переполнение" получателя. Получатель сообщает отправителю размер своего "окна" — сколько байт он готов принять без подтверждения. Это динамически регулирует скорость отправки.

  5. Управление перегрузками (Congestion Control): Предотвращает перегрузку сети. Алгоритмы (как Reno или CUBIC) эмпирически определяют доступную пропускную способность, начиная с медленного старта (slow start), и адаптируют размер окна перегрузки (congestion window). При обнаружении потерь пакетов (дублирующие ACK или таймаут) окно уменьшается.

  6. Контрольная сумма (Checksum): Проверяет целостность заголовка и данных. Поврежденные сегменты отбрасываются и не подтверждаются, что инициирует повторную передачу.

Пример из практики DevOps: При настройке высоконагруженных сервисов (например, балансировщика HAProxy или веб-сервера Nginx) мы тонко настраиваем параметры ядра Linux, связанные с TCP (net.ipv4.tcp_keepalive_time, net.ipv4.tcp_max_syn_backlog, net.core.somaxconn), чтобы оптимизировать поведение TCP-стеков под конкретную нагрузку и снизить задержки.