Как перехватить "отброшенные пакеты" в tcpdump
У меня проблема с производительностью сети. Я использую 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)?
Заранее спасибо!
2 ответа
Проблема может быть связана с самим 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. Попробуйте также без файла захвата, чтобы увидеть, если это улучшает коэффициент захвата.
Ваши вопросы, похоже, относятся к тому, чтобы вернуться назад и выяснить, что могло вызвать потерю предыдущего пакета, а не пытаться перехватить пакеты в реальном времени, чтобы попытаться найти тот, который отбрасывает. Что касается последнего, то ответ 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 позаботится о любой необходимой повторной передаче.