Построить гистограмму RTT с помощью wireshark или другого инструмента

У меня есть небольшая офисная сеть, и я испытываю огромную задержку интернет-соединения. У нас есть простая топология сети: компьютер, настроенный как маршрутизатор под управлением ubuntu server 10.10, 2 сетевые карты (одна для подключения к интернету, другая к офисной сети) и коммутатор, соединяющий 20 компьютеров. У меня есть огромный журнал tcpdump, собранный на маршрутизаторе, и я хотел бы построить гистограмму со временем RTT все потоки TCP, чтобы попытаться найти лучшее решение этой проблемы задержки. Так, может ли кто-нибудь сказать мне, как это сделать с помощью wireshark или другого инструмента?

3 ответов


Wireshark или tshark могут дать вам TCP RTT для каждого полученного пакета ACK с помощью tcp.анализ.ack_rtt который измеряет дельту времени между захватом пакета TCP и ACK для этого пакета.

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

чтобы измерить ваш интернет RTT, вам нужно искать ACKS из интернета (ACKing данные, отправленные из вашей сети). Предполагая, что ваши офисные машины имеют IP-адреса, такие как 192.168.1.x и вы зарегистрировали все данные на порту LAN вашего маршрутизатора, вы можете использовать фильтр отображения следующим образом:

tcp.analysis.ack_rtt and ip.dst==192.168.1.255/24

чтобы сбросить RTTs в a .csv для анализа вы можете использовать команду tshark, например;

tshark -r router.pcap -Y "tcp.analysis.ack_rtt and ip.dst==192.168.1.255/24" -e tcp.analysis.ack_rtt -T fields -E separator=, -E quote=d > rtt.csv

  • The-r опция сообщает tshark читать из вашего .файл pcap
  • параметр-Y указывает используемый фильтр отображения (- R без -2 устарел)
  • параметр-e указывает поле для вывода
  • параметры-T укажите форматирование вывода

вы можете использовать утилиту mergecap для объединения всех файлов pcap в один файл перед запуском этой команды. Превратить этот вывод в гистограмму должно быть легко!


вот 5-минутный perlscript, вдохновленный ответом рупелло:

#!/usr/bin/perl

# For a live histogram of rtt latencies, save this file as /tmp/hist.pl and chmod +x /tmp/hist.pl, then run:
# tshark -i wlp2s0 -Y "tcp.analysis.ack_rtt and ip.dst==192.168.0.0/16" -e tcp.analysis.ack_rtt -T fields -E separator=, -E quote=d  | /tmp/hist.pl 
# Don't forget to update the interface "wlp2s0" and "and ip.dst==..." bits as appropriate, type "ip addr" to get those.

@t[$m=0]=20;
@t[++$m]=10;
@t[++$m]=5;
@t[++$m]=2;
@t[++$m]=1;
@t[++$m]=0.9;
@t[++$m]=0.8;
@t[++$m]=0.7;
@t[++$m]=0.6;
@t[++$m]=0.5;
@t[++$m]=0.4;
@t[++$m]=0.3;
@t[++$m]=0.2;
@t[++$m]=0.1;
@t[++$m]=0.05;
@t[++$m]=0.04;
@t[++$m]=0.03;
@t[++$m]=0.02;
@t[++$m]=0.01;
@t[++$m]=0.005;
@t[++$m]=0.001;
@t[++$m]=0;

@h[0]=0;

while (<>) {
 s/\"//g; $n=$_; chomp($n); $o++;
 for ($i=$m;$i>=0;$i--) { if ($n<=$t[$i]) { $h[$i]++; $i=-1; }; };
 if ($i==-1) { $h[0]++; };
 print "3c"; 
 for (0..$m) { printf "%6s %6s %8s\n",$t[$_],sprintf("%3.2f",$h[$_]/$o*100),$h[$_]; };
}

более новые версии tshark, похоже, лучше работают с " stdbuf-i0-o0-e0 "перед"tshark".

PS кто-нибудь знает, имеет ли wireshark встроенную статистику DNS и ICMP rtt или как их легко получить?

Обновление 2018: См. https://github.com/dagelf/pping


You can use tshark statistics to create a table of all tcp conversations:
$ tshark -r test.pcap -q -z conv,tcp
================================================================================
TCP Conversations
Filter:
                                               |             | |     Total     |
                                               | Frames  Bytes | | Frames  Bytes | | Frames  Bytes |
192.168.108.2:2720      147.234.1.253:21          28      2306      18      1047      46      3353
147.234.1.253:58999     192.168.108.2:2721         3       170       2       122       5       292
192.168.108.2:2718      147.137.21.94:139          0         0       3       186       3       186
192.168.108.2:2717      147.137.21.94:445          0         0       3       186       3       186
================================================================================

Or use this little script:

for file in `ls -1 *.pcap`
do
   tshark -r $file -q -z conv,tcp > $file.txt
done