ポートと言うと港ですが、ネットワークでのポートも港のような役割を持っています。
ちなみにネットワークでポートというと、スイッチやルーターなんかのネットワーク機器の
LANの接続口もポートと言ったりしますが今回はそのポートではありません。
さて、IPアドレスはIPネットワーク上で通信相手のコンピュータを特定できますが、
送信したデータをその通信相手のコンピュータのどのアプリケーションが受け取るのかまでは
IPアドレスは面倒を見てくれません。
なので、どのアプリが受け取るのかを別に指定してやらないといけません。
それを特定するためのものが「ポート番号」と呼ばれるものです。
ポート番号は16ビットの符号なし整数(0~65535)で表されます。
このポート番号ですが、主要なサービスは番号を決めてあります。
それらのポートは「ウェルノウンポート」と呼ばれていて、IANAという所が0~1023に割当てています。
たとえば、HTTPは80番、SMTPは25番といった感じです。
また、ウェルノウンポート以外にも、さしおり登録済のポートがあり、これらのポートを
「レジスタードポート(登録済みポート)」といい、1024~49151番までが割り当てられていて、
ソフトウェア開発元が独自アプリケーション用にIANAへ申請してIANAが管理しています。
で、残りの49152~65535番までのポートは「どうぞご自由に使ってね」となっているわけです。
さて、ここを見ている人ならネットをやっていますよね?
例えば、ブラウザで天草webの駅へアクセスする場合を考えてみます。
URLは、http://amakusa-web.jp です。
まず、DNSという仕組みでamakusa-web.jpのIPアドレスを取得します。
(DNSについてはまた別の機会にでも:単純に言うとドメイン名からIPアドレスを調べる仕組みです)
取得した天草Webの駅のサーバーのIPアドレスへ通信を試みますが、IPアドレスだけでは
サーバーのどのサービスに接続するかわかりません。
この場合、URLからもわかるとおり、HTTP通信を行います。
HTTPではポート番号が80番だと決まっているので天草Webの駅のサーバーの80番ポートへ接続します。
相手のポートと接続する場合はこちらも相手と接続するためのポートが必要です。
ただし、相手のポートと同じでないといけないわけではないのでこれはブラウザが勝手に
自分の使えるポートを使って相手の80番ポートに接続します。
ブラウザが割り当てた自分のコンピュータのポートを2000番だとすると
こちらの2000番ポートとWebの駅のサーバーの80番ポートがつながり、このポートを通じて
HTTP通信が行われるわけです。
サーバーはサービスに応じたポートを開いて接続を待ち受けている状態となっています。
もちろん、HTTPサービスが立ち上がってないサーバーに接続しようとしても
ポートが開いていないので接続できるはずがありませんね。
このようにポートはどのアプリと通信するかを特定するために重要な役割があるわけです。
また、HTTPサービスを提供する(80番ポートを開いてサービスを提供する)主なサーバーソフトウェアは
有名なものはApacheやIISなどがあります。
ちなみに暗号化通信を行う場合はHTTPSとなりますが、この場合はポートは80番ではなくて443番となります。
これらもApacheやIISでも対応が可能です。
IPアドレスでコンピュータ、ポート番号でアプリケーションをそれぞれ特定し通信を行っているわけです。
また、ポート番号にもTCPとUDPがあり、TCP通信は信頼性が高く遅い(誤解を招くかな?)、
UDP通信は信頼性が低く速い、という特徴がありますが
その話はまた気が向いた時にでもw