クイックノート

ちょっとした発見・アイデアから知識の発掘を

ネットワークのスループットを時系列で計測する【iperf】

インターネットの通信速度は、他に接続している人の有無や、
無線の電波状況などで絶えず変化します。

具体的にどのように変化するのかを知りたいと思った時、
通信速度(スループット)の計測を行うのが自然でしょう。

スループット計測の簡単な方法は iperf を使うことです。
この記事では iperf を使ってスループットの時系列計測を行います。

iperf の仕組み

iperf では、2台の端末、サーバーとクライアント間で、
計測用のパケットを送信し、送信できたパケット量を計測することで、
スループットの測定を行います。

f:id:u874072e:20180423105502p:plain

クライアントは、パケットをサーバーに向けて送信し、
サーバーをそのパケットを受け取ります。

このように、クライアントとサーバーはそれぞれ別々の働きをするので、
iperfにはサーバーモードとクライアントモードの二つのモードがあり、
起動時にどちらかを選択して起動します。

準備

インストール

linux であれば、

apt-get install iperf

で、iperfをインストールできます。

IPアドレスの確認

iperf ではサーバーのIPアドレスを指定してパケットの送信を行います。

そのため、サーバーとして動かす予定の端末の
IPアドレスを事前に確認しておきましょう。

linux であれば「ifconfig」などを利用して、アドレスを確認できます。

計測実行

サーバーの起動

サーバー側の端末上で、
iperfをサーバーモードとして立ち上げます。

サーバー上の端末で、

iperf -s

を実行すると、サーバーモードでiperfが立ち上がり、
クライアントからの接続を待ち受ける状態になります。

デフォルトではTCPでの接続を待ち受けますが、
UDPで待ち受ける場合は,

iperf -s -u

と"-u"オプションを指定します。

クライアントの起動

サーバーの準備ができたら、クライアントを起動して、
計測を開始します。

クライアント上の端末で、

iperf -c [IPアドレス]

で、[IPアドレス]に指定した端末に向けて通信、測定を開始します。

計測が終了すると結果が出力されます。

デフォルトではTCPでの通信を開始しますが、
UDPで通信する場合は、

iperf -u -c [IPアドレス]

とします。

時系列の測定

iperfのデフォルトでは、一定時間の計測を行った後、
その期間での平均のスループットを計算します。

時間的な変化を追いたい場合には、
この計測を繰り返し行う必要がありますが、
これは、iperf のクライアント側のオプションを指定することで実行できます。

計測間隔と全体の計測時間

iperfの計測時間を変更するオプションには、
以下の二つがあります。

  • -i
  • -t

上の「-i」は計測の間隔を指定するのもで、
指定された時間毎の平均値を計算して出力します。

もう一つの「-t」の方は、全体での計測時間を指定するもので、
ここで指定された時間が経つと計測が終了されます。

例えば、

iperf -t 100 -i 2 -c [IPアドレス] 

とすると、2秒間隔で計算したスループットが出力され、
100秒経った時点で計測が終了します。
そのため、結果としては50回のスループット測定結果が得られることになります。

結果のファイル出力

測定結果は端末上に表示されますが、
グラフを書くなどしたい場合は、
ファイルに出力した方が便利でしょう。

「-yc」オプションを付けることで、
CSV形式で結果を出力してくれるので、
Excelなどの表計算ソフトで扱いやすくなります。

ローカルでの計測

それでは実際に計測してみましょう。

パソコンを2台用意して、LAN内で接続します。

今回は、デスクトップを有線でルーターに接続し、
ノートパソコンを無線で接続して、
デスクトップをサーバー、ノートパソコンをクライアントとしました。

CSVに出力して、Excelで開けばすぐにグラフを書くことができます。
下のグラフは、1秒間隔で100秒間スループットを計測した時の、
時系列を表しています。

f:id:u874072e:20180423134050p:plain

青色はTCPスループットで、
オレンジ色はUDPスループットを表しています。

無線を挟んでいるからなのか、
スループットが上下している様子が見られます。

また、TCPの方がスループットの揺れが大きいようにも見えます。

パブリックサーバを利用した計測

パソコン二台もないんだけどという人もご安心下さい、
iperf をサーバーモードで待ち受けてくれているものがあるので、
クライアントさえあれば、iperfを試してみることができます。

下のサイトに乗っているリストには、
iperfのサーバーが公開されています。
「サーバー名」を[IPアドレス]の代わりに指定すれば、
そのサーバーに向かって通信を行うことができます。

iperf.fr

それでは、この公開されているサーバーの一つである、
アメリカのサーバへパケットを送った時の
スループットの時系列を見てみましょう。

下の図は、Wifi で接続している
ノートパソコンをクライアントにした時の計測結果です。

f:id:u874072e:20180423140016p:plain

クライアント側の状況は、上のLAN内での通信同じ状況にしていますが、
スループットが180Mbps→18Mbpsと一桁落ちています。
広域のインターネットにでることで、
他の通信などとの兼ね合いからスループットが下がっているように見えます。
スループットが安定しているように見えるのも、
ボトルネックが無線ではなく、インターネット上のリンクに移ったためだと思われます。

上は、ノートパソコンからの接続でしたが、
有線接続したデスクトップから計測すると違うのでしょうか。 下のグラフは、デスクトップをクライアントにして計測した時の結果です。

f:id:u874072e:20180423140826p:plain

まず、スループットの桁が大きく違うことが分かります。
またTCPが独特の変化をしています。

TCPは、通信に成功すれば流す量を増やし、
通信に失敗すれば流す量を減らすことで、
ネットワークの混雑を避けようとします。
そのため、ぎざぎざの波形が見えることになります。

さて、デスクトップとノートパソコンのTCPでここまで動作に違いが出るのはなぜでしょうか。
これは、どうやらOSの違いによるもののようです。

今回使ったデスクトップのOSはUbuntuでしたが、
ノートパソコンのOSはWindowsです。

それぞれのOSではCubic TCPとCompound TCPと呼ばれる
異なるタイプのTCPが搭載されていて、
OSが異なると、TCPの振る舞いが変わる可能性があります。

プライバシーポリシー