Закрыть УСТАНОВЛЕННОЕ соединение на основе только последовательности SYN / ACK

332
simo-zz

После обсуждения « Соединение остается помеченным как УСТАНОВЛЕННОЕ, даже если хост не подключен », я снова возвращаюсь, чтобы запросить дополнительную информацию.

Резюме: у меня есть удаленный хост (клиент Windows), который подключается к моей встроенной системе Linux (серверу, который я использую для передачи или получения данных). В этой ситуации, как только клиент подключен, он начинает получать данные с сервера по протоколу TCP. Если клиент отключается, соединение с сервером не исчезает. Это остается как УСТАНОВЛЕНО .
Я не программировал приложения, используемые для получения и отправки пакетов между двумя хостами (однако я мог изменить исходный код со стороны сервера), но если я не ошибаюсь, это не нужно.

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

13:02:38.085996 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151644:151648, ack 1, win 473, length 4 13:02:38.283570 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151648:151916, ack 1, win 473, length 268 13:02:39.289412 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151916:151920, ack 1, win 473, length 4 13:02:39.489854 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151920:152226, ack 1, win 473, length 306 13:02:40.093989 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 152226:152230, ack 1, win 473, length 4 

Но клиент не получает никаких данных и сервер не отправляет их, это просто последовательность SYN / ACK. Это продолжается вечно, и единственный способ остановить это - изменить конфигурацию сервера (режим приемника) или отключить адаптер Ethernet. Это не приемлемое решение.

Если я не ошибаюсь, это считается атакой SYNflood ..

Вопрос в том, как избежать подобной ситуации, закрывающей соединение со стороны сервера.
Возможно ли это сделать из какого-либо файла конфигурации или из брандмауэра, не ограничивая входящие соединения (как предлагается здесь )?

0
Как «удаленный хост отключает соединение»? Поскольку между первым хостом существует определенная связь, решающая, что он хочет прекратить, и фактическим концом соединения. (Например, см. Диаграмму http://serverfault.com/questions/450055/lot-of-fin-wait2-close-wait-last-ack-and-time-wait-in-haproxy). Прога закрывается чисто? Вы видите какое-нибудь сообщение FIN_WAIT? Hennes 8 лет назад 0
Нет, любой пакет FIN_WAIT. Я также думаю, что клиент не закрывает соединение должным образом .. simo-zz 8 лет назад 0
Если клиника просто оставляет соединение висящим, то оно остается установленным (как и должно!). И некоторые сохраняют живое - хорошая идея для установленного простаивающего соединения. В основном, это работает как должно ** основано на поведении клиента *. Если у вас есть исходный код клиента, то, возможно, мы могли бы сказать больше (или, возможно, мы могли бы, хотя он может быть перенесен, он превращается в [SO] сообщение). Hennes 8 лет назад 0
ОК, я наконец-то подтвердил, что проблема в исходном коде приложений. Я должен буду исправить их. simo-zz 8 лет назад 0

0 ответов на вопрос