5

Я работаю над встроенным дистрибутивом Linux, и мне нужно отслеживать входящие и исходящие соединения (если они все еще активны и т.д.), И у меня возникают проблемы, потому что я заметил, что даже если удаленный хост отключает соединение, я могу видеть соединение как УСТАНОВЛЕНО через netstat.

У меня есть две разные версии этой встроенной системы Linux: одна, которая использует старое ядро 2.6.34 и работает нормально, а другая, которая не работает, использует ядро 3.18.18.

В поисках дополнительной информации, я подозреваю, мне пришлось установить / изменить тайм-ауты TCP, поэтому я настроил их через syctl.conf, но ничего не изменил. Система, которая использует ядро 2.6.34, не настроила тайм-ауты TCP, поэтому я думаю, что TCP не является корнем моей проблемы.

Есть ли у вас представление о том, что может быть причиной того , что соединение останется в УСТАНОВИЛ?

1 ответ1

2

Если хост отключается от другого, и вы по-прежнему видите его соединение как ESTABLISHED , это, вероятно, связано с тем, что он не соблюдает протокол TCP и не закрывает соединение чисто.

Вывод netstat является интерпретатором текущего состояния TCP соединений. Если клиент хочет отключить / закрыть ранее открытый и установленный сокет, он должен уведомить об этом удаленную систему. Это делается отправкой FIN request на другой узел (подробнее здесь), в данном случае, на сервер.

Если они этого не делают, клиент действительно отключается, но удаленный сервер продолжает думать, что клиент все еще подключен и, таким образом, сохраняет свое состояние как ESTABLISHED , и именно здесь параметр tcp_keepalive_time объединяет уравнение. Поскольку дальнейшие пакеты не будут получены, ядро будет ожидать указанное время для этого параметра, чтобы установить тайм-аут соединения и принудительно закрыть его.

Вы можете устранить эту проблему, используя инструмент tcpdump . Вы можете просто прослушать соединение с клиентского хоста на стороне сервера и проверить, не удается ли отправить запрос FIN .

tcpdump host X.X.X.X and port Y

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .