Как отследить сессии TIME_WAIT, используя tcpdump (или аналогичный инструмент)

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

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

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

1 ответ

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

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

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

$ ss -tan state time-wait

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

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

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

Другие вопросы по тегам