3.4.2 アプリケーション間通信

ホスト間の通信を他のホスト間の通信と区別するには、2つのホストのIPアドレス を指定すれば区別することが出来ます。つまり、2つのIPアドレスを指定した ならば、そのホスト間通信がインターネット上で唯一である訳です。しかし、 そのホストの上では様々なアプリケーションが動いているのですから、ホストに 届いた通信内容をどのアプリケーションに届けるかという点についての一貫した 方法がないと、実際にはサービスとして成り立ちません。逆に、そうした アプリケーションの識別は、各ホスト上で独立して行えば十分です。何故ならば、 IPアドレスを指定したならば、そのホストはインターネット上では唯一の ホストであるのですから。このように、ホストはその上で動くアプリケーション に対して(正確には通信を行うアプリケーションの通信のための出入り口に対して)、 ある番号を与えます。これをポート番号と呼び、0以上の整数を用います。

このようにして、あるホストのあるアプリケーションと通信したいならば、 そのホストのIPアドレスと、そのアプリケーションのポート番号を知れば、 そのアプリケーションに対して通信パケットを送ることが出来ます。当然、 そのアプリケーションまで通信パケットが届けば、そのアプリは逆に そのパケットの情報から発信者のIPアドレスやポート番号を知ることが出来 ますから、逆の通信も可能になります。そこで問題は、相手のIPアドレスや ポート番号をどうやって知るのかということになります。IPアドレスに関して は予め調べておくしか方法はありません。一方、ポート番号についても 同じようにすることも出来ますが、通常サーバ・クライアントモデルでは、 最初のパケットは必ずクライアントからサーバへと飛ぶので、サーバの ポート番号が分かれば良い事になります。そこで、便利なように、代表的な アプリケーション毎にポート番号を決めておくことにしました。これを、 Well-Known port address と言います。Unixなどでは、こうしたポート番号と アプリケーションとの対応は /etc/services に書かれています。 下に/etc/services の一部を掲げます。

ftp-data         20/tcp    #File Transfer [Default Data]
ftp-data         20/udp    #File Transfer [Default Data]
ftp              21/tcp    #File Transfer [Control]
ftp              21/udp    #File Transfer [Control]
ssh              22/tcp    #Secure Shell Login
telnet           23/tcp
smtp             25/tcp    mail         #Simple Mail Transfer
...
http             80/tcp    www www-http         #World Wide Web HTTP

このようにして、ブラウザは、サーバのIPアドレスが分かったならば、その サーバのポート80番にアクセスをします。一方、ブラウザの使っているポート 番号はそのホストのOSから与えられる適当な番号ですが、サーバは最初の通信 パケットからブラウザのポート番号が分かるのですから、そのクライアントの IPアドレスの、そのポート番号に返信を返せば良い訳です。つまり、2つの ホストのIPアドレスと、ポート番号を指定すれば、そのアプリケーション間 通信は世界で唯一であり、完全に他のアプリケーション間通信とは区別される ものであることが保証される訳です。



Noriyo Kanayama