ちょっと先の未来クイズ第4問

Solaris2.6を使用しています。

/etc/servicesにプロトコルとポート番号の
対応を記述しますが、あるアプリで使ってい
るポートは、このファイルに対応を記述して
ないのに、ポートが使用できてしまいます。
(inetdとかのものではありません)
そのアプリでは、1024以上のポート番号
を使用しているのですが、その辺も関係ある
のかわかりません。
なぜ記述していないものも、動けてしまうの
か教えてください。

A 回答 (1件)

> なぜ記述していないものも、動けてしまうのか教えてください。



まず、結論から言うと、ソケット通信を行う際に /etc/services にポート番号が
記述されていることは、必須ではありません。

プログラムの中に、直接ポート番号を記述することができます。

ただし、良く知られている番号以外は、ポート番号がかち合っちゃうことがある
ので、ソケット通信を行うアプリケーションが利用するポート番号を指定する
共通の仕組みとして /etc/services ファイルがあるのです。

ご存知のように、このファイルには、サービスを表す名前とポート番号が対で記述
してあります。

アプリケーションの方では、ポート番号ではなく、サービス名の方をプログラムの
中に記述をし、getservbyname() 関数などでポート番号を取得するように作ります。


このやり方でも、ポートに相当する「サービス名」をプログラム中に記述するわけ
ですから、そのサービス名が複数のアプリケーションでかち合ってしまう問題が
解消されているわけではありません。

ただの数値よりも、文字列の方が冗長度が高いので、かち合ってしまう問題が
起こり難いだろう、ということです。
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。
/etc/servicesの使われ方がよくわかりました。
とてもわかりやすかったです。
ありがとうございました。

お礼日時:2001/09/29 03:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報