我有一个小办公室网络,我遇到了巨大的互联网链接延迟。我们有一个简单的网络拓扑:配置为运行ubuntu服务器10.10的路由器的计算机,2个网卡(一个连接到互联网链接,另一个连接到办公网络)和一个连接20台计算机的交换机。我在路由器上收集了一个巨大的tcpdump日志,我想用所有 TCP流的RTT时间绘制直方图,以试图找出解决此延迟问题的最佳方案。那么,有人可以告诉我如何使用wireshark或其他工具吗?
答案 0 :(得分:11)
Wireshark或tshark可以使用 tcp.analysis.ack_rtt 为每个收到的ACK数据包提供TCP RTT,它可以测量捕获TCP数据包与该数据包的ACK之间的时间差。
你需要小心这一点,因为你的办公室机器上的大部分ACK数据包都是来确认从互联网收到的数据包,所以你将测量路由器之间的RTT互联网,并从您的办公室机器看到ACK。
要测量您的互联网RTT,您需要从互联网上查找ACKS(确认从您的网络发送的数据)。假设你的办公室机器有IP地址,如192.168.1.x,你已经记录了路由器LAN端口上的所有数据,你可以使用如下的显示过滤器:
tcp.analysis.ack_rtt and ip.dst==192.168.1.255/24
要将RTT转储到.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
在运行此命令之前,您可以使用mergecap实用程序将所有pcap文件合并为一个文件。将此输出转换为直方图应该很容易!
答案 1 :(得分:1)
这是受卢佩罗回答启发的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 "\033c";
for (0..$m) { printf "%6s %6s %8s\n",$t[$_],sprintf("%3.2f",$h[$_]/$o*100),$h[$_]; };
}
较新版本的tshark似乎在“tshark”前面使用“stdbuf -i0 -o0 -e0”效果更好。
PS有没有人知道wireshark是否内置了DNS和ICMP rtt统计数据或者如何轻松获取这些数据?
2018年更新:见https://github.com/dagelf/pping
答案 2 :(得分:-1)
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