はじめに
今回は、TCP/IPを利用するためには必須な『ポート』と『ポート番号』について解説していきます。
では、『ポート』と『ポート番号』とは何なのでしょう?
ちょっと長いですが、結論から言えば『ポート』と『ポート番号』は『データをアプリケーションへと到達させるための、ネットワーク通信最後のやり取り』ということになります。
『ポート』の存在理由とは?
ネットワーク上でデータを通信するには『>IPアドレス』が必要です。
IPアドレスが分かっていれば、ルーティングして送信宛のコンピューターの場所が分かりデータを送り届けられるからです。
しかし、IPアドレスの役目は一旦ここで終わりになってしまいます。
次に必要なことは、送られてきたデータをコンピューターのどこに届けるかというものです。
コンピューターにとっては、ネットワークからデータが送られてきても、それをどのアプリケーションやサービスに渡せば良いかが不明です。
なぜなら、コンピューター上では複数のアプリケーションが常に同時に稼働しているからです。
あなたが個人的にアプリケーションを起動させた覚えがなくても、裏側ではコンピューターを起動した段階で数多くのアプリケーションやサービスも起動しています。
それらは、いつの間にかあなたが知らない間に通信すら行なっていることもしばしばです。
あなたも覚えがあるとは思いますが「アプリケーションのアップデートの準備ができました」などのポップアップは、正にひと仕事の通信を終えたところだと言えます。
そして、コンピューターに送られてきたデータは、インストールされているアプリケーション全てに送ることは無意味ですし、勝手にどれかのアプリケーションに絞るわけにもいきません。
増してや、コンピューターやスマホを利用していれば分かりますが、あなたも同時に複数のアプリケーションでそれぞれのデータをやり取りすることもあるはずです。
例えばファイルのアップロードやダウンロードをしつつ、他のWebサイトにアクセスすることなどです。
このような複数の要求を同時にコンピューターがこなす際に、データのやり取りを上記に書いたように曖昧にすることはできません。
そこで、こうした問題を解決するのが『ポート』と呼ばれる仕組みであり土台になります。
『ポート番号』のイメージ
では、実際にポートの仕組みを考えていきますが、まず『ポート』とは、簡単に例えるとマンションやアパートをイメージしてもらった方が早いです。
マンションやアパートがある『場所』は、住所、つまり『IPアドレス』がそれを担っています。
そして、その各部屋にあたるのが『アプリケーション』になります。
しかし、この『部屋』に辿り着くには、もう一つ重要な情報として『部屋番号』が必要になります。
その部屋を表す番号が『ポート番号』と呼ばれるものです。
ポート番号とは、アプリケーションを識別するために使われる大事な番号なのです。
パケットが送られてきた状況を想定すると、受信側であるマンションに辿り着いたあとは、送信側からのポート番号を頼りに、該当のアプリケーションの部屋に行き、その部屋のポート(番号)を開けてくれた状態を指します。
そして、そのアプリケーションとの通信が確立すれば、ポートはアプリケーション層とトランスポート層を結ぶパケットの出入口となり、送信側のコンピューターと受信側のコンピューターとの間の通り道を確保したことを表します。
そこからは、送信側のリクエストに対しアプリケーションがデータの処理をし始めます。
処理が終われば、その出入口を引き返すように使って、送信側にレスポンスを返すことになります。
例え、複数のアプリケーションに通信が届いた場合でも、送信側から何番ポートにアクセスしてきたかがパケットから分かるので、受信側のアプリケーションはそれぞれの出入口を開いて、届いてきたパケットを処理することができます。
『ポート番号』の作られ方
普段、私たちはWebサイトにリクエストして何気なく目的のサーバーにアクセスしていますが、その際にポート番号を指定することはありません。
これは各アプリケーションが自動的にポート番号を指定して通信しているからです。
では、このポート番号は一体どのように作られ、決められているのでしょうか?
データの通信を行う場合、データがトランスポート層に渡ると、『TCPプロトコル』か『UDPプロトコル』が、ポート番号をそのデータのパケットに付けます。
ポート番号の元は2バイト(16ビット)になっていて、これは『0〜65535』という数字で表します。
難しいことは置いておいて、つまり『65535個』という数多くのポート番号を利用することができるようになっているわけです。
ただ、アプリケーション側が何でもかんでもこのポート番号を使えるのかというそうではなく、プロトコルによって利用できる番号がある程度決まっています。
では、ポート番号がどのように使われるかを見ていきましょう。
『ポート番号』とその分類
『65535』もあるポート番号は、果たしてどのように分類されて使えるのでしょうか?
まずポート番号には大きく分けて3種類あります。
それは、『ウェルノウンポート番号』『予約済みポート番号』『ダイナミック/プライベートポート番号』と呼ばれます。
これらはそれぞれ用途が分けられていて、アプリケーションは必要なポート番号を指定して使うことになっています。
『ウェルノウンポート(Well Known Port)』
ポート番号は『0〜1023』まで指定されています。
ウェルノウンポート番号は、『IANA(Internet Assigned Numbers Authority)』という、インターネット管理組織(ICANNの下部組織)によって公式に確保されている、メジャーなサービスやプロトコルが利用するポート番号になっています。
簡単に言えば、ウェルノウンポート番号は、ネットワークサービスを提供するサーバーソフトが使用する番号です。
例えば、HTTPである『80』、SMTP『110』、POP3『143』、IMAP『143』、DNS『53』などは専用のポート番号として決められているわけです。
このようにサービスに対して番号が決められていることで、例えばクライアントがWebサイトにアクセスしようとした際には、Webサーバーソフトのポート番号をわざわざ調べることもなく、自動的に80番を指定する形でデータのやり取り行っています。
『予約済みポート(Registered Port)』
ポート番号は『1024〜49151』まで指定されています。
特定のアプリケーションやサービス専用のポートで、IANAが登録を受け付けて管理するものになっています。
サーバー側に新たなポートが必要になったら、このカテゴリーのポート番号を選んで利用できるようにしてもらうという番号です。
また『SIP:5060』や『HTTP:8080』などメジャーなものも含まれています。
『ダイナミック/プライベートポート(Dynamic and/or Private Port)』
ポート番号は『49152〜65535』まで指定されています。
基本的には用途が決められていない「ダイナミックポート」として利用できるので、個人でも利用が可能です。
つまり、自由に使えるポート番号です。
ただ、仮にWebサーバー側が独自に選んだポート番号を使用している場合は、クライアント側からそのポート番号をサーバー側に通知する必要があります。
その方法は『sample.com:50000』のように、URLにポート番号をあらかじめ付けておくことで、クライアントからのアクセスをサーバー側で判断できるようにしています。
ポート番号のまとめ
ポートの種類 | ポート番号 | 私的利用 |
---|---|---|
ウェルノウンポート番号 | 0〜1023 | 不可 |
予約済みポート番号 | 1024〜49151 | 可能 |
ダイナミック/プライベートポート番号 | 49152〜65535 | 可能 |
余談ですが、ポート番号を使ったデータのやり取りを『ソケット』と呼びます。
まとめ
『ポート』と『ポート番号』があることで、目的のアプリケーションへと通信でき、データが辿り着けるようになるんですね。
TCP/IPモデル、IPアドレス、ポートと、データが通る道にはやることがいっぱいあるのに、わずか数秒で行ったり来たりをできるなんてデータが羨ましいです。
人間にもどこでもドアが欲しいなぁw