Unixドメインソケットの原理。どのように動作するのか?質問する

Unixドメインソケットの原理。どのように動作するのか?質問する

私は Unix ドメイン ソケットについて研究しています。特に、それがどのように機能するかについてです。多くのキーワードで何度も Google 検索しましたが、結果はすべて API、システム コール、使用方法、例などに関するものでした。Unix ドメイン ソケットは Pipe や FIFO と同じだと言われているので、Pipe や FIFO についても読みましたが、Unix ドメイン ソケットの概念/原理についてさらに知りたいです。どのように機能するのでしょうか? (おそらくカーネル レベルです。Wiki には次のように書かれています。「これにより、2 つのプロセスが同じソケットを開いて通信できます。ただし、通信は完全にオペレーティング システム カーネル内で行われます。」

Unix ドメインのソケット ドキュメンタリーが Pipe や FIFO よりも少ないのはなぜか、いまだに不思議です。誕生から何年も経っているからでしょうか?

誰か私に何かアイデアや読むべき本/リンクを教えてもらえませんか?

前もって感謝します!

ベストアンサー1

Unix ソケットは、他のソケット タイプと同じように使用されます。つまり、ソケット システム コールが使用されます。FIFO と Unix ソケットの違いは、FIFO はファイル システム コールを使用するのに対し、Unix ソケットはソケット コールを使用することです。

Unix ソケットはファイルとしてアドレス指定されます。アクセス制御にファイル権限を使用できます。

Unix ソケットは socket sys 呼び出しによって作成されます (FIFO は mkfifo によって作成されます)。クライアント ソケットが必要な場合は、connect を呼び出してサーバー ソケット アドレスを渡します。サーバー ソケットが必要な場合は、bind を呼び出してそのアドレスを割り当てることができます。FIFO の場合は、open 呼び出しが使用されます。IO 操作は読み取り/書き込みによって実行されます。

Unix ソケットはクライアントを区別できますが、FIFO は区別できません。ピアに関する情報は accept 呼び出しによって提供され、ピアのアドレスを返します。

Unix ソケットは双方向です。つまり、どちらの側でも読み取りと書き込みの両方の操作を実行できます。一方、FIFO は単方向です。書き込みピアと読み取りピアがあります。

Unix ソケットは、ローカルホスト IP ソケットよりもオーバーヘッドが少なく、通信が高速です。パケットは、ローカルホスト ソケットのようにネットワーク スタックを通過する必要がありません。また、ローカルにのみ存在するため、ルーティングはありません。

Unix ソケットがカーネル レベルでどのように動作するかについてさらに詳しく知りたい場合は、Linux カーネル ソースの net/unix/af_unix.c ファイルを参照してください。

おすすめ記事