ポート番号

前へ << クライアントとサーバの概念 クライアントを作るにあたっての注意点 >> 次へ

ポート番号とは?

「ポート番号」という言葉を聞いたことのない人もいるかもしれませんが、 わかってしまえば簡単です。

ネットワークプログラミングというのを 簡単に言ってしまえば、どこか別の場所で動いているプログラムと データのやりとりをすることです。

インターネットの中から一台のコンピュータを指定するには、 IPアドレスを使えばいいのですが、前項で書いたように、 ひとつのコンピュータでは複数のサーバソフトウェアを動かすことができます。 そのため、IPアドレスで1台のコンピュータを特定したとしても、 そこで動いているどのサーバプログラムとデータをやりとりしたいのかを 特定できません。

そこで出てくるのがポート番号というものです。 IPアドレスによって世界中から一台のコンピュータを特定でき、 さらにポート番号を指定することで、その中の一つのサーバプログラムを 特定できます。

サーバは特定のポートを見張っています。 リクエストが来ようと来まいと関係なくずっと見張っているのです (でないと、いざリクエストが来たときに見逃してしまいますから)。 クライアントがそのポートに接続すると、サーバ側ではリクエストが 来たことを知ることができます。 そこからデータのやりとりが始まります。

よく知られているのは HTTP の80、FTP の21、SMTP の25、POP3 の110などです。 これらは「well-known port (よく知られたポート)」と言われ、 事実上の標準となっています。 プロトコル名とポート番号の対応は、UNIX なら /etc/services に あります。Windows なら C:\windows\services です。ここに載っている プロトコルは「well-known port」と言えるでしょう。

なお、ポート番号は1から65535までの値しか指定することができません。

これは、TCP セグメント (パケットのことだと思って下さい) の中の、 ポートを表す領域が 16 bit しかないからです。 TCP/IP を利用する以上は、どうあがいてもポートは 65535 までしか使えません。

HTTP を例にあげると…

HTTP サーバ(=WWWサーバ)はポート80番を常に見張っています。

クライアント(ブラウザ)は、/etc/service のポート対応表を見て HTTP のポート番号が80であることを知り、指定されたホストの ポート 80 番に接続 (connect) します。 そしてクライアントは HTTP サーバに「このURLのデータを送ってくれ」という リクエストを送ります。HTTP サーバは指定のデータを送り返し、ブラウザはそれを 画面に表示するわけです。

注意したいのは、OS が面倒を見るのはサーバへの接続とデータのやりとり だけであることです。 OS はクライアントとサーバの間で通信されるデータの内容には干渉しません。 ですから通信内容や通信の手順については、クライアントとサーバの間で 事前に決めておかなくてはなりません。この取り決めをプロトコルと言います。 例えば HTTP サーバとデータのやりとりをする場合、HTTP プロトコルについて 知らなくてはいけません。

有名なプロトコルについては RFC で規定されています。 詳しくは RFC についての説明 を読んでください。

IANA のこと。

余談です。

ポート番号 1〜1023 の well-known port は、 IANA (Internet Assigned Numbers Authority) という機関によって一元管理されています。 また、ポート番号 1024〜49151 は、管理しているわけではありませんが、 ユーザの利便性のため、registered port として登録を受け付け、リストを公開しています。 有名なところでは、ポート 6000〜6063 は X Window System 用のポート番号として 申請されています。

well known port と registerd port 一覧

なお、このポート番号は、特に強制力があるわけではありません。 あなたのサーバでは ポート 21 を HTTP 用に、 ポート 80 を FTP 用に使っても全く構いません (ただしユーザは混乱するでしょうけど)。

前へ << クライアントとサーバの概念 クライアントを作るにあたっての注意点 >> 次へ

ご意見・ご指摘は Twitter: @68user までお願いします。