ネットワークにつながれたコンピュータでは複数の通信プロセスが動く | ネットワークのサーバでは、通常、複数のプロセスが動いていて、 それぞれが異なる仕事を行っています。あるプロセスはメールに関する処理、 別のプロセスはファイル転送の処理、また別のものはWWWの処理をしているかも しれません。このようにたくさんの処理を行っているコンピュータでは、 それぞれのプロセスは他のプロセスと、干渉し合うことなく、 それも同時に行うことができればとても便利です。 | |
内線番号のようなもの | たとえば、ある建物に入っている組織で複数の人が外部の人と同時に 別の人と通信するためには、複数の電話口があれば便利なのと同じです。 そのような場合、1つの会社内で複数の内線電話をおいて、 別々に使えるようにすると便利です。 TCP/IPにおけるポートもこの内線電話に似ています。 一台のコンピュータの中でネットワークの処理に携わるそれぞれのプロセスが、 それぞれ専用の通信口を持っているのです。この通信口がポートと呼ばれる ものなのです。これを内線電話にたとえると、IPアドレスは代表番号、 ポート番号は内線番号に対応します。 つまりIPアドレスはコンピュータを指定するのに用いますが、 ポート番号はコンピュータ内の通信口を指定します。 このポートは独立して通信でき、 同一のポートを複数のプロセスで利用することはできません。 | |
ポートは番号で識別 |
それぞれのポートは番号で識別され、他のプロセスで使っている
WWWでは80番ポート,ftpは21番ポート、telnetは23番ポートなどのように、
メジャーなアプリケーションについては標準のポート番号が決められています。
これを確認するには、unixマシンでは/etc/servicesを見てください。
そのファイルは次のような形になっています。
このファイルではメールを送る際に使われる smtpのポートは25番で、 メールを受け取る時に使われるポート pop3のポートは110番ポートで あることが記述されています。 | |
ポート番号はTCPヘッダに納められている | 送信者となるアプリケーションはIPアドレス(IPヘッダに含まれる)と ポート番号(TCPヘッダに含まれる)を指定して、 「このマシンのこのポートにこの情報を度どけてくれ」と送信すると、 相手方のTCPの処理をつかさどるモジュールが、該当するポートの データを待っているプロセスにその情報を渡します。 こうして目的のプロセスに情報を届けることができるのです。 |
ネットワークのサーバはいつクライアントから接続要求があっても 応答できるようにしますが、そのために各ポートごとに、 そのポートに情報が届くのを待つプロセスを動かしておくのでは、 無駄が多すぎます。ほとんどアクセスがないポートが多い上、 アクセスされる頻度の高いポートでも、実際に利用されている 時間は短いものもあります。この間、 プロセス空間を維持し続けるのはコストが高くつきます。 | ||
inetdは複数のポートの接続要求を監視する | これを解決するには、ポートに接続要求があった時点で、 サーバプロセスを起動する方法があります。一つのプロセスで 複数のポートを監視し、接続要求があった時点で、必要な プロセスを起動して、それと接続するのです。この仕事を 行うプログラムがinetdです。 | |
設定ファイル/etc/inetd.conf |
unixマシンが近くにあるなら、そのマシンの/etc/inetd.confを
見てください。それには次のような内容が含まれているでしょう。
この2行目は telnetのポート(/etc/servicesに記述されているポート番号: 通常は80番)に接続要求があったら/usr/libexec/telnetdを起動して、それに 接続することを意味しています。 |
常時ポートへの接続を 待っているプロセス | すべてのポートを inetd が管理しているわけではありません。 利用頻度の高いポートで、inetdを使うとプロセスの起動と終了 のために、かえってコストが高くなるかもしれません。 このような場合はポートへの接続を待つプロセスがバックグラウンドで 実行されます。このようなプロセスはデーモンと呼ばれます | |
デーモンプロセス |
ではどのようなデーモンが動いているか確認する方法を示します。
これには ps コマンドを用います。以下にその実行例を示します。
ここで ps auxw というコマンドを実行していますが、これは BSD 系のUNIX の形式です。 System V系の UNIXであれば、ps -eal などと実行してみてください。 (オプションについてはmanを見てください。) ここでは結果を編集して、デーモンであるプロセスだけにしています。 実際には、デーモンでない他のプロセスも表示されます。どのプロセスが デーモンであるかはpsコマンドではわかりませんが、デーモン プロセスの多くはその名前の最後にdの文字が含まれています。 |
「TCP/IP とインターネットの仕組み」へ戻る