TCP-рукопожатие (TCP handshake)

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

Коротко о главном

TCP-рукопожатие (three-way handshake) — процесс установления надёжного полнодуплексного соединения между клиентом и сервером на транспортном уровне (L4) модели OSI. Состоит из трёх шагов: SYN (клиент отправляет случайный порядковый номер), SYN-ACK (сервер подтверждает номер клиента +1 и отправляет свой), ACK (клиент подтверждает номер сервера, соединение установлено). Увеличение счетчиков порядкового номера (sequence numbers) и проверка номеров последовательности приходящих пакетов могут стать частью защиты от простых DDoS-атак. 

Как устанавливается TCP-соединение

Трёхэтапное рукопожатие TCP состоит из следующих шагов:

  1. SYN (Synchronize):
    Клиент отправляет сегмент с установленным флагом SYN. При этом сегменту присваивается произвольный порядковый номер (sequence number) в интервале от 1 до 232 (т.н. initial sequence number), относительно которого будет вестись дальнейший отсчет последовательности сегментов в соединении.
  2. SYN-ACK (Synchronize-Acknowledge):
    Сервер получает запрос и отправляет ответный сегмент с одновременно установленными флагами SYN+ACK, при этом записывает в поле «номер подтверждения» (acknowledgement number), полученный порядковый номер, увеличенный на 1 (что подтверждает получение первого сегмента), а также устанавливает свой порядковый номер, который, как и в SYN-сегменте, выбирается произвольно.
  3. ACK (Acknowledge):
    После получения клиентом сегмента с флагами SYN+ACK соединение считается установленным, клиент, в свою очередь, отправляет в ответ сегмент с флагом ACK, обновленными номерами последовательности, и не содержащий полезной нагрузки. Начинается передача данных.

Схема тройного рукопожатия TCP handshake

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

Принцип работы TCP-рукопожатия

В процессе передачи данных клиент и сервер обмениваются сегментами с установленными флагами ACK или PSH+ACK, поочередно подтверждая число полученных пакетов путем увеличения счетчиков порядкового номера (sequence number) и подтверждения (acknowledgement number).

Этапы 1, 2 определяют параметр подключения (порядковый номер) для одного направления, и подтверждают его. Этапы 2, 3 определяют параметр подключения для другого направления, и также подтверждают его. С их помощью устанавливается полнодуплексная связь.

Интересно, что начальные параметры SYN выбираются случайным образом при установлении соединений между клиентом и сервером.

В заключение стоит добавить, что проверка номеров последовательности приходящих пакетов и принципов, используемых при three-way handshake, позволяют реализовать простейшие методы фильтрации DDoS-атак.

Автор: Юлия Ильина, технический эксперт StormWall

Защита сервисов TCP/UDP от DDoS-атак

  • Подключение за 10 минут
  • Поддержка 24×7