コマンドプロンプトで疎通確認を実施するコマンド「ping」をご存知でしょうか?
ドメイン名やIPアドレスを入力するだけで疎通確認ができることから、マシンの起動確認・ネットワークの疎通確認などの用途に頻繁に利用されています。
そのpingですが、前々から個人的に以下のような疑問がありました。
なぜpingはポート番号を指定できないのだろう?
本日はこの疑問について調べた情報を共有したいと思います。
pingはポート番号を指定できない?
まずは状況確認です。
ポート番号の指定なしでpingを使ってみましょう。ローカルのループバックアドレスである127.0.0.1にpingを送ってみます。
すると、以下の画像のような結果が得られます。

正常にpingレスポンスが返ってきました。
では次に、ポート番号を指定して送信してみましょう。例として、httpのポートである80番を指定してpingを送ってみると、以下のように表示されます。

「ホストが見つかりません。」とのことです。うまくいきません。
何故でしょうか。
その答えはネットワークにおける「pingの分類」と「ポート番号の意味」を理解しすれば見えてきます。
順番に確認していきましょう。
pingはICMP通信
pingはICMPという通信に分類されています。
ICMPとはInternet Control Message Protocolの頭文字を取った言葉です。
通信の異常が発生しているときに、通信元に異常を知らせるために使われる通信のひとつです。
それを簡単に使えるようにしたアプリケーションがping.exeやtraceroute.exeです。
ほら、コマンドラインにping.exeと打ってもきちんと使うことができます。

話が逸れましたが、pingはICMP通信ということを認識することが大事です。
ポート番号
お次はポート番号について確認していきましょう。
ポート番号というと、何を思い浮かべますか?わたしの場合は、以下のようなところです。
- 25番はSMTP、80番はhttp、443番はhttps・・・
- アプリケーションごとにファイアウォールを開いてあげないといけないことがある
大体の人は同じようなことを思い浮かべるのではないでしょうか。
イメージとしては大体あっています。
ポート番号は何に対するナンバリング?
お次に確認するのが、ポート番号とは何に対する識別子(ナンバリング)なのか、です。
ここまで分かっている人は、意外と少ないのではないかと思います。
結論から言ってしまうと、ポート番号とはTCPとUDPの通信を、適切に仕分けるための識別子です。
自分で設定したことのある方なら見たことがあるかもしれませんが、ファイアウォールの設定では、[ポート番号]と[TCP or UDP]の組み合わせで、設定ができたはずです。

そうなんです。
TCPとUDPは、ICMPとは通信規格自体が違うのです。
ICMPとTCPとUDP
「ICMP」と「TCP・UDP」は別々の通信規格です。
インターネットプロトコルスイート
インターネットプロトコルスイートという言葉があります。
長々としているので、TCP/IPという言葉を使うこともあります。
TCP/IPによると、今般の通信技術は4つの層で定義することができます。
層の名前 | 層が規定しているもの |
---|---|
アプリケーション層 | 他のマシンのアプリごとのデータ送受信方法 |
トランスポート層 | 他のマシンとどのようにデータの送受信するか |
インターネット層 | 他のマシンを見つけたり接続したりできるルール |
リンク層 | ケーブルや電波の規格 |
このうち、TCPやUDPはトランスポート層に属します。
転送速度は遅いが精度が高い通信(TCP)や、転送速度は速いがデータ欠損が起こり得る通信(UDP)と、説明できるでしょうか。
一方、IPやICMPはインターネット層に属します。
接続している多数のマシンを見分ける通信(IP)や、接続しているマシンの状況を把握する通信(ICMP)などとなります。
ICMP
ICMPはどの層に属しているのかというと、インターネット層なんですよね。
トランスポート層の規格であるTCPやUDPの識別子(ナンバリング)であるポートを、インターネット層でも指定できるはずがありません。。
ICMPの通信には、ポート番号は何の関係もないんですよね。
しかし三者とも、IPアドレスやドメイン名を使った通信というところでは共通しているため、同じようなものと考えられがちです。
実は線引きがあったということですね。
納得されましたでしょうか?
もうすこし技術的なハナシをするのであればパケットやネットワークプロトコルの階層を理解しなければいけないため、今回は省略します。というか、私の技術レベルでは語り切れませんw
興味のある方は、名著である『マスタリングTCP/IP』の読破をオススメします。
以上でした。
コメント