我有一个小的办公室网络,我遇到了巨大的互联网链接延迟。我们有一个简单的网络拓扑:一台配置为运行 ubuntu 服务器 10.10 的路由器的计算机、2 个网卡(一个连接到 Internet 链接,另一个连接到办公室网络)和一个连接 20 台计算机的交换机。我在路由器上收集了一个巨大的 tcpdump 日志,我想用所有TCP 流的 RTT 时间绘制一个直方图,以尝试找出解决这个延迟问题的最佳方法。那么,有人可以告诉我如何使用wireshark或其他工具来做到这一点吗?
2 回答
Wireshark 或 tshark 可以使用tcp.analysis.ack_rtt为您提供每个接收到的 ACK 数据包的 TCP RTT,它测量捕获 TCP 数据包和该数据包的 ACK 之间的时间增量。
您需要注意这一点,因为您的大多数 ACK 数据包将来自您的办公室机器 ACKing 从互联网接收的数据包,因此您将测量路由器从互联网看到数据包和从办公室机器看到 ACK 之间的 RTT .
要测量您的互联网 RTT,您需要查找来自互联网的 ACKS(确认从您的网络发送的数据)。假设你的办公室机器有像 192.168.1.x 这样的 IP 地址,并且你已经在路由器的 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
- -r 选项告诉 tshark 从你的 .pcap 文件中读取
- -Y 选项指定要使用的显示过滤器(不推荐使用不带 -2 的 -R)
- -e 选项指定要输出的字段
- -T 选项指定输出格式
在运行此命令之前,您可以使用 mergecap 实用程序将所有 pcap 文件合并为一个文件。将此输出转换为直方图应该很容易!
这是受 rupello 回答启发的 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