Построить гистограмму 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