Как перехватить «отброшенные пакеты» в tcpdump

9544
Joey

У меня проблема с производительностью сети. Я использую Ubuntu 16.04 на VMware Cloud Server с сетевым адаптером E1000. Но я вижу некоторые пакеты, отброшенные в разделах команды ifconfig:

root@ubuntu:~# ifconfig ens192 ens192 Link encap:Ethernet HWaddr 00:50:56:03:25:14  inet addr:192.16.1.100 Bcast:192.16.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:574749 errors:0 dropped:83 overruns:0 frame:0 TX packets:76478 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000  RX bytes:44109471 (44.1 MB) TX bytes:19484534 (19.4 MB) 

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

Я провел некоторые исследования и изучение информации в Google, после чего я попытался изменить конфигурационный файл для буфера, максимального размера окон и так далее. Но это все еще отбрасывает мои пакеты.

Итак, теперь я хочу перехватить пакеты, которые отброшены для анализа, что это за пакет.

Я также попробовал этот захват для моего представления в wireshark:

sudo tcpdump -i ens192 -n -w /var/www/html/logs.pcap -C 1 -Z root 

Но я не думаю, что вижу, какие пакеты отброшены! Я думаю, что отброшенные пакеты игнорируются перед переходом на фильтр tcpdump.

Можете ли вы предложить мне, какой метод для захвата "отброшенных пакетов" выше ( отброшено: 83 )?

Заранее спасибо!

5
вам, вероятно, нужно найти `iptables` для этой информации. см. https://serverfault.com/a/126078 и https://serverfault.com/q/385937. quixotic 6 лет назад 0
Прочитайте [этот ответ] (https://unix.stackexchange.com/a/205290/108618). Я не могу убедиться, что это правда, но если это так, то вы вообще не можете перехватить эти пакеты, потому что они никогда не попадают в ядро. Насколько я понимаю, если бы вы могли поймать их, они не будут считаться "отброшенными" в первую очередь. Kamil Maciorowski 6 лет назад 4
Проблема может быть в самом tcpdump: если он не отвечает достаточно быстро, старые пакеты будут перезаписаны новыми. Возможно, вы должны заставить tcpdump работать быстрее. Почему вы ограничиваете размер файла журнала? Вы можете найти гораздо больше советов [здесь] (https://stackoverflow.com/a/41903056/165358). harrymc 6 лет назад 0
Подумайте над тем, чтобы взглянуть на 'ethtool -S ens192' на основе [этого ответа] (https://serverfault.com/a/561132/171566). Может быть любое количество причин, по которым ваш интерфейс отбрасывает пакеты. Возможно, вы также захотите проверить ваш исходящий коммутатор, чтобы увидеть, обнаруживает ли он пропущенные / ошибочные пакеты. Неправильно сформированные пакеты могут быть отброшены. Will.Beninger 6 лет назад 0
У вас есть доступ к инфраструктуре VMware? Если да, вы можете установить еще один vm, просто для захвата пакетов и сделать в нем зеркалирование портов. После вы можете захватить пакет в 2 вм в то же время. И после этого вам нужно будет сравнить это. Если у вас нет доступа к VMware, возможно, вы можете попросить своего хостера захватить для вас трафик. Технически они могут это сделать. Но это могут быть нетехнические проблемы Mihail Kuznesov 6 лет назад 0
@ Михаил Кузнецов: Я проверил, создав другую виртуальную машину, но ничего не изменилось. Это все еще отбрасывает пакеты. Joey 6 лет назад 0
Нет, вы можете зеркалировать порт в коммутаторе Vmware и начать захват пакета во втором vm. Mihail Kuznesov 6 лет назад 0
https://pubs.vmware.com/vsphere-60/index.jsp?topic=%2Fcom.vmware.vsphere.hostclient.doc%2FGUID-8D1768B0-074D-4F06-9931-2BE4777D35F8.html Mihail Kuznesov 6 лет назад 0
И запустите tcpdump в ваших двух виртуальных машинах. После вы можете сравнить дампы для различий Mihail Kuznesov 6 лет назад 0

2 ответа на вопрос

3
harrymc

Проблема может быть в самом tcpdump: если он не отвечает достаточно быстро, тогда старые пакеты будут перезаписаны новыми, что означает, что они отброшены.

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

В случае tcpdump он выводит сводную информацию о том, сколько пакетов было захвачено, отфильтровано и отброшено при остановке захвата. Например:

$ sudo tcpdump -i en0 -w trace.pcap tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes ^C 94 packets captured 177 packets received by filter 0 packets dropped by kernel 

Если droppedсчетчик не равен нулю, вам нужно увеличить размер буфера захвата пакета, передав -Bопцию tcpdump. Попробуйте также без файла захвата, чтобы увидеть, если это улучшает коэффициент захвата.

Спасибо за ваш комментарий, но TCPDUMP - это просто способ устранения неполадок для "Что именно с" RX: drop: 83 "? Я хочу знать, почему моя Ubuntu отбросила эти пакеты, поэтому я должен знать, какие это пакеты. :( Joey 6 лет назад 0
Вы пытались увеличить `-B`? Каков ваш вывод для tcpdump? harrymc 6 лет назад 0
2
Will.Beninger

Ваши вопросы, похоже, относятся к тому, чтобы вернуться назад и выяснить, что могло привести к падению предыдущего пакета, а не пытаться перехватить пакеты в реальном времени, чтобы попытаться найти тот, который отбрасывается. Что касается последнего, то ответ harrymc должен быть в состоянии поймать тот, который вы ищете.

Чтобы вернуться и посмотреть, что может происходить на этом интерфейсе, вы должны понимать, что те заголовки, которые вы просматриваете, RX packets:574749 errors:0 dropped:83 overruns:0 frame:0являются просто сводкой основных счетчиков.

Из моего комментария я бы порекомендовал использовать ethtoolкоманду / пакет из этого ответа, чтобы проанализировать некоторые счетчики, чтобы увидеть, можете ли вы найти что-то неуместное.
ethtool -S ens192

Из исходного файла драйверов Broadcom мы видим tp->rx_dropped++;несколько отдельных случаев в файле. 1 2 3 Любой из этих или более (в зависимости от вашего точного сетевого адаптера и лежащих в основе драйверов) вносит свой вклад в то, что может вызывать отбрасывание пакетов.

Чтобы облегчить ваш ум, ваш сервер отбрасывает менее 0,015% пакетов, полученных на основе вашего вывода выше. Ваши клиенты не заметят перебоев в работе сервера или даже дрожания до тех пор, пока частота выпадений / ошибок не превысит 1%. Даже тогда это было бы едва заметно. TCP позаботится о любой необходимой повторной передаче.

Для онлайн-игры в реальном времени капли в 1% достаточно, чтобы вызвать заметное отставание от игрового ощущения. zoujyjs 5 лет назад 0