web-dev-qa-db-ja.com

UnixソケットとTCP / IPソケットの違いは何ですか?

136
apache

UNIXソケット は、同じマシン上で実行されているプロセス間で双方向のデータ交換を可能にするプロセス間通信メカニズムです。

IPソケット (特にTCP/IPソケット)は、ネットワーク上のプロセス間の通信を可能にするメカニズムです。場合によっては、TCP/IPソケットを使用して、(ループバックインターフェイスを使用して)同じコンピューターで実行されているプロセスと通信できます。

UNIXドメインソケットは、それらが同じシステム上で実行されていることを認識しているため、一部のチェックや操作(ルーティングなど)を回避できます。これにより、IPソケットよりも高速で軽量になります。したがって、同じホスト上のプロセスと通信することを計画している場合、これはIPソケットよりも優れたオプションです。

編集: Nils Toedtmannのコメントに従って :UNIXドメインソケットはファイルシステム権限の対象ですが、TCPソケットはパケットフィルターレベルでのみ制御されます。

218
pQd

次のコマンドを使用して、独自のマシンのローカルUNIXソケットを一覧表示できます。

netstat -a -p --unix

楽しんで!

31

UnixソケットとTCP/IPソケットの違いは何ですか?

TCP/IPソケットは、TCP/IPネットワークを介した通信に使用されます。接続されたTCPソケットは、ローカルIP、ローカルポート、リモートIP、およびリモートポートの組み合わせによって識別されます。リスニングTCPソケットは、ローカルポートおよびおそらくローカルIPです。少なくともLinuxのTCP/IPソケットでは、AIUIにより、クライアントとサーバーが同じマシン上にある場合でも、常にTCP/IPパケットが生成およびデコードされます。

一方、UNIXドメインソケット(UNIXソケットと略されることもあります)は、単一のマシン上で動作します。リスニングソケットはファイルシステム階層に存在し、それらへのアクセスはファイルシステムのパーミッションによって制御できます。

さらに、Unixソケットで接続を受け入れるプロセスは、接続するプロセスのユーザーIDを判別できます。これにより、認証手順の必要性を回避できます。データベースサーバーのパスワードを生成し、そのコピーをwebappのコードに含めるのではなく、webappを実行しているユーザーがデータベース内の対応するユーザーアカウントにアクセスできることをデータベースサーバーに通知できます。


TCPソケットもUnixで処理されますか?

もちろん

TCPソケットはTCPプロトコル仕様の一部です

インターネットプロトコルの仕様は、回線上で発生することのみに関係する傾向があります。TCP仕様にはソケットの定義が含まれていますが、その定義は「ソケットAPI」による用語の使用方法と同じではありません。

「ソケットAPI」は、BSDによって導入されたことがわかっていますが、後にその場でコピーされ、posix標準の一部として含まれています。 TCPおよびUDPソケットの基本的なものは、さまざまなプラットフォームでほとんど同じになる傾向がありますが、より高度なものやOSの他の部分と相互作用するものは、たとえば、Unixのようなシステムでは異なります。ソケットはファイルハンドルによって識別され、ファイルAPIによって読み取り/書き込みが可能ですが、これはWindowsには当てはまりません。

ソケットAPIの一部の拡張はrfcsで文書化されていますが、それらのRFCは「情報提供」のみです。

または、どのプロトコルでもIPソケットを使用できますか?

アプリケーションが「socket」関数を使用してソケットを明示的に作成する場合(ソケットはaccept関数によっても作成されます)、「domain」、「type」、および「protocol」の3つのパラメーターを渡します。それらの間で、これら3つのパラメーターを使用して、さまざまなタイプのソケットを選択できます。

  • ドメインは、使用中のプロトコル/アドレスのファミリーを選択します。 ipv4のAF_INET、ipv6のAF_INET6、UNIXファイルシステムパスのAF_Unixなど。
  • typeは通信セマンティクスを選択します。主なものはデータグラムとストリームですが、他のより特殊なタイプもあります。
  • protocolは、使用するプロトコルを選択します。0に設定されている場合、ドメインとタイプの組み合わせのデフォルトプロトコルが使用されます。
15
Peter Green