iperf3 は2点間のネットワーク帯域を測定するツール。サーバ側とクライアント側の2台を用意し、実際にトラフィックを流して実効速度を測る。
WindowsとLinuxの両方で使える。ここでは測定の手順と、よく使うオプションをまとめる。
準備
iperf3 のインストールがまだなら先に済ませておく。
Windowsの場合、公式サイトで配布されているバイナリは2016年の3.1.3で更新が止まっているため、winget かGitHubのビルドから最新版を入れる。
winget install --id ar51an.iPerf3 --exact
詳しい手順は別記事にまとめた。
→ iperf3のダウンロードとインストール|Windows最新版の入手方法
Linuxはパッケージマネージャから入る。
sudo apt install iperf3
測定には2台必要なので、対向で試験する相手側にも同じく準備しておく。
試験構成
一方をサーバ、もう一方をクライアントにする。ここではサーバ側を 192.168.1.200 とする。
[クライアント] ─── ネットワーク ─── [サーバ 192.168.1.200]
サーバ側の実行
iperf3 -s
Server listening on 5201 と表示されれば待ち受け状態になる。
デフォルトのポートは5201番。変更したい場合は -p で指定する。
iperf3 -s -p 5202
接続できない場合はファイアウォールを確認する。サーバ側で5201番(TCP/UDP)の受信を許可しておく必要がある。
クライアント側の実行
iperf3 -c 192.168.1.200
デフォルトではTCPで10秒間測定し、結果が表示される。サーバ側にも同じ結果が出る。
TCPでよく使うオプション
| オプション | 説明 |
|---|---|
--get-server-output |
サーバ側の出力結果もクライアント側に表示する |
-n 10M |
指定した容量で計測する。10Mなら10Mバイト流した結果を測定。1Gとすれば1Gバイト |
-t 30 |
指定した秒数だけ測定する。デフォルトは10秒 |
-i 30 |
指定した間隔(秒)で途中経過を表示する。デフォルトは1秒 |
-P 4 |
並列ストリーム数を指定する。10Gを超える回線ではこれを使わないと上限まで出ない |
-R |
通信方向を逆にする(サーバ→クライアント) |
-p 5202 |
接続先ポートを指定する |
-n と -t は同時に指定できない。容量で区切るか時間で区切るかを選ぶ。
実行例
iperf3 -c 192.168.1.200 -t 30 -i 10 --get-server-output
30秒間測定し、10秒ごとに途中経過を表示、最後にサーバ側の結果もまとめて表示する。
UDPでの測定
iperf3 -c 192.168.1.200 --get-server-output -u -b 10M
| オプション | 説明 |
|---|---|
-u |
UDPで計測する |
-b 10M |
10Mbps制限で計測する。指定しない場合は1Mbps |
--length 1472 |
送信するデータサイズを指定する |
-i 30 |
指定した間隔(秒)で結果を表示する |
-n 10M |
指定した容量で計測する |
UDPでは -b の指定が重要。指定しないと1Mbpsでしか流れず、帯域測定にならない。上限まで流したい場合は -b 0 を指定する。
パケットサイズを1500にしたい場合
--length には1472を指定する。
データ1472 + UDPヘッダ8 + IPヘッダ20 = 1500
MTUの検証をするときは、この計算を意識して指定する。
UDPの結果の見方
UDPではTCPと違い、ジッタとパケットロスが表示される。
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
- Jitter … 到達間隔のばらつき。音声や映像では重要
- Lost/Total … 損失したパケット数と総数
Bandwidth が指定した値(例では10Mbps)を超えていなければ、制限どおりに流れている。
Linuxでバックグラウンド実行する
長時間の測定では、nohup と & を使ってバックグラウンドで走らせる。
サーバ側
nohup iperf3 -s -i 30 &
クライアント側
nohup iperf3 -c 1.1.1.1 -n 10M -i 30 --get-server-output > test.txt &
出力結果をカレントディレクトリの test.txt へ保存している。SSH接続が切れても測定が続く。
結果をJSONで出力する
測定結果を機械的に処理したい場合は -J を使う。
iperf3 -c 192.168.1.200 -J > result.json
定期的に測定して記録を残す用途では、こちらのほうが扱いやすい。
うまくいかないときの確認ポイント
| 症状 | 原因と対処 |
|---|---|
Connection timed out |
サーバ側の5201番がファイアウォールで塞がれている |
unable to connect to server |
サーバ側で iperf3 -s が動いていない。IPアドレスの確認も |
| 速度が全く出ない | UDPで -b を指定していない。デフォルトの1Mbpsになっている |
| 10G回線で上限まで出ない | -P で並列ストリームを増やす |
Windowsで 認識されていません |
パスが通っていない。インストール手順を確認する |