TCP handshake — как он происходит


TCP handshake (или TCP рукопожатие) стандартная процедура установления соединения, которая выполняется каждый раз при установлении TCP соединения.


TCP handshake по этапам


Всегда присутствуют три этапа:


  • SYN — отправитель посылает syn, уведомляя о желании начать передачу
  • SYN-ACK — получатель отвечает с syn-ack если готов к установке соединения
  • ACK — отправитель подтверждает, что получил syn-ack
tcp handshake



Если один из пакетов не дошел по той или иной причине — соединение не установится. Если все пакеты дошли — к передаче готовы и отправитель и получатель.

Соединение установлено, далее возможна передача информации. Для передачи данных процесс требуется повторять с каждым пакетом. Это обеспечивает гарантированную доставку — данные отправляются только тогда, когда их готовы принимать.



Этим TCP отличается от UDP, где происходит только отправка без контроля обратной связи.

Фактически участниками взаимодействия могут быть клиент и веб-сервер, обрабатывающий запросы.



При TCP handshake постоянно производится контроль и подбор размера TCP окна. Оно определяет с какой скоростью возможна передача и подбирает наибольшую возможную.


Проблемы с установлением TCP соединений могут быть вызваны ограничениями фаервола на сервере, к которому идет запрос или на одном из сетевых устройств, принимающих участие в обработке запроса на пути от клиента к серверу и обратно.


Проблемы с прохождением запросов можно выявить используя анализаторы сетевого трафика такие как tcpdump и wireshark.



Также читайте материал о порядке обработки SYN пакета сетевым оборудованием при передаче от одной машины, находящейся в сети общего доступа другой машине.



Что проверить заранее в случае предполагаемых проблем с TCP handshake


Поскольку протокол TCP предполагает ip связность — при диагностике первым делом нужно проверять её. Для этого можно использовать утилиты ping и traceroute.

Первая проверяет сетевую связность по протоколу ICMP, вторая выстраивает маршрут по сети от одного хоста до другого. Это может быть связность от клиента до сервера или от одного сервера до другого.

К анализу сетевого трафика с помощью wireshark и аналогов можно переходить если связность по сети есть.



Также на сервере нужно проверить фаервол. Запросы могут не проходить из-за правил конфигурации сетевого фильтра системы.

Подробнее про настройку фаервола в Linux и про то как открыть порт в iptables

Сказать спасибо