どのシステムエンジニアにおいても「端末がネットワークに繋がっているだろうか?」という、最初の一歩で、Pingコマンドを使うことは当たり前に行われています。
ましてや、ネットワークエンジニアを含む、インフラエンジニアともなると、Pingコマンドを例えると「空手における、突きのようなもの」でして、基礎の基礎ともいうべきコマンドです。
今回は、今更聞けない「Pingの基礎」とその応用、更に「実業務でも使えるPing」のノウハウを、説明していきたいと思います。
「今更聞けない、Pingの基礎について」
Pingコマンドで使用されるプロトコルは、ICMPであり、TCPの一種です(UDPではなく)。
「ICMP Echo」とも呼ばれるこのPingコマンドは「自分の端末と相手の端末が、うまくつながっているか?」をテストするために、有効活用されています。
先ほど、ICMPはTCPだと申し上げましたが、TCPは「一方的に送信するUDP」ではなく、相手からの応答を確認し、結果を表示します。
「Pingコマンドで何がわかるのか?」と問われると、インフラエンジニアは、下記のように、多くの情報を得ることができます。
- 相手端末に電力が供給され、起動中であること
- レイヤー3以下の通信が確立されていること(ポート開放やアプリ起動はレイヤー4以上)
- 相手端末に至るまでの通信経路が確立されていること
- 経由したゲートウェイやルータがいくつあるのか
- パケットの返答時間
Pingを有効活用できるエンジニアは、上記の情報から、障害や問題を切り分けることができます。
では実際に、Pingコマンドの仕様を見てみましょう。
ここでは、Windowsのコマンドプロンプトを実用しています。
ping google.com
デフォルトのPingコマンドは、指定した相手に4回のPingを試行します。
1秒毎に1度のPingを実施し、相手からの返答を5秒待ち、結果返答が帰ってきたら、次のPingを実施する、といった具合です。
Pingコマンドはシングルタスクで動作するため「1秒おきの結果を確認できるもの」ではありません。
例えば、相手の応答が3秒遅延すると、次のPing実施予定まで2秒ずれますし、1秒内に応答があっても、1秒後キッカリにPingを実施します。
そして、一行おきに、その結果とステータスを返答します。
またオプション「-t」を指定すると、コマンド中止(Ctrl + C)するまでPingを実施しますし、
オプション「-n 2」を指定すると、2回のPingを実施します。
ping google.com -t
ping google.com -n 2
このように、Pingコマンドは、様々な場面で活躍するコマンドであることを覚えておきましょう
「こんなところにも使われる!Pingを応用した技術たち」
Pingコマンドは、かなり便利なことから、様々な場面で使用されます。
Traceroute
例えば、コマンド「TraceRoute」はその代表格です。このコマンドは、目的の送信先までの経路を確認し、ゲートウェイ(通過したルータやL3スイッチ)ごとの実測値を測定して表示してくれます。
では、Windowsコマンドプロンプト上でのTracerouteを確認してみましょう。Windowsコマンドプロンプトでは、コマンド「tracert <宛先>」を指定します。
tracert yahoo.co.jp
上記、おなじみのYahoo!宛てにTracertしてみました。宛先に至るまで、12HOP、つまり12個のゲートウェイを通過したことになります。
<数字>msは返答速度、3つ並んだのは、それぞれ3回ずつ試行しているためです。
1行目で直近のルータ、2行目でプロバイダを通過し、12行目で、実際の宛先に到達していることがわかりますね。
このTracerouteで何かわかるか?というと、冗長化されたネットワークである場合(インターネットは殆どがそうですが)「どのゲートウェイを通過したのか」が確認出来るためです。
これが本来の経路と違ったルートを通過していると「冗長化ネットワークにおいて、メインとなるゲートウェイあたりが故障している」「負荷分散機能により、経路を動的に変更されている」のどちらかです。
Tracerouteコマンドは、VRRPやOSPFなどのネットワーク冗長化構成の検証試験などによく使われるコマンドなので、覚えておいて損はありません。
Health Check Monitor
いきなり、医療現場に来たみたいな響きですが、直訳すると「死活監視」と言われます。これは相手先の機器が「通信できているよね?」という確認を、定期的に行っています。
何だか小難しい機能のようにも見えますが、独自のプロトコルを持たないネットワーク機器や、監視ツールが、対象となるあて先に対して、定期的にPingを発しているに過ぎません。
しかしながら、冗長化構成をもつネットワーク機器は「メイン機器がダウンしたら、即座に代替機器として動作」しなくてはならず、とても重要な役割を持っています。
ネットワーク監視や、そのツールに関しても、この機能を用いて、日々、監視を続けているのです。
「実業務で使える!Pingコマンド術集」
「回線帯域を測定する」術
Pingコマンドに流すパケットに、ある程度の「重み」とつけてあげることで、概ねの回線帯域測定することが可能です。
実際にパケットの「重み」については、例えば、オプション「-l 60000」を指定すると、60000Byteのパケットを乗せたPingを実施できます。
ping yahoo.co.jp -l 60000
上記の平均値で出てきた、214msという数字をもとに、通信帯域の計算が可能です。
帯域を求める計算は、下記の通りです。
上記の式に当てはめると、下記の計算となります。
このコマンドは、様々なオプションを組み合わせて使用することができ、例えば「ping yahoo.co.jp -l 60000 -t」とすることで、ひたすらPingを実施し、通信帯域の上下を監視することが可能です。
また、パケットの「重み」については、付与すればするほど、正確な帯域が数値化されます。
ですが、ロングパケットを受信拒否しているゲートウェイもあるため、せいぜい60,000Byteまでが限界でしょう。
「ネットワークの心電図」術
L2ループ発生時のトラブルシューティングや、対象端末の通信状況をチェックするのに有効です。
L2ループは、該当ネットワークが「トラフィック限界までパケットが増幅された状態」にあるため、いかなるパケットも通さない、という性質があります。
そこで、L2ループが発生したネットワーク間で「本来、疎通確認が出来るべき宛先」へ「ping <宛先> -t」を実施し、ポートの抜き差しをするなどして、被疑個所を確認していくのです。
また、リモート操作中のサーバや端末の再起動等が必要になった際、対象端末に対して「ping <宛先> -t」を実施し、再起動完了のフラグとすることもできます。
作業の片手間にコマンドプロンプトを起動し、再起動が完了するまで疎通確認を実施する、というわけです。
インフラエンジニアにとって、ちょっとしたテクニックなのですが、これが自然と実施できると、少しカッコいいですね。
「DNSのチェックとPing送信を同時に」術
Pingコマンドは、ドメインが指定された宛先に対して、nslookup(DNS正引き)を実施して、該当IPをみつけ、そのIPへPingを送信しています。
この記事において、Pingコマンドのご紹介時にわざわざドメインを指定しているのは、その理由が最もな処です。
ネットワークを調査するうえで「DNSが正常であるか?」という確認は、割と頻繁に発生するものです。
普段はIP指定でも全然かまわないのですが「このホストへ接続できない」という問合せに対して、DNSを疑うこともあるのです。
筆者プロフィール
中村京介(36歳)
ネットワークエンジニア6年目、座右の銘は「拝承!」。
零細企業の「ひとり情シス」から一念発起し、ネットワーク系エンジニアを目指す。
初回教育で鬼教官にしごかれ、赴任したとある技師の元で修業を積み、ようやく一人前に。
脱落者の多い官公庁系案件を主に手掛けながら、設計・構築兼、SIerとして前線に立つ。