Это может быть общий вопрос TCP.
Могу ли я получить TCP SYN
пакет на ESTABLISHED
соединение ИЛИ соединение в TIME-WAIT
штат?
Это возможно?
А SYN
получен на ESTABLISHED
TCP-соединение не должно происходить. Это может быть задержанный пакет, который можно безопасно отбросить.
Можно закончить сервер в ESTABLISHED
государство и клиент в CLOSED
состояние, если соединение потеряно и истекло время ожидания на клиенте, а не на сервере, или если клиент перезапущен. Попытка открыть новое соединение в этом сценарии приведет к SYN
пакет, который будет получен в ESTABLISHED
штат. Желаемый результат - закрытие старого соединения и открытие нового.
Путь к достижению желаемого результата заключается в следующем:
SYN
чтобы создать новое соединение.ACK
для ESTABLISHED
подключение.ACK
с RST
пакет, вызывающий ESTABLISHED
связь уйти.SYN
пакет для создания нового соединения.А SYN
пакет получен в TIME_WAIT
состояние может произойти после того, как сервер закрыл соединение, а клиент открывает новое соединение с теми же номерами портов. Это приведет к открытию нового соединения.
Ни ...SYN
используется только при первой установке соединения (трехстороннее рукопожатие) или при уничтожении пакета.
В принципе:
SYN (I want to start a connection) -> ACK/SYN (OK, I want to start a connection too) -> ACK (acknowledged connection, ready for data)
Разговор идет с ACK
пакеты, отправленные обоими хостами, указывали, что они получили пакеты друг друга.
В конце, FIN
отправляется на сервер и TIME_WAIT
устанавливается на розетку. Когда сервер отвечает FIN
пакет, сокет освобождается.