2014-01-09 5 views
14

です。ここで私はこれについて読むwiki linkです。私は<code>AF_INET</code>が何を意味するのかを読んでいるうちに、と呼ばれる別のファミリーがあることを知っていましたが、AF_INETとAF_UNIXとの比較の例は

私はこれが何を意味するのか理解していない:

UNIXドメインソケットは、そのアドレスの名前空間としてファイルシステムを使用しています。 ファイルシステム内のinodeとしてプロセスによって参照されます。この は、2つのプロセスが通信するために同じソケットを開くことを許可します。 しかし、通信はすべてオペレーティングシステム カーネル内で行われます。

SSH or FTPを実行したい場合は、どのファミリを使用しますかAF_INET or AF_UNIX。私は実際にここで少し混乱している。

答えて

30

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

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

なぜ、UNIXソケットを使用するのですか?上の理由とまったく同じです:ループバックによるINETソケットの軽量の代替である、同じホスト上のプロセス間の通信。

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

+0

これは愚かなことかもしれません:同じホスト上のプロセス間の通信が発生する例がありますか? – eagertoLearn

+2

プロセスでデータを交換するのは非常に一般的です。お互い、特に同じアプリの複数のインスタンス、または一緒に働く関連アプリのグループです。その交換のためのソケットを使用することは、プロセス間通信に利用可能なメカニズム。 –

+1

残念ながら、プロセス間通信を伴うアーキテクチャはしばしば簡単ではないため、単純な例はありません。唯一気になるのはChromeウェブブラウザです。各タブを別のプロセスとその他の制御/レンダリングプロセスとして実行することで、サンドボックスを管理することがわかります。それでも、プロセスが互いに通信するため、Chromeを単一のアプリケーションとして使用できます。 Linuxでは、その通信は 'UNIX'ソケットを通して行われます。 –

0

AF_UNUXソケットは優れたプロセス間通信を提供します。カーネルはプロトコルやファイルシステムのオーバヘッドなしでメッセージをルーティングします。ブロックI/Oまたはselect(..)を使用することができます。私は、選択とデータグラム(長さを得ることができます)モードでノンブロッキングが好きですが、自分で選択することができます。終了時に一時ファイルを削除してください(0バイトそれでもファイルシステムディレクトリに表示されます) jlp

関連する問題

 関連する問題