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


回答:


191

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

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

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

編集:Nils Toedtmannのコメントによると:UNIXドメインソケットはファイルシステムのアクセス許可の対象となりますが、TCPソケットはパケットフィルターレベルでのみ制御できます。


12
たぶん、UNIXドメインソケットはファイルシステムのアクセス許可を受けますが、TCPソケットは受けないことを追加します。その結果、TCPソケットの場合よりもUNIXドメインソケットにアクセスできるユーザーを規制する方がはるかに簡単です。
ニルストートマン

@pQd、おい、Unixソケットの代わりにUnix IPCと呼べますか?
パセリエ

4
@Pacerier Unixソケットは、unix IPC(他のプロセス間で共有されるプロセス間メモリ)を実現するための1つの方法にすぎないため、unixソケットunix IPCを呼び出すのは正しくありません。
fyquah95

TCPソケットもUnixで処理されますか?TCPソケットはTCPプロトコル仕様の一部であるか、どのプロトコルでもIPソケットを使用できますか?
フェデリコ

@Federico私はあなたの質問に対処しようとする答えを投稿しました。さらに深さが必要な場合は新しい質問を投稿してください。
ピーターグリーン

28

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

netstat -a -p --unix

楽しんで!


9
UnixソケットはWindowsには存在しません。netstatただし、Windowsでは機能します。
マークトムリン

4
@ apache、Windowsで「名前付きパイプ」と呼ばれるもの。
専門家

5
Linuxにも名前付きパイプが存在します。
サヒルシン

9
@ expert、Windowsの名前付きパイプは、Unixの名前付きパイプと同じです。UnixのでIPCソケットは、Windowsには等価性がない
Pacerier

2
Windows 10はUnixソケットをサポートしています。いくつかの制限がありますが、利用可能です:blogs.msdn.microsoft.com/commandline/2017/12/19/…–
Tyson

12

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仕様にはSocketの定義が含まれていますが、その定義は「ソケット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に設定されている場合、ドメインとタイプの組み合わせのデフォルトプロトコルが使用されます。

「リッスンソケットはファイルシステム階層に存在し、それらへのアクセスはファイルシステムのアクセス許可によって制御できます。」これは、同じファイルシステムにアクセスできる2つのサーバーがソケットを介して通信できることを意味しますか?
user5359531

AIUIは残念ながらそうではありません。superuser.com/questions/352263/...
ピーター・グリーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.