Перейти к основному содержимому
Вернуться в категорию

Потеря сетевых пакетов: диагностика и решение

Руководство по диагностике и решению проблемы потери сетевых пакетов с помощью ping, traceroute, mtr, tcpdump, проблемы MTU и оптимизация сетевой производительности.

Время чтения: 13 мин Устранение неполадок
pingtraceroutemtrtcpdumpпотеря пакетовсетьnetwork

Содержание

Введение

Потеря сетевых пакетов — серьёзная проблема, напрямую влияющая на производительность сервера и пользовательский опыт. Потеря пакетов может вызвать медленную загрузку веб-сайтов, обрывы SSH-соединений, лаги на игровых серверах и ухудшение качества VoIP.

В этом руководстве мы рассмотрим инструменты и методы для обнаружения потери пакетов, определения её источника и решения проблемы.

Что такое потеря пакетов?

Потеря пакетов происходит, когда пакеты данных, отправленные по сети, не достигают пункта назначения. В нормальных условиях ожидается 0% потерь.

Потеря пакетовВлияние
0%Нормально — нет проблем
1-2%Лёгкая — заметна в VoIP и играх
3-5%Умеренная — веб-страницы замедляются
5-10%Серьёзная — начинаются обрывы соединений
10%+Критическая — сервис непригоден

Обнаружение потери пакетов с помощью ping

hljs bash
# Простой тест 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 показывает каждый сетевой узел (хоп), через который проходят пакеты:

hljs bash
# Базовый traceroute
traceroute ЦЕЛЕВОЙ_IP

# На основе ICMP (требует root)
sudo traceroute -I ЦЕЛЕВОЙ_IP

# На основе TCP (порт 80)
sudo traceroute -T -p 80 ЦЕЛЕВОЙ_IP

Непрерывный мониторинг с помощью mtr

mtr — мощный инструмент, объединяющий ping и traceroute:

hljs bash
# Установка
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

hljs bash
# Захват всего трафика на интерфейсе
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

Проверка ошибок сетевого интерфейса

hljs bash
# Статистика интерфейса
ip -s link show eth0

# Детальные счётчики ошибок
ethtool -S eth0 | grep -i error

# Количество отброшенных пакетов
netstat -i

# Сетевая статистика ядра
cat /proc/net/dev

Проблемы MTU

Несоответствие MTU (Maximum Transmission Unit) может вызвать потерю пакетов:

hljs bash
# Проверка текущего значения 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).

Тест пропускной способности

hljs bash
# Установка iperf3
sudo apt install iperf3 -y

# Запуск в режиме сервера
iperf3 -s

# Тест как клиент
iperf3 -c IP_СЕРВЕРА -t 30

# UDP-тест (измерение потери пакетов)
iperf3 -c IP_СЕРВЕРА -u -b 100M -t 30

Шаги по решению

1. Определение источника

hljs bash
# Анализ по хопам с помощью mtr
mtr -r -c 200 ЦЕЛЕВОЙ_IP

# Проблема локальная, у провайдера или на целевом сервере?
# - Потеря на первых хопах → Проблема локальной сети
# - Потеря на средних хопах → Проблема провайдера
# - Потеря на последнем хопе → Проблема целевого сервера

2. Локальные сетевые проблемы

hljs bash
# Перезапуск сетевого интерфейса
sudo ip link set eth0 down && sudo ip link set eth0 up

# Проверка DNS-разрешения
dig google.com +short

# Проверка таблицы маршрутизации
ip route show

Заключение

Потеря сетевых пакетов может быть вызвана множеством причин. С помощью ping, traceroute, mtr и tcpdump вы можете определить источник проблемы и применить соответствующее решение. Регулярный мониторинг сети для раннего обнаружения проблем — самый эффективный способ минимизировать простои.