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

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

Что такое трехсторонее рукопожатие (TCP handshake)?

Чтобы установить надежное соединение, TCP использует процесс, называемый термином “трехстороннее рукопожатие” (TCP three-way/triple handshake). Установленное соединение будет полнодуплексным, то есть оба канала могут передавать информацию одновременно, а также они синхронизируют (SYN) и подтверждают (ACK) друг друга. Обмен выполняется следующим образом:

1) Клиент отправляет сегмент с установленным флагом SYN. При этом сегменту присваивается произвольный порядковый номер (sequence number) в интервале от 1 до 232 (т.н. initial sequence number), относительно которого будет вестись дальнейший отсчет последовательности сегментов в соединении.

2) Сервер получает запрос и отправляет ответный сегмент с одновременно установленными флагами SYN+ACK, при этом записывает в поле «номер подтверждения» (acknowledgement number), полученный порядковый номер, увеличенный на 1 (что подтверждает получение первого сегмента), а также устанавливает свой порядковый номер, который, как и в SYN-сегменте, выбирается произвольно.

3) После получения клиентом сегмента с флагами SYN+ACK соединение считается установленным, клиент, в свою очередь, отправляет в ответ сегмент с флагом ACK, обновленными номерами последовательности, и не содержащий полезной нагрузки.

4) Начинается передача данных.

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

Схема TCP рукопожатия

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

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

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

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

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