Потеря сетевых пакетов: диагностика и решение
Руководство по диагностике и решению проблемы потери сетевых пакетов с помощью ping, traceroute, mtr, tcpdump, проблемы MTU и оптимизация сетевой производительности.
Содержание
Введение
Потеря сетевых пакетов — серьёзная проблема, напрямую влияющая на производительность сервера и пользовательский опыт. Потеря пакетов может вызвать медленную загрузку веб-сайтов, обрывы SSH-соединений, лаги на игровых серверах и ухудшение качества VoIP.
В этом руководстве мы рассмотрим инструменты и методы для обнаружения потери пакетов, определения её источника и решения проблемы.
Что такое потеря пакетов?
Потеря пакетов происходит, когда пакеты данных, отправленные по сети, не достигают пункта назначения. В нормальных условиях ожидается 0% потерь.
| Потеря пакетов | Влияние |
|---|---|
| 0% | Нормально — нет проблем |
| 1-2% | Лёгкая — заметна в VoIP и играх |
| 3-5% | Умеренная — веб-страницы замедляются |
| 5-10% | Серьёзная — начинаются обрывы соединений |
| 10%+ | Критическая — сервис непригоден |
Обнаружение потери пакетов с помощью ping
# Простой тест ping
ping -c 100 ЦЕЛЕВОЙ_IP
# Тест с определённым размером пакета
ping -c 50 -s 1400 ЦЕЛЕВОЙ_IP
# Быстрый ping (flood — требует root)
sudo ping -f -c 1000 ЦЕЛЕВОЙ_IP
Интерпретация вывода:
100 packets transmitted, 97 received, 3% packet loss, time 99145ms
rtt min/avg/max/mdev = 1.234/5.678/45.123/8.901 ms
Некоторые серверы могут блокировать ICMP-пакеты. Отсутствие ответа на ping не всегда означает потерю пакетов. Проверьте с помощью TCP-тестов.
Анализ хопов с помощью traceroute
traceroute показывает каждый сетевой узел (хоп), через который проходят пакеты:
# Базовый traceroute
traceroute ЦЕЛЕВОЙ_IP
# На основе ICMP (требует root)
sudo traceroute -I ЦЕЛЕВОЙ_IP
# На основе TCP (порт 80)
sudo traceroute -T -p 80 ЦЕЛЕВОЙ_IP
Непрерывный мониторинг с помощью mtr
mtr — мощный инструмент, объединяющий ping и traceroute:
# Установка
sudo apt install mtr -y
# Интерактивный режим
mtr ЦЕЛЕВОЙ_IP
# Режим отчёта (100 пакетов)
mtr -r -c 100 ЦЕЛЕВОЙ_IP
# Режим TCP
mtr -T -P 80 ЦЕЛЕВОЙ_IP
# Широкий вывод
mtr -r -c 100 -w ЦЕЛЕВОЙ_IP
Чтение вывода mtr:
HOST Loss% Snt Last Avg Best Wrst StDev
1. gateway 0.0% 100 1.2 1.3 0.8 5.4 0.6
2. isp-router 2.0% 100 5.4 6.1 4.2 25.3 3.2
3. core-router 0.0% 100 15.2 15.8 14.1 22.4 1.5
4. ЦЕЛЕВОЙ_IP 0.0% 100 20.1 20.5 19.2 28.7 1.8
Если потеря пакетов видна только на одном хопе и не продолжается на последующих, этот хоп может просто применять ограничение скорости ICMP. Реальная проблема — когда потеря продолжается до последнего хопа.
Захват пакетов с помощью tcpdump
# Захват всего трафика на интерфейсе
sudo tcpdump -i eth0 -c 100
# Захват трафика к определённому IP
sudo tcpdump -i eth0 host ЦЕЛЕВОЙ_IP -c 100
# Трафик определённого порта
sudo tcpdump -i eth0 port 80 -c 50
# Сохранение в файл (для анализа в Wireshark)
sudo tcpdump -i eth0 -w capture.pcap -c 1000
# Захват ICMP-пакетов
sudo tcpdump -i eth0 icmp -c 50
Проверка ошибок сетевого интерфейса
# Статистика интерфейса
ip -s link show eth0
# Детальные счётчики ошибок
ethtool -S eth0 | grep -i error
# Количество отброшенных пакетов
netstat -i
# Сетевая статистика ядра
cat /proc/net/dev
Проблемы MTU
Несоответствие MTU (Maximum Transmission Unit) может вызвать потерю пакетов:
# Проверка текущего значения MTU
ip link show eth0 | grep mtu
# Тест обнаружения MTU пути
ping -c 5 -M do -s 1472 ЦЕЛЕВОЙ_IP
# Изменение MTU (временно)
sudo ip link set eth0 mtu 1400
Стандартный MTU Ethernet — 1500 байт. При использовании VPN или туннелей может потребоваться снизить MTU (обычно 1400-1420).
Тест пропускной способности
# Установка iperf3
sudo apt install iperf3 -y
# Запуск в режиме сервера
iperf3 -s
# Тест как клиент
iperf3 -c IP_СЕРВЕРА -t 30
# UDP-тест (измерение потери пакетов)
iperf3 -c IP_СЕРВЕРА -u -b 100M -t 30
Шаги по решению
1. Определение источника
# Анализ по хопам с помощью mtr
mtr -r -c 200 ЦЕЛЕВОЙ_IP
# Проблема локальная, у провайдера или на целевом сервере?
# - Потеря на первых хопах → Проблема локальной сети
# - Потеря на средних хопах → Проблема провайдера
# - Потеря на последнем хопе → Проблема целевого сервера
2. Локальные сетевые проблемы
# Перезапуск сетевого интерфейса
sudo ip link set eth0 down && sudo ip link set eth0 up
# Проверка DNS-разрешения
dig google.com +short
# Проверка таблицы маршрутизации
ip route show
Заключение
Потеря сетевых пакетов может быть вызвана множеством причин. С помощью ping, traceroute, mtr и tcpdump вы можете определить источник проблемы и применить соответствующее решение. Регулярный мониторинг сети для раннего обнаружения проблем — самый эффективный способ минимизировать простои.
Связанные статьи
Проблема SSH-подключения: не могу подключиться к серверу
Руководство по решению проблем SSH-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для SSH-порта и шаги по устранению неполадок.
Проблема RDP-подключения: не могу подключиться к Windows Server
Руководство по решению проблем RDP-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для порта RDP и шаги по устранению неполадок.
Как провести MTR-тест и отправить результаты в поддержку
Руководство по сетевому тестированию с помощью WinMTR и Linux MTR, создание правила фильтрации ICMP и отправка результатов в службу поддержки. Диагностика потери пакетов.