web-dev-qa-db-ja.com

UNIXドメインソケットを説明する例-AF_INETとAF_UNIX

私が何を読んでいる間AF_INETは、別の家族がUNIX domain socket。これが wiki link です。これについて読みました。

これの意味がわかりません。

Unixドメインソケットは、アドレスネームスペースとしてファイルシステムを使用します。これらは、ファイルシステムのiノードとしてプロセスによって参照されます。これにより、2つのプロセスが通信するために同じソケットを開くことができます。ただし、通信は完全にオペレーティングシステムカーネル内で行われます。

やりたいならSSH or FTP、私はどの家族を使用していますかAF_INET or AF_UNIX。私は実際には少し混乱しています。

22
eagertoLearn

リモートホストと通信する場合は、おそらくINETソケットが必要になります。

違いは、INETソケットがIPアドレス-ポートタプルにバインドされているのに対し、UNIXソケットはファイルシステム上の特別なファイルに「バインド」されていることです。一般に、同じマシンで実行されているプロセスのみが後者を介して通信できます。

では、なぜUNIXソケットを使用するのでしょうか?まさに上記の理由から:同じホスト上のプロセス間の通信であり、ループバックを介したINETソケットの軽量な代替手段です。

実際、INETソケットは完全なTCP/IPスタックの最上部にあり、トラフィックの輻輳アルゴリズム、バックオフなどを処理します。 UNIXソケットは、これらすべての問題に対処する必要はありません。すべてがマシンに対してローカルであるように設計されているため、コードがはるかに単純で、通信が高速です。確かに、負荷が高い場合にのみ違いに気付くでしょう。 Nginxなどの背後でアプリケーションサーバー(Node.js、Tornado ...)をリバースプロキシする場合.

41

AF_UNIXソケットは、優れたプロセス間通信を提供します。ソケットペアsocketpair(..) "を開き、一時ファイル名にバインドします。ペアの一方に書き込みを行うと、もう一方に到達します。カーネルは、プロトコルまたはファイルシステムのオーバーヘッドなしでメッセージをルーティングします。ブロッキングi/oまたはselect(.. 。)スレッドとプロセスをFIFOの方法で同期します。選択モードとデータグラム(長さを取得できる)モードで非ブロック化が好きですが、独自のモードを選択できます。一時ファイルを必ず削除してください終了時のファイル(ゼロバイトですが、ファイルシステムディレクトリに表示されます)

2
jlp