Полуоткрытое TCP/IP соединение () — TCP-соединение, в котором состояния двух его участников становятся несинхронизированными вследствие сбоёв или преднамеренных действий одного из участников.

Первоначально термин относился к нарушению синхронизации уже установленного соединения (см. состояния сеанса TCP). Но затем более распространённым стало применение термина полуоткрытое TCP/IP соединение к случаю нарушения нормальной последовательности установления соединения. Это произошло после описания CERT Coordination CenterTCP SYN Flooding and IP Spoofing Attacks уязвимости реализации протокола, которую можно использовать для проведения атаки типа SYN-флуд ().

Технические подробности Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).

Клиент (сторона — инициатор соединения) посылает пакет с установленным флагом SYN (synchronize). В ответ на него сервер должен ответить комбинацией флагов SYN+ACK (acknowledges). После этого клиент должен ответить пакетом с флагом ACK, после чего соединение считается установленным.

После установки соединения обе стороны переходят в состояние ESTABLISHED. После завершения обмена и при необходимости разорвать соединение, происходит такой же многоступенчатый процесс завершения соединения.

Нарушение синхронизации может произойти на любом из описанных шагов.

Три значения термина Полуоткрытое соединение, описанное в стандарте TCPRFC793 , возникает в результате ошибки одного из участников соединения или внезапного прекращения его (участника) работы без уведомления второй стороны. Если обе стороны находились в состоянии установленного соединения, то, после аварийного завершения соединения с одной стороны, вторая сторона может находиться в состоянии полуоткрытого соединения неопределённо долгое время.

Второе значение термина, связанное с уязвимостью SYN-флуд, относится к полуоткрытому соединению на стороне сервера после второго этапа «трёхкратного рукопожатия». В этом случае сервер, в ожидании ответа от клиента, не освобождает выделенные ресурсы, что может привести к их исчерпанию.

Третье значение термина относится к клиенту, выполнившему первый этап «трёхкратного рукопожатия» и ожидающего ответа сервера. В нормальных условиях это не приводит ни к каким отрицательным последствиям, так как, не получив ответа за определённое время, клиент закрывает соединение и освобождает ресурсы.

MS Windows и клиенты пиринговых сетей Проблемы, связанные с полуоткрытыми соединениями второго типа (на стороне сервера), имеют примерно одинаковые методы решения на Unix-подобных и Windows платформах.

Однако Microsoft ввела ограничение и на полуоткрытые соединения третьего типа (на клиенте). Это было сделано для минимизации возможности проведения атак на другие компьютеры с заражённой вредоносным программным обеспечением системы. В результате такого ограничения появились проблемы в работе программного обеспечения, интенсивно работающего с Интернетом, в частности, клиентов пиринговых сетей. Увеличить предел полуоткрытых соединений можно, отредактировав системный файл tcpip.sys при помощи специальной утилиты, что запрещено лицензионным соглашением. Начиная с Windows Server 2008 SP2 и Windows Vista SP2 это ограничение было снято, однако может быть включено путём внесения специальной записи в реестрСтатья в базе знаний Microsoft о том, как включить ограничение на число полуоткрытых соединений в ОС Windows Vista и Windows Server 2008 с Service Pack 2 (на английском языке).

Примечания

Ссылки Event 4226 SYN_cookie Windows Half-open limit fix (patch) Увеличить число полуоткрытых соединений (half-open connection) в Linux

Категория:TCP/IP