【ラウンドトリップタイムグラフを生成してトラフィックの見える化】kWireshark達人への道 第十歩 RTT(Round Trip Time)グラフの生成

2021年6月5日、題名を修正したよ!

本連載は、筆者がWiresharkの達人となるまでを追うドキュメンタリー作品である。

今回の記事では、ネットワーク監視ソフトウェアに標準で搭載されているRTTグラフをWiresharkで生成しようといった内容です。Round Trip Timeの翻訳は、「往復遅延時間」です。つまり、「行き帰りの時間」となりこの時間が明らかに多いと通信パスでなんらかの遅延が発生している可能性があります。例えば、あるサイトにアクセスした時に通信遅延が発生している場合、「自PC→スイッチ→ルータ→AS1234→AS5678→目的のサイト」といった経路のどこかのルートで、遅延が発生している可能性があります。Solarwinds社のNetpathはこの通信ルートの遅延を視覚化してくれるツールです。Wiresharkには残念ながらそこまでの機能はありませんが、収集したパケットからRTTグラフを生成することができます。今回は、そのやり方をご紹介します。

1.検証環境準備

先ずは検証環境のおさらいです。以下の赤枠が今回試験をした環境となります。

図1 RTTグラフ生成検証環境

今回iperf3というツールを使って、tcp通信を生成します。PC Engine製のapu4は中身はUbuntu18.04。有線接続のPCはWindows10です。iper3を両端末ともインストールしておきます。ダウンロードは、こちらから。

次に通信遅延を故意的に発生させたいと思います。apu4側でtcコマンドを使えば通信遅延を発生させることができます。コマンドは以下の通りです。

#100ms通信遅延の初期設定(addオプション)。apu4のNICインターフェイス名はbr0
apu4:~$ sudo tc qdisc  add dev br0 root netem delay 200ms
#以降、遅延幅を設定する場合は、オプションchangeを利用する
apu4:~$ sudo tc qdisc change dev br0 root netem delay 500ms
#設定を削除する場合は、以下コマンドを実行
apu4:~$ sudo tc qdisc del dev br0 root

今回の検証では、200msの設定をしました。※iperf3ではデフォルトの実行時間が10秒ととても短く遅延のグラフ化には適当でありません。よって、クライアント側のオプションでiperf3の実行時間を5分に設定しました。本試験の間、サーバー側のapu4側ではtcpdumpコマンドを利用してパケットをキャプチャしております。

2. iperf3の実行結果

apu4:~$ sudo iperf3 -s

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.8, port 55020
[  5] local 192.168.1.254 port 5201 connected to 192.168.1.8 port 55024
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  99.8 KBytes   817 Kbits/sec
[  5]   1.00-2.00   sec  1.03 MBytes  8.62 Mbits/sec
[  5]   2.00-3.00   sec  1.25 MBytes  10.5 Mbits/sec
[  5]   3.00-4.00   sec  1.25 MBytes  10.5 Mbits/sec
[  5]   4.00-5.00   sec  1.25 MBytes  10.5 Mbits/sec
~snip~ 
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-300.20 sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-300.20 sec   368 MBytes  10.3 Mbits/sec                  receiver

iper3は5201ポートを利用して通信試験をするので収集したパケットはこのポート番号でフィルタをかけて調査を開始します。

3. ストリーム番号の選定

Wiresharkでは3ウェイハンドシェイクで開始したTCP通信が終了する(FIN-ACK/ACK,RSTによる中断)迄の一連の通信をストリームと呼んでいます。そして、それぞれストリームごとに番号を振っています。今回iperf3で実験した通信のストリーム番号を特定してグラフ化してみましょう。

図2 TCP 5201ポートによるフィルタ

フィルタに”tcp.dstport == 5201″と入力し、キーボードの「Enter」ボタンをおしてください。

図3 追跡→TCPストリーム

適当なパケットを選択した状態で、右クリック。「追跡」→「TCPストリーム」と進んでください。

図4 ストリーム番号の確認

図4が表示されるので、「ストリーム」の右に記載されている番号を確認します。(※例では、61)

図5 RTTのグラフ表示選択

フィルタに「tcp.stream eq 61」となり、選択したストリーム番号の通信だけが表示されている状態から、「統計(S)」→「TCPストリームグラフ」→「往復遅延時間」を選択してください。

図6 RTTグラフ表示

図6にRTTグラフが表示されます。若干ばらつきはあるものの概ね200msで推移していることが分かります。本機能を利用すればターゲットプロトコルに対してのRTTを見える化することができ遅延原因特定の証拠となります。

(Visited 4,013 times, 1 visits today)
The following two tabs change content below.
【好きなもの】 インフラ技術が好き。古いものが好き。 【生きてきたフィールド】 システム運用、ソフトウェア開発、ミドルウェア検証、OSSサポート、プリセールスエンジニア、プロジェクトマネジメント 【このサイトでの役割】 サイト管理者。