この記事では、Web アプリケーション開発の話題の中でよく登場する
「ポート番号」という言葉の概要を解説します。
執筆にあたって
書籍「マスタリングTCP/IP 入門編(第6版)」の内容より
事実やアイデアをまとめ直して構成しています。
参考: マスタリングTCP/IP 入門編(第6版) | Ohmsha
物理的な機器の外部インターフェースの「ポート」とは別の概念です!
PC やルーターなど、コンピューター機器の外部インターフェースのことも
「ポート」と言いますが、
ここでの「ポート番号」とは、それとは全く別の概念を指しています。
明確に区別するために、この記事では「ポート番号」と表現します。
ポート番号とは
ポート番号とは、
通信を行っている同一のコンピューター内のプログラムを識別するときに利用される番号です。
同一のコンピューターの中でも複数のプログラムが通信を行うことがあります。
例えば、同一のサーバーで次のような通信を同時に待ち受けることもできます:
通信 | 利用すべきポート番号 |
---|---|
Web ページを閲覧するためなどの https リクエスト | 443 |
メールの送信手続き | 587 |
ポート番号がなかったらどうなるの?
もし、ポート番号がなければ
同時に待ち受けているどちらのプログラムに通信のデータを渡すべきなのか
判断するのが非常に困難になります。
この状態を郵便配達にたとえると、
封筒に記載された宛先が住所だけで、誰宛かの記載がないのと同じ状態です。
封筒を受け取った人は、封筒を誰に渡すべきかを判断するために
封筒を開けて内容などの確認をしなければならなくなります。
大量に通信する上で、このようなことがあっては非効率的です。
ポート番号はどうやって決まるの?
通信方式ごとに利用すべきポート番号が定められています。
これを定めているのは
「IETF」という、誰でも参加可能なインターネット標準化団体です。
IETF | Internet Engineering Task Force
広く使われるポート番号は「well-known ports」と呼ばれ、
次の Web サイトで確認することができます:
Service Name and Transport Protocol Port Number Registry
少なくとも一般に公開するサービス等でこれらのポート番号を別の用途に使うのは
混乱を招く可能性があるため行わないほうが無難です。
ポート番号を意識しなくていいように標準のポート番号を使おう
普段私たちが生活している中ではポート番号を意識しなくても
Web サービスを利用したりメールを送信することができます。
例えば ブラウザーは特に指定しない限り、 URL を入力すると
ドメインが指し示すサーバーのポート番号 443 へ通信します。
メール送信も同様に、メールのアプリケーションは特に指定しない限り
メール送信時にはメール送信サーバーのポート番号 587 への通信を行います。
もしサーバー側が別のポート番号で通信を待ち受けている場合、
ユーザーにサービスを提供するためには
ブラウザーやアプリケーションに対して特殊な設定を行ってもらうことになってしまいます。
サービスを開発するときは
「well-known ports」の標準を守ってポート番号を使うようにすると
ユーザーはポート番号を意識する必要がなくなり、サービスを提供しやすくなります。