連載
» 2015年01月28日 19時32分 UPDATE

ネットワーク管理の基本Tips:サーバーとの通信状況を確認するには? ネットワークの速度を測るには? pingコマンド

他のホストがネットワークに接続できているか、あるいは自ホストのネットワークデバイスに問題があるか確認するには、パケットを送信し反応を見ることが最初に行うべき作業です。その際利用するコマンドが「ping」で、TCP/IPネットワークを管理する上で必須の存在です。

[海上忍,@IT]

バックナンバー

連載バックナンバー

 本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、サーバーのネットワーク接続状況を確認する際に利用することが多い基本コマンドpingを紹介します。

pingコマンドの書式

ping [オプション] ホスト名

※[ ]は省略可能な引数を示しています



パケットをネットワーク上のホストへ送信するpingコマンド

 あるホストに対してパケットを送信し反応を見ることで、そのホストが稼働しているかどうか、そのホストまで正常にIPネットワークが通じているかを確認するコマンドです。パケットの送信先にはホスト名(FQDN)の他、IPアドレスを指定することもできます。

 pingコマンドでホストにパケット(ICMPエコーリクエスト*)を送信し、そのホストから(ICMPエコーリプライ)が返ってきた場合に通信可能な状態と判断できますが、リクエストの送信からリプライの受信までにはある程度の遅延が発生します。その時間を測定することにより、大まかではあるものの、ネットワーク速度を測定することが可能です。

*ICMP(Internet Control Message Protocol) 「ICMP(Internet Control Message Protocol)とは、TCP/IPが動作するために必要な、補助的な役割を果たすためのプロトコルである。ユーザーやアプリケーション自身が明示的にこのプロトコルを利用したり、送受信したりすることは少ない(唯一使うのはpingコマンドくらいだろうか)。しかしICMPは、TCP/IPネットワークが円滑に稼働するためには欠かせない、重要なプロトコルである」(詳しくは『基礎から学ぶWindowsネットワーク:第12回 TCP/IPプロトコルを支えるICMPメッセージ』参照)。



 pingが出力する行からは、パケット送信先のノードがアクティブ(ネットワークに接続している)かどうか、そこまでの経路に問題がないかどうかを読み取ることができます。応答時間のばらつきが激しい場合は、パケットを送信したホストまでのネットワークが混雑していると判断できます。

 Linuxに収録されているpingの場合、[Ctrl]―[C]で停止しない限り、パケットの送信を続けます。停止させると、実行開始時点からの応答時間を集計し、最小/平均/最大/平均偏差を表示します。

 リプライに含まれるTTL(Time to Live)の値から、パケット送信先のホストをある程度推定することも可能です。RHLやCentOSなどLinux系とOS Xは「64」、FreeBSDなどBSD系は「54」、HP-UXやSolarisは「255」、Windowsは「128」が初期値とされているため、TTLを見ればOSの種類が分かるというわけです。

主なオプション

 pingコマンドで利用する主なオプションは次の通りです。

表1 pingコマンドのおもなオプション
オプション 引数 意味
-c 数 パケットの送信回数を指定する
-i 秒 パケットの送信間隔を秒単位で指定する
-n 数値のみ出力する(名前解決を行わない)
-r ホストへ直接パケットを送信する(ルーティングしない)
-R パケットの経路を表示する
-q コマンド実行開始時と終了時のメッセージのみを表示します。
-s サイズ パケットサイズをバイト単位で指定する(初期値は56)
-t TTL値 パケットのTTL(Time to Live)値を指定する
-v 詳細情報を表示する

パケットの送信回数を指定するには?

 ホスト名またはIPアドレスを引数に与えてpingコマンドを実行すると、パケットの送信が繰り返されます。Control-Cを押せば停止させることができますが、「-c」オプションで回数を指定することもできます。

 なお、デフォルトでは1秒間隔でパケットが送信されますが、「-i」オプションで間隔を指定することも可能です。「-i 0.5」のように小数も指定できますが、pingコマンドでは最短の間隔が200ミリ秒とされているため、「-i 0.2」以下はエラーとなります。

$ ping -c 3 -i 0.5 www.atmarkit.co.jp
PING www.atmarkit.co.jp (202.218.219.147) 56(84) bytes of data.
64 bytes from www.atmarkit.co.jp (202.218.219.147): icmp_seq=1 ttl=54 time=8.70 ms
64 bytes from www.atmarkit.co.jp (202.218.219.147): icmp_seq=2 ttl=54 time=20.7 ms
64 bytes from www.atmarkit.co.jp (202.218.219.147): icmp_seq=3 ttl=54 time=10.0 ms
--- www.atmarkit.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 8.706/13.189/20.786/5.401 ms

ネットワークの速度を測るには?

 送信したパケットのサイズと送信先ホストからの応答時間を見ることで、ネットワーク速度を大まかに測定することができます。その公式は「(パケットサイズ×2)÷応答時間」で、パケットサイズはフラグメントを起こさないサイズ(Ethernetの場合1500以下、PPPoE環境を考慮すると1400が無難)を「-s」オプションを使い指定します。なお、パケット内で受け取るデータの量は、ICMPヘッダの分だけ指定したパケットサイズより8バイト多くなります。

 例えば、www.atmarkit.co.jp(202.218.219.147)までの速度を測る場合、以下の実行例では応答時間が平均20.1ミリ秒ですから、上の公式に当てはめると「(1400×2)÷0.0201 = 139303.5」、すなわち約139Kバイト/秒ということになります。

$ ping -s 1400 www.atmarkit.co.jp
PING www.atmarkit.co.jp (202.218.219.147) 1400(1428) bytes of data.
1408 bytes from www.atmarkit.co.jp (202.218.219.147): icmp_seq=1 ttl=54 time=10.0 ms
1408 bytes from www.atmarkit.co.jp (202.218.219.147): icmp_seq=2 ttl=54 time=22.7 ms
(中略)
^C
--- www.atmarkit.co.jp ping statistics ---
10 packets transmitted, 9 received, 10% packet loss, time 10132ms
rtt min/avg/max/mdev = 10.074/20.905/25.393/4.805 ms

「ネットワーク管理の基本Tips」バックナンバー

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。