Unixドメインソケットとネットワークソケットの違いは何ですか?

Unixドメインソケットとネットワークソケットの違いは何ですか?

私は正しいですか?

  • 両方のプロセスがネットワークソケットを介して通信すると、各プロセスはソケットを作成し(各ソケットはプロセスに属します)、プロセスはそれぞれのソケットを介して通信します。

  • 両方のプロセスがUnixドメインソケットを介して通信すると、1つのソケットのみが生成され(どのプロセスにも属しません)、両方のプロセスが同じソケットに接続されますか?

ベストアンサー1

ここでは2つを混同しています。

ソケットは、プログラムがファイルのようにネットワーク接続を使用できるようにプログラムに付与されるファイル記述子(ハンドル)です。ソケットAPIはプロトコルに拘束されません。ソケットはIPv4接続またはIPv6接続用に作成できますが(カーネルでサポートされている場合)、DECnet、AppleTalk、またはイーサネット読み取りなど用に作成できます。

ソケットAPIはかなり使いやすいですが、実際のネットワークプロトコルを使用して同じコンピュータ上のプロセスと通信することは非常に非効率的であるため、ある時点でソケットAPIを使用できるようにUNIXドメインソケットが作成され、非効率性はありません。 。また、UNIXドメインソケットを介してファイル記述子を他のプロセスに渡す機能など、いくつかの追加機能を追加します。

UNIXドメインソケットを使用している場合、両方のプロセスは接続の各側に1つずつソケットを保持します。初期接続設定を除いて、ソケットの使用方法はIPv4ソケットと変わりません。

ソケットAPIがないと、アドレスがないと通信するアドレスを渡さずにソケットを作成できません。これはUNIXドメインソケットの場合でも変わりません。 UNIXで、とにかくすべてがファイルなので、これらのアドレスをファイル名のように見せることにしました。これで作業が完了したので、簡単に検索できるようにこれらのアドレスをファイルシステムに配置するのが合理的です。

残念ながら、ファイルシステム内のこれらのエントリの名前は次のとおりです。返品「UNIXドメインソケット」(または少なくとも人々がそう呼び始めたものです)。彼らはそうではありません実際しかし、ソケットAPIの意味のソケットは数字だけなので、不可能です。したがって、IPv4ソケットの対応する番号は、その番号ではなく、会話中のピアのIPアドレスとポート番号です。

時々、ソケットAPIはファイルを直接処理しないので、これらのファイルシステムの表現は必ずしも必要ではないことを追加します。実際、Linuxには「匿名UNIXドメインソケット」という概念があります。つまり、ファイルシステムにリンクがないUNIXドメインソケットです。

おすすめ記事