ネットワークプログラミング講座

インターネットスーパーデーモン inetd
inetd(ネットワークデーモン)










inetdの役割
inetdのシステム的な構造
inetdの機能(ポート監視)
inetdの機能(入出力リダイレクト)
inetdの設定ファイル/etc/inetd.conf
/etc/inetd.conf (<flags> ・ <user>)
my_echod.plの作成
my_echod.plの起動
inetdの利点
inetdの欠点
インターネットスーパーデーモン inetd
inetdの役割

ネットワークデーモン(inetd)は、 Linux起動時に生
成され、自律的に動作するプロセスである.

inetdは、スーパーサーバ(super server)とも呼ばれ,
 ①ポートを監視して,
 ②クライアントからの接続要求があった時に、
 ③ポートに対応したサーバプログラム(これを、ア
プリケーションデーモンと呼ぶ)を自動的に起動し
て,
 ④そのポートのサーバプログラムの入出力と、ク
ライアントの入出力とを、自動的に接続する、
サーバプログラムのためのサーバプログラムである.
インターネットスーパーデーモン inetd
inetdのシステム的な構造
クライアント側のシステム
サーバ側のシステム
ポートに対応
した、サーバ
プログラム
クライアント
プログラム
scanf()
inetd
printf()
インターネットスーパーデーモン inetd
inetdの機能(ポート監視)

アプリケーションデーモンがネットワークサービスの
実行のために必要とする、bind、listen、accept など
のポート監視作業を、inetdが、共通に受け持ってく
れる。

inetdの働きにより、ポート監視の目的のために幾つ
ものアプリケーションデーモンが常に動いている必
要がなくなる。
アプリケーションデーモンは必要な時にだけ動作す
る様になる(プロセスの実稼動効率がよくなる)。

インターネットスーパーデーモン inetd
inetdの機能(入出力リダイレクト)

クライアントとアプリケーションデーモンのデータ通信
を、入出力リダイレクトにより、 inetdが、自動的に中
継する。

inetdは、クライアントからの出力を、アプリケーション
デーモンの標準入力(ie. scanf()システムコール)に、
中継(リダイレクト)する。
inetdは、アプリケーションデーモンの標準出力(ie.
printf()システムコール)を、クライアントに中継(リダイ
レクト)する。

インターネットスーパーデーモン inetd
inetd の設定ファイル/etc/inetd.conf
ftp の設定部分
# <service_name> <sock_type> <protocol> <flags>
<user> <server_path> [<server_args> …]
ftp stream tcp nowait root /usr/libexec/ftpd ftpd –l


上記の設定ではinetd が、①ポート25(これは、ftpの
Well-Known-Portで、<service_name>と一致する)を
見張っていて 、②ポート25にクライアントからの接続
要求があると、③/usr/libexec/ftpd を実行する。
接続終了後の実際の通信は /usr/libexec/ftpdが
FTP クライアントと行う(inetd経由のリダイレクト通信
を利用する)。
インターネットスーパーデーモン inetd
/etc/inetd.conf (<flags> ・ <user>)

<flags>
 /etc/inetd.conf に nowait とすると、inetd は サーバがクライ
アントの 対応をしている間に新たな接続があると、並行して
サーバを 起動する。
 もし /etc/inetd.conf に nowait ではなく wait と書くと、 一度に
ひとつのクライアントの相手しかできなくなる。
 ひとつのクライアントが接続中の間に接続してきたクライア
ントは、前のクライアントの接続が 切れるまで待たされる。

<user>
 「root」は、サーバを root 権限で実行する ことを表す。
 root 権限でむやみにサーバプロセスを動かすことは危険。
 root 権限が必要ないプログラムは、弱いユーザ権限の
nobody 権限などで動かす 。
インターネットスーパーデーモン inetd
my_echod.plの作成

プログラム(my_echod.pl)は、inetd を利用した echo サーバです。
#!/usr/bin/perl
$|=1;
# バッファリングしない
while (<STDIN>){
print "my_echod.pl: $_";
}


プログラムは、これだけです。ソケットもポートも、面倒なことは
なにも出てきません。
 inetdが、クライアントからの出力を、サーバの標準入力に、ま
た、サーバの標準出力をクライアントにリダイレクトしてくれる
 bind、listen、accept などの面倒なポート監視作業を受け持っ
てくれる
プログラムは、標準入力から読み込んで、それを標準出力に書
き出しているだけです。
インターネットスーパーデーモン inetd
my_echod.plの起動

実際に動かすには、/etc/inetd.conf で、次の設定を有効にす
る。(/path/ の部分には、 my_echod.pl の置いてあるディレクト
リをフルパス表記 )
echo stream tcp nowait root /path/my_echod.pl echod

そして、inetd の再起動を行う。
インターネットスーパーデーモン inetd
inetdの利点



サーバプログラムが簡単に書ける。
 bind・listen・accept などめんどうな接続作業は全て
inetd がやってくれる。
フィルター型のコマンドプログラムが、サーバプログラ
ムとして再利用し易い。
 inetd経由のリダイレクト通信によって、クライアント
からのデータは、サーバプログラムの標準入力に
送られる。
 また、サーバプログラムが標準出力に書き出した
データは、自動的にクライアントに送られる。
簡単なサーバ、例えばecho サーバなどは inetd の内
部に組み込まれている。
 /etc/inetd.conf に internal と書いてあるものは
inetd の内部のサーバが起動されることを表す。
インターネットスーパーデーモン inetd
inetdの欠点





inetd を使った場合はコネクションが終了すると、サー
バプロセスも終了する。
頻繁にアクセスがあるサーバの場合、inetd による
サーバの実行/終了に 時間がかかる。
この結果、サーバの反応速度が遅くなる。
sendmail・httpd などinetd を利用せずに、自前でポー
トの監視をしているサーバソフトウェアも 存在する。
sendmail や httpd は実行速度を重要視して、 素早
く反応できるようにしてある。