- 1 iftopコマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 事前準備
- 5 オプション一覧
- 6 基本的な使い方
- 7 ホスト名をIPアドレスで表示する方法(-n)
- 8 ポート番号を表示する方法(-P)
- 9 実行時間を指定する方法(-s)
- 10 filter codeの使い方(-f)
- Z 参考情報
1 iftopコマンドとは?
iftopコマンドは、帯域を測定するツールです。TCPコネクション単位で帯域を確認することができます。ここでは、iperf3コマンドを使ってiftopの動作確認をしてみます。なお、iperf3コマンドの使い方は、iperf3コマンドの使い方 - hana_shinのLinux技術ブログを参照ください。
2 検証環境
2.1 ネットワーク構成
サーバとクライアントの2台構成です。図中のeth0はNICの名前です。
192.168.2.0/24 client(eth0) ------------------------------------------(eth0) server .105 .120
3 インストール方法
iftopパッケージはepelリポジトリにあるので、まず、epel-releaseパッケージをインストールします。
[root@client ~]# yum -y install epel-release
クライアントにiftopパッケージをインストールします。
[root@client ~]# yum -y install iftop
iftopコマンドの版数を確認します。
[root@client ~]# iftop -h -snip- iftop, version 1.0pre4
4 事前準備
サーバでポート番号を開放します。iperf3は,TCP/UDPの5201番ポートを使うので、5201番ポートへのアクセスを許可しておきます。まず、TCPの5201番ポートを開放します。firewall-cmdの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# firewall-cmd --add-port=5201/tcp success
ポートの状態を確認します。TCPの5201番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 5201/tcp
次に、UDPの5201番ポートを開放します。
[root@server ~]# firewall-cmd --add-port=5201/udp success
ポートの状態を確認します。UDPの5201番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 5201/tcp 5201/udp
5 オプション一覧
オプションは以下のとおりです。
[root@client ~]# iftop -h iftop: display bandwidth usage on an interface by host Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6] -h display this message -n don't do hostname lookups -N don't convert port numbers to services -p run in promiscuous mode (show traffic between other hosts on the same network segment) -b don't display a bar graph of traffic -B display bandwidth in bytes -a display bandwidth in packets -i interface listen on named interface -f filter code use filter code to select packets to count (default: none, but only IP packets are counted) -F net/mask show traffic flows in/out of IPv4 network -G net6/mask6 show traffic flows in/out of IPv6 network -l display and count link-local IPv6 traffic (default: off) -P show ports as well as hosts -m limit sets the upper limit for the bandwidth scale -c config file specifies an alternative configuration file -t use text interface without ncurses Sorting orders: -o 2s Sort by first column (2s traffic average) -o 10s Sort by second column (10s traffic average) [default] -o 40s Sort by third column (40s traffic average) -o source Sort by source address -o destination Sort by destination address The following options are only available in combination with -t -s num print one single text output afer num seconds, then quit -L num number of lines to print iftop, version 1.0pre4 copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors
6 基本的な使い方
iperf3コマンドを使って、クライアントからサーバに10(Mbit/s)、30(Mbit/s)でパケットを送信してみます。このとき、iftopコマンドでクライアント/サーバ間の帯域を確認してみます。
6.1 10(Mbit/s)の場合
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3を実行します。テスト時間は600秒、帯域は10(Mbit/s)を指定します。
[root@client ~]# iperf3 -c server -t 600 -b 10M
クライアントでターミナルをもう1つ開き、iftopコマンドを実行します。
直近2秒の帯域は、クライアントからサーバは9.52Mb(★)、サーバからクライアンは7.72Kb(●)であることがわかります。
[root@client ~]# iftop -i eth0 -t -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 client => ★9.52Mb 9.52Mb 9.27Mb 37.1MB server <= ●7.72Kb 10.3Kb 8.53Kb 34.1KB -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 9.53Mb 9.27Mb Total receive rate: 9.38Kb 11.0Kb 9.21Kb Total send and receive rate: 9.53Mb 9.54Mb 9.28Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 10.0Mb 12.1Kb 10.0Mb Cumulative (sent/received/total): 37.1MB 36.8KB 37.1MB ============================================================================================ -snip-
6.2 30(Mbit/s)の場合
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3を実行します。テスト時間は600秒、帯域は30(Mbit/s)を指定します。
[root@client ~]# iperf3 -c server -t 600 -b 30M
クライアントでターミナルをもう1つ開き、iftopコマンドを実行します。
直近2秒の帯域は、クライアントからサーバは28.5Mb(★)、サーバからクライアンは15.8Kb(●)であることがわかります。
[root@client ~]# iftop -i eth0 -t -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 client => ★28.5Mb 28.9Mb 28.9Mb 159MB server <= ●15.8Kb 16.9Kb 17.3Kb 98.7KB -------------------------------------------------------------------------------------------- Total send rate: 28.5Mb 28.9Mb 28.9Mb Total receive rate: 16.4Kb 17.6Kb 18.1Kb Total send and receive rate: 28.6Mb 29.0Mb 28.9Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 30.0Mb 22.7Kb 30.1Mb Cumulative (sent/received/total): 159MB 106KB 159MB ============================================================================================ -snip-
7 ホスト名をIPアドレスで表示する方法(-n)
-nは、ホスト名をIPアドレスで表示するオプションです。
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3を実行します。テスト時間は600秒、帯域は10(Mbit/s)を指定します。
[root@client ~]# iperf3 -c server -t 600 -b 10M
クライアントでターミナルをもう1つ開き、iftopコマンドを実行します。ホスト名(server,client)ではなくIPアドレスが表示されていることがわかります。
[root@client ~]# iftop -i eth0 -t -n -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 192.168.2.105 => 9.52Mb 9.52Mb 8.23Mb 41.2MB 192.168.2.100 <= 7.72Kb 8.08Kb 7.86Kb 39.3KB -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 9.52Mb 8.24Mb Total receive rate: 8.26Kb 8.62Kb 8.71Kb Total send and receive rate: 9.53Mb 9.53Mb 8.25Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 10.0Mb 13.7Kb 10.0Mb Cumulative (sent/received/total): 2.98GB 1.24MB 2.98GB ============================================================================================ -snip-
8 ポート番号を表示する方法(-P)
-Pは、ポート番号を表示するオプションです。
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3を実行します。テスト時間は600秒、帯域は10(Mbit/s)を指定します。
[root@client ~]# iperf3 -c server -t 600 -b 10M
クライアントでターミナルをもう1つ開き、iftopコマンドを実行します。ポート番号(54122)、サービス名(targus-getdata1)が表示されていることがわかります。サービス名は/etc/servicesで定義されていて、5201番であることがわかります。
[root@client ~]# iftop -i eth0 -t -P -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 client:54122 => 9.52Mb 8.02Mb 8.02Mb 6.01MB server:targus-getdata1 <= 7.72Kb 8.19Kb 8.19Kb 6.14KB -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 8.02Mb 8.02Mb Total receive rate: 8.26Kb 8.93Kb 8.93Kb Total send and receive rate: 9.53Mb 8.03Mb 8.03Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 10.0Mb 12.5Kb 10.0Mb Cumulative (sent/received/total): 6.02MB 6.69KB 6.02MB ============================================================================================
9 実行時間を指定する方法(-s)
-sは、iftopコマンドを実行する時間(秒)を指定するオプションです。指定した時間が経過すると、iftopコマンドが終了します。
今までと同じようにiperf3を実行します。今回はiperf3実行の様子は記載省略します。このとき、-sに10秒を指定してiftopコマンドを実行してみます。20:49:57に開始して20:50:07に終了していることがわかります。
[root@client ~]# date;iftop -i eth0 -t -s 10 ; date 2022年 1月 16日 日曜日 20:49:57 JST interface: eth0 IP address is: 192.168.2.37 MAC address is: xx:xx:xx:yy:yy:yy Listening on eth0 # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 client => 9.52Mb 8.61Mb 8.61Mb 10.8MB server <= 7.72Kb 7.64Kb 7.64Kb 9.55KB 2 224.0.0.251 => 0b 0b 0b 0B hananoiPad <= 2.78Kb 3.35Kb 3.35Kb 4.19KB 3 client => 1.22Kb 1.18Kb 1.18Kb 1.48KB DESKTOP-MB6G4KI <= 368b 368b 368b 460B 4 client => 0b 226b 226b 282B WRC-2533GS2 <= 0b 334b 334b 417B -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 8.62Mb 8.62Mb Total receive rate: 10.9Kb 11.7Kb 11.7Kb Total send and receive rate: 9.53Mb 8.63Mb 8.63Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 9.52Mb 17.0Kb 9.54Mb Cumulative (sent/received/total): 10.8MB 14.6KB 10.8MB ============================================================================================ 2022年 1月 16日 日曜日 20:50:07 JST
10 filter codeの使い方(-f)
filter codeを使うと、特定の通信の帯域だけを表示することができます。たとえば、ポート番号やIPアドレスを指定することで、特定の通信だけに絞り込むことが可能です。
10.1 ポート番号で絞り込む方法(dst port/src port)
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3を実行します。テスト時間は600秒、帯域は10(Mbit/s)を指定します。
[root@client ~]# iperf3 -c server -t 600 -b 10M
クライアントでターミナルをもう1つ開きます。"dst port 5201"と指定してクライアントからサーバに向けての通信に絞り込んでみます。クライアントからサーバへの通信の帯域は約9.0Mbであることがわかります。一方、サーバからクライアントへの通信の帯域は0であることがわかります。
[root@client ~]# iftop -i eth0 -t -nP -f "dst port 5201" -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 192.168.2.105:48552 => 9.52Mb 9.62Mb 8.95Mb 17.9MB 192.168.2.100:targus-getdata1 <= 0b 0b 0b 0B -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 9.62Mb 8.95Mb Total receive rate: 0b 0b 0b Total send and receive rate: 9.52Mb 9.62Mb 8.95Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 10.0Mb 0b 10.0Mb Cumulative (sent/received/total): 17.9MB 0B 17.9MB ============================================================================================ -snip-
今度は、サーバからクライアントに向けての通信に絞り込んでみます。”src port 5201"と指定してサーバからクライアントに向けての通信に絞り込んでみます。クライアントからサーバへの通信の帯域は0であることがわかります。一方、サーバからクライアントへの通信の帯域は約7Kbであることがわかります。この帯域は、サーバからクライアントに送信されるTCPのACKによるものです。
[root@client ~]# iftop -i eth0 -t -nP -f "src port 5201" -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 192.168.2.105:48552 => 0b 0b 0b 0B 192.168.2.100:targus-getdata1 <= 7.72Kb 7.80Kb 7.11Kb 10.7KB -------------------------------------------------------------------------------------------- Total send rate: 0b 0b 0b Total receive rate: 7.72Kb 7.80Kb 7.11Kb Total send and receive rate: 7.72Kb 7.80Kb 7.11Kb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 0b 8.12Kb 8.12Kb Cumulative (sent/received/total): 0B 10.7KB 10.7KB ============================================================================================ -snip-
10.2 IPアドレスで絞り込む方法(dst host/src host)
考え方はポート番号の時と同じですので、詳細の説明は割愛します。
送信先Pアドレスが192.168.2.10の通信を絞り込んでみます。
[root@client ~]# iftop -i eth0 -t -nP -f "dst host 192.168.2.100" -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 192.168.2.105:48552 => 9.52Mb 8.56Mb 8.56Mb 10.7MB 192.168.2.100:targus-getdata1 <= 0b 0b 0b 0B -------------------------------------------------------------------------------------------- Total send rate: 9.52Mb 8.56Mb 8.56Mb Total receive rate: 0b 0b 0b Total send and receive rate: 9.52Mb 8.56Mb 8.56Mb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 10.0Mb 0b 10.0Mb Cumulative (sent/received/total): 10.7MB 0B 10.7MB ============================================================================================
今度は、送信元IPアドレスが192.168.2.10の通信を絞り込んでみます。
[root@client ~]# iftop -i eth0 -t -nP -f "src host 192.168.2.100" -snip- ============================================================================================ # Host name (port/service if enabled) last 2s last 10s last 40s cumulative -------------------------------------------------------------------------------------------- 1 192.168.2.105:48552 => 0b 0b 0b 0B 192.168.2.100:targus-getdata1 <= 7.72Kb 7.24Kb 7.24Kb 5.43KB -------------------------------------------------------------------------------------------- Total send rate: 0b 0b 0b Total receive rate: 7.72Kb 7.24Kb 7.24Kb Total send and receive rate: 7.72Kb 7.24Kb 7.24Kb -------------------------------------------------------------------------------------------- Peak rate (sent/received/total): 0b 8.53Kb 8.53Kb Cumulative (sent/received/total): 0B 5.43KB 5.43KB ============================================================================================
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ