アプリケーションがポートにバインドされると、/ etc / servicesは積極的に使用されますか?

アプリケーションがポートにバインドされると、/ etc / servicesは積極的に使用されますか?

アプリケーションがバインドするポートを見つけるときに/etc/services競合が発生しないことを確認するために積極的に検索しますか?つまり、 にポートが登録されていれば実際に使用するかどうか/etc/servicesに関係なく予約されているのでしょうか?

ベストアンサー1

各 TCP 接続には 1 つは含まれませんが、二つポート番号:ローカルポートとリモートポート。発信接続では、ローカルポート番号は重要ではなく、ほとんどのプログラムではオペレーティングシステムにそれを選択させます。 binstaが指摘したように、オペレーティングシステムは一時ポート範囲から最初の利用可能なポートを自動的に選択します。

ただし、アプリケーション(またはアプリケーションを実行しているユーザー)は、接続するリモートポート番号を指定する必要があります。そうしないと、リモートホストから正しいサービスに接続できません。

着信接続の場合、状況はミラーリングされます。サーバーアプリケーションは通常、オペレーティングシステムに着信接続をリスンするローカルポート番号を選択させることはできません。そうしないと、クライアントは接続するポートを知ることができません。ただし、着信接続をリッスンするアプリケーションは、しばしばリモートポート番号を無視し、リモートホストにそれを決定させます。

(一部のサービスは完全動的ポート番号を使用し、多くの場合、サポート検索プロトコルを使用してサーバーがリッスンしているポートを識別します。NFSv3はrpc.statdおそらくrpc.mountd現代のLinuxユーザーにとって最も使いやすい例です。リモートホストに接続するにはまず、111のRPC portmapperポートからそのホストにアクセスし、サービスがどのポートにあるかを尋ねます。

一部のサーバーアプリケーション(主にクラシックUnixサーバーアプリケーションinetd)は、使用するローカルポートを名前で見つけることができ、通常はインポートgetportbyname()されます/etc/services

ただし、アプリケーションはこのステップをスキップし、目的のポートを数値で直接指定できます。ほとんどの最新アプリケーションはこれを行う傾向があります。番号で受信ポートを設定する必要があるすべてのサーバープログラムがこれを行います。

今日より一般的に使用されるアプリケーションは、出力のポート番号をより人間に優しい名前に置き換えることができる、またはなどのアプリケーション/etc/servicesです。ただし、名前検索のためのこのポート番号は説明にのみ依存できることに注意してください。lsofnetstattcpdump/etc/services一般的な用途:ポートの正確な説明でもそうでない場合もあります。実際の使用特定のシステムで。

/etc/servicesしたがって、「ポートが に登録されていれば予約されていますか?」という質問に対する答えは次のとおりです。いいえ、そうではありません。

一部/etc/servicesポート番号がアプリケーション設定で直接指定されている場合、またはユーザーが指定しない限り、アプリケーションはそれを使用して使用するポート番号を決定できます。

「衝突」に対する保護はオペレーティングシステムレベルで発生し、次の状況にはまったく関係ありません/etc/services。アプリケーションがbind(2)特定のポート番号を使用しようとしていることを指定するためにシステムコールを実行し、そのポートがすでに別のプログラムで使用されている場合、システムコールは失敗します。EADDRINUSEこれは、他がすでにそれを使用していることを示します。

おすすめ記事