Что происходит при разрыве TCP-соединения?

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

Ответ

Корректный разрыв TCP-соединения происходит по алгоритму «четырехэтапного рукопожатия» (Four-way handshake):

  1. Сторона, инициирующая закрытие (клиент), отправляет пакет с флагом FIN.
  2. Вторая сторона (сервер) отправляет ACK в подтверждение FIN.
  3. Сервер, когда будет готов, отправляет свой FIN.
  4. Клиент отправляет ACK на FIN сервера.

После этого ресурсы соединения освобождаются.

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

  • Внезапный обрыв (сбой сети, хост): Система обнаружит это по таймаутам и отсутствию ACK на повторно отправляемые (ретранслируемые) пакеты. Параметры ретрансмиссии и таймаута (например, tcp_retries2) настраиваются в ядре ОС.
  • Состояние TIME_WAIT: Сторона, отправившая финальный ACK, переходит в состояние TIME_WAIT (удвоенное максимальное время жизни сегмента, 2*MSL). Это необходимо для корректной обработки «заблудившихся» пакетов. В высоконагруженных сервисах это может привести к исчерпанию портов.
    # Проверить текущие соединения, включая TIME_WAIT
    ss -tan state time-wait
    # Настроить параметры для reuse портов (в /etc/sysctl.conf)
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30 # Уменьшить время FIN_TIMEOUT