Назад | Перейти на главную страницу

Как отслеживать сеансы TIME_WAIT с помощью tcpdump (или аналогичного инструмента)

У меня есть сервер с большим количеством сеансов TIME_WAIT. Это сеансы, которые сервер закрыл, но не закрыл клиент.

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

Есть ли способ откопать только те соединения, которые вызывают TIME_WAIT?

Наличие соединений в состоянии TIME_WAIT означает, что ваш сервер является инициатором их фазы закрытия. Это предотвращает прием поздних сегментов и гарантирует, что другой конец правильно закрыл соединение.

В большинстве случаев их не должно быть проблемой, это зависит от услуг, которые предоставляет сервер. Основная проблема с большим количеством подключений TIME_WAIT - это потребление памяти, которое составляет всего около 10 МБ для 40 000 из них.

Если вы думаете, что это может причинить вред в вашем конкретном случае, вы можете использовать сс из iproute2, чтобы узнать, какие кортежи являются виновниками:

$ ss -tan state time-wait

Затем с помощью такого инструмента, как WireShark, вы можете легко проанализировать поток TCP, соответствующий этому кортежу, с помощью фильтра, подобного следующему:

tcp.port == <port> and ip.addr == <ip>

Вы также можете использовать функцию «следовать TCP-потоку» из wirehark, которая покажет вам каждый сегмент этого конкретного соединения.