Как вы диагностируете потерю пакетов?

27

Я понимаю, что это очень субъективно и зависит от ряда переменных, но мне интересно, какие шаги выполняет большинство людей, когда им нужно диагностировать потерю пакетов в данной системе?

KushalP
источник
Что такое "система"? Вы имеете в виду, что у вас один сервер (или рабочий стол) испытывает потерю пакетов? Или это целый сегмент сети? Как вы диагностировали это как потерю пакетов (что, я предполагаю, вы имеете в виду, вызвано сетью), а не, например, низкой производительностью на сервере приложений, нехваткой временных портов или кучей Java или миллионом других возможностей?
mfinni
Я понимаю, что это плохое описание проблемы. Думайте об этом как о чисто академическом и гипотетическом. Предположим, это потеря пакетов, просто любопытно узнать, какие шаги предпринимают большинство инженеров.
KushalP

Ответы:

29

Я сетевой инженер, поэтому опишу это с моей точки зрения.

Для меня диагностика потери пакетов обычно начинается с "она работает не очень хорошо". Оттуда я обычно пытаюсь найти комплект как можно ближе к обоим концам связи (обычно это рабочая станция в офисе и сервер где-то) и пинговать как можно ближе к другому концу (в идеале «удаленная конечная точка», но иногда существуют брандмауэры, через которые я не могу отправить эхо-запросы, поэтому придется согласиться на интерфейс локальной сети на маршрутизаторе) и посмотреть, смогу ли я увидеть какие-либо потери.

Если я вижу потери, это обычно случай «недостаточной пропускной способности» или «связи с проблемами» где-то посередине, поэтому найдите маршрут через сеть и начните с середины, что обычно дает вам один конец или другой.

Если я не вижу потери, следующие два шага, как правило, «отправить больше пингов» или «отправить большие пинги». Если это не помогает, это указывает на проблему, пришло время посмотреть на политики QoS и статистику интерфейса через весь путь между конечными точками.

Если это ничего не находит, пришло время начать сомневаться в своих предположениях, действительно ли вы страдаете от потери пакетов. Единственный надежный способ найти это - сделать одновременный захват на обоих концах, либо используя WireShark (или эквивалентный) на хостах, либо подключая анализаторы (вероятно, используя WireShark или аналогичные) через сетевые ответвления. Затем идет удовольствие от сравнения двух захватов пакетов ...

Иногда то, что называют «потерей пакетов», является просто чем-то заметно более медленным на стороне сервера (например, перемещение базы данных из «в той же локальной сети» в «20 мсек» и использование запросов, которые требуют очень много туда-обратно между интерфейсом и базой данных).

Vatine
источник
+1. Будучи сетевым инженером службы поддержки клиентов, я обычно тоже иду по этому пути.
Петр
1
@Vatine Было бы неплохо иметь несколько примеров кода, чтобы иметь возможность практиковать его без необходимости искать команды и параметры ...
Филипп Гачу
11

С точки зрения системы Linux, я сначала посмотрю на потерю пакетов в сетевом интерфейсе с ethtool -S ethX.

Большую часть времени увеличение кольцевого буфера с помощью ethtool -G ethX rx VALUEрешает эту проблему.

Иногда прерывания не сбалансированы, потому что в системе отсутствует служба irqbalance, поэтому посмотрите в chkconfig(EL) или update-rc(Debuntu), чтобы увидеть, работает ли эта служба. Вы можете сказать, не прерывается ли прерывание, потому /proc/interruptsчто покажет только Core 0, обслуживающий все каналы IRQ.

В противном случае, возможно , придется увеличить , net.core.netdev_max_backlogесли система проходит более нескольких гигабит трафика, и , возможно net.core.netdev_budget.

Если это не сработает, вы можете изменить значения, объединяющие прерывания ethtool -C.

Если на сетевом интерфейсе нет отбрасываний пакетов, посмотрите, netstat -sнет ли отбрасываний в буферах сокетов, об этом будут сообщать статистические данные, такие как " pruned from receive queue" и " dropped from out-of-order queue".

Вы можете попробовать увеличить буферы сокетов по умолчанию и макс. Для соответствующего протокола (например, net.ipv4.tcp_rmemдля TCP).

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

Лично мне не нравится разгрузка протокола на сетевые карты (контрольная сумма, разгрузка сегментации, большая разгрузка при приеме), так как кажется, что это вызывает больше проблем, чем стоит. ethtool -KВозможно, стоит поиграть с использованием этих настроек .

Посмотрите на опции модуля для вашей сетевой карты ( modinfo <drivername>), так как вам может потребоваться изменить некоторые функции. Чтобы привести один пример, с которым я столкнулся, использование Intel Flow Director в системе, которая обрабатывает один большой поток TCP, вероятно, повредит эффективности этого потока, поэтому отключите FDir.

Кроме того, вы получаете ручную настройку этой конкретной системы для ее конкретной рабочей нагрузки, которая, я думаю, выходит за рамки вашего вопроса.

suprjami
источник
4

Я начну с использования инструментов захвата пакетов, таких как: wireshark (в Windows) и tcpdump (в терминале Linux).

Я также проверю конфигурацию брандмауэра (хост-брандмауэр, а также сетевой брандмауэр).

Халед
источник
3

Изолировать, затем устранить.

Найдите наименьшее подмножество путей с проблемой. Сделайте это путем тестирования различных комбинаций и / или создания пользовательских отчетов. Не забудьте учесть время в уравнении. Может быть, это всего лишь потеря пакетов на весь трафик в конкретной сети, или, возможно, страдают только беспроводные клиенты. Учитывайте разные типы трафика (ограничение скорости на пингах). Найдите самый надежный и легко повторяемый способ проверки.

Тогда устраните потенциальные причины. Уменьшить трафик по ссылкам (временно), удалить источники помех из спектра, отключить определенных клиентов. В конце концов вы найдете источник проблемы.

Иногда вы можете использовать ярлыки, просматривая дампы пакетов или догадываясь (это всегда bittorrent). Кроме того, скажите своему профессору, что серверный сбой - это здорово

Джорис
источник
Это «Уничтожить», а не «Уничтожить».
Эндрю Смит
0

Пинги могут не показывать потерю пакетов, если вы не отправляете большие пинги! У меня была потеря пакетов в моей сети, которая была невидимой, пока я не увеличил размер своего пакета ping.

Для окон:

ping -n 30 -l <largevalue> <target>

Для largevalueя использовал 40960 (пакет 40k)

Для targetя использовал первые несколько IP - адресов изtracert google.com

(это были мои роутеры и кабельный модем). У одного из устройств ниже по цепочке произошла ужасная потеря пакетов (> 60%) для больших пакетов, но 0% для маленьких. Я исправил это, перезапустив это, но это мог также быть кабель или кое-что внутреннее, которое нуждается в замене.

Джонатан
источник