7

私は小規模なオフィス ネットワークを使用しており、インターネット リンクの遅延が非常に大きくなっています。単純なネットワーク トポロジがあります。ubuntu サーバー 10.10 を実行するルーターとして構成されたコンピューター、2 つのネットワーク カード (1 つはインターネット リンク、もう 1 つはオフィス ネットワーク)、および 20 台のコンピューターを接続するスイッチです。ルーターで収集された膨大な tcpdump ログがあり、すべてのTCP ストリームの RTT 時間のヒストグラムをプロットして、この遅延の問題に対する最適な解決策を見つけようとしています。それで、誰かがwiresharkまたは他のツールを使用してそれを行う方法を教えてもらえますか?

4

2 に答える 2

12

Wireshark または tshark は、TCP パケットとそのパケットの ACK をキャプチャする間の時間差を測定するtcp.analysis.ack_rttを使用して、受信した ACK パケットごとに TCP RTT を提供できます。

ほとんどの ACK パケットはオフィス マシンからのものであり、インターネットから受信した ACK パケットであるため、これには注意が必要ですそのため、ルーターがインターネットからのパケットを見て、オフィス マシンからの ACK を確認する間の RTT を測定することになります。 .

インターネット RTT を測定するには、インターネットからの ACK (ネットワークから送信された ACK データ) を探す必要があります。オフィスのマシンに 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 ファイルを 1 つのファイルにマージできます。この出力をヒストグラムに変換するのは簡単です!

于 2011-08-06T23:24:08.040 に答える
1

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/pingを参照

于 2012-03-28T20:01:01.360 に答える