Серверное оборудование для бизнеса — надёжные решения для любых задач Подробнее →
Статья

Траблшутинг сети: mtr, tcpdump, ss

Траблшутинг сети: mtr, tcpdump, ss

Сетевые проблемы — одни из самых неприятных для диагностики. «Сайт не открывается», «база данных не отвечает», «пакеты теряются» — каждое из этих сообщений требует системного подхода. Хорошая новость: в Linux есть отличный набор инструментов, которые позволяют найти проблему быстро и точно.

mtr: трассировка маршрута в реальном времени

mtr (Matt's Traceroute) объединяет ping и traceroute в один интерактивный инструмент. Он непрерывно отправляет пакеты и показывает статистику потерь и задержек на каждом хопе.

# Установка
apt install mtr -y

# Запуск
mtr 8.8.8.8

# Режим отчёта (удобно для логирования)
mtr --report --report-cycles 100 8.8.8.8

На что смотреть в выводе mtr:

  • Loss% — процент потерь. Если потери только на одном хопе, но дальше всё хорошо — это часто просто ограничение ICMP на роутере, не реальная проблема
  • Avg — средняя задержка. Резкий рост на конкретном хопе указывает на узкое место
  • StDev — стандартное отклонение. Высокое значение говорит о джиттере — нестабильности задержки

tcpdump: перехват пакетов

tcpdump — незаменимый инструмент для анализа трафика на уровне пакетов. Позволяет увидеть реальный обмен данными между хостами.

# Весь трафик на интерфейсе eth0
tcpdump -i eth0

# Трафик от/к конкретному хосту
tcpdump -i eth0 host 192.168.1.100

# Только TCP-трафик на порту 443
tcpdump -i eth0 tcp port 443

# Сохранить в файл для анализа в Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap

# Читать сохранённый файл
tcpdump -r /tmp/capture.pcap

# Показать содержимое пакетов в ASCII
tcpdump -i eth0 -A port 80

# Подробный вывод с временными метками
tcpdump -i eth0 -nn -vv host 192.168.1.100

Полезные фильтры:

# TCP SYN-пакеты (новые соединения)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'

# Пакеты с RST (сброс соединения)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0'

# DNS-трафик
tcpdump -i eth0 port 53

ss: состояние сокетов и соединений

ss — современная замена netstat, работает быстрее и показывает больше информации.

# Все TCP-соединения
ss -t

# Все слушающие порты
ss -tlnp

# Соединения с конкретным портом
ss -t dst :443

# UDP-сокеты
ss -u

# Статистика по сокетам
ss -s

# Соединения с фильтром по состоянию
ss -t state established

# Показать процесс, владеющий сокетом
ss -tlnp | grep :80

Состояния TCP-соединений:

  • ESTABLISHED — активное соединение
  • TIME_WAIT — соединение закрыто, ждёт таймаута (норма)
  • CLOSE_WAIT — удалённая сторона закрыла соединение, локальная нет (часто баг в приложении)
  • SYN_SENT — попытка установить соединение

Дополнительные инструменты

ip — управление сетевыми интерфейсами и маршрутами:

ip addr show          # Список интерфейсов и адресов
ip route show         # Таблица маршрутизации
ip neigh show         # ARP-таблица

nmap — сканирование портов:

# Проверить открытые порты хоста
nmap -sT 192.168.1.100

# Быстрое сканирование популярных портов
nmap -F 192.168.1.0/24

nc (netcat) — быстрая проверка доступности порта:

# Проверить, открыт ли порт
nc -zv 192.168.1.100 5432

# Простой тест пропускной способности
nc -l 9999 > /dev/null &
dd if=/dev/zero | nc 192.168.1.100 9999

Алгоритм диагностики

  1. Проверьте физический уровень — ip link show, индикаторы на порту коммутатора
  2. Проверьте IP-связность — ping до шлюза, до удалённого хоста
  3. Проверьте маршрутизацию — ip route show, mtr до проблемного хоста
  4. Проверьте порт — nc -zv host port, ss -tlnp на сервере
  5. Перехватите трафик — tcpdump для анализа реального обмена пакетами

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

3 Ответа

  1. Отличная подборка. Ещё советую добавить в арсенал iperf3 для измерения реальной пропускной способности между двумя хостами — очень помогает когда подозреваешь деградацию канала.

  1. Про CLOSE_WAIT важный момент — у нас была проблема с Java-приложением, которое не закрывало соединения, и ss сразу показал несколько тысяч сокетов в этом состоянии.

  1. tcpdump с сохранением в pcap и последующим анализом в Wireshark — это вообще мощь, особенно когда нужно разобраться в SSL-handshake или найти аномальные пакеты.