TCP полуоткрыт
Термин «полуоткрытый» относится к TCP -соединениям, состояние которых не синхронизировано между двумя взаимодействующими хостами, возможно, из-за сбоя на одной стороне. Связь, которая находится в процессе установления, также известна как эмбриональная связь . Отсутствие синхронизации может быть следствием злого умысла .
RFC 793
[ редактировать ]Согласно RFC 793 , TCP-соединение называется полуоткрытым , когда хост на одном конце этого TCP-соединения вышел из строя или иным образом удалил сокет, не уведомив об этом другой конец. Если оставшийся конец свободен, соединение может оставаться в полуоткрытом состоянии неограниченное время.
Тайм-аут брандмауэра с отслеживанием состояния
[ редактировать ]Еще одно обстоятельство, которое может привести к полуоткрытым соединениям, — это если брандмауэр с отслеживанием состояния истечет время ожидания соединения, которое слишком долго простаивает. В этом случае брандмауэр очищает свое внутреннее состояние, и если какая-либо из сторон соединения отправит пакет, брандмауэр отбросит пакет. Это часто приводит к полуоткрытому соединению, поскольку две стороны соединения могут оказаться в несогласованных состояниях соединения.
Эмбриональная связь
[ редактировать ]Термин «полуоткрытое соединение» также можно использовать для описания эмбрионального соединения , то есть TCP- соединения, которое находится в процессе установления.
TCP имеет систему с тремя состояниями для открытия соединения. Сначала исходная конечная точка (A) отправляет пакет SYN пункту назначения (B). Сейчас A находится в зачаточном состоянии (в частности, SYN_SENT) и ожидает ответа. Теперь B обновляет информацию о своем ядре, чтобы указать входящее соединение от A, и отправляет запрос на открытие обратного канала ( пакет SYN/ACK ).
На данный момент B также находится в эмбриональном состоянии (в частности, SYN_RCVD). Обратите внимание, что B был переведен в это состояние другой машиной, находящейся вне контроля B.
При нормальных обстоятельствах (см. атаку типа «отказ в обслуживании» для случаев преднамеренного сбоя) A получит SYN/ACK от B, обновит свои таблицы (в которых теперь достаточно информации для A как для отправки, так и для получения) и отправит окончательное подтверждение ACK. вернемся к Б.
Как только B получит этот окончательный ACK, у него также будет достаточно информации для двусторонней связи, и соединение будет полностью открыто. Обе конечные точки теперь находятся в установленном состоянии.