web-dev-qa-db-ja.com

Unixソケットの簡単な説明

私は検索できます wikipediaのエントリ やその他の場所を既に見ましたが、プログラミングの経験はあるのですが、概念がよくわかりません。私を10歳のように扱い、ソケット通信について明確に説明してもらえますか?

21
Elzo Valugi

例を挙げましょう:あなたがあなたの住所に住んでいない友人とコミュニケーション/チャットしたいとします。そのためには、「通信チャネル」を確立する必要があります。たとえば、電話を使用してこの通信を行いたいとします。市内には電話回線のネットワークがあり、すべての家に通じています。

さて、あなたの家とあなたの友達の家に電話ソケットがあります。通信を行うには、あなたとあなたの友人は、通信の両端にあるソケットに電話を差し込んでネットワークに接続する必要があります。プログラミングのソケットは、概念的には電話ソケットと同じです。

プログラミングでは、互いに通信したい2つのプロセス(プログラムを実行)があります。そのためには、彼らは彼ら自身の間にコミュニケーションリンクを確立しなければなりません。繰り返しになりますが、利用可能なネットワークがあり、彼らはある種のソケットを使用してこのネットワークに接続する必要があるだけです。 Unixソケットは、この接続性/プラグイン性をネットワークに提供するソケットの1つです。したがって、2つのプログラムのそれぞれに、ソケットを介してネットワークに接続するためのコードが含まれています。

残りは詳細です。

15
Nazar Merza

Unixソケットは双方向ソケットです-IPベースのソケットと同じように、おそらくあなたはこれに精通しており、パイプに似ていると思います。

彼らは興味深いプロパティの小さなセットを持っています:

  • それらは「ローカルホスト」のドメインのみにあります。ローカルマシン上でのみ、ネットワーク経由でアクセスすることはできません。
  • それらは「ストリーム」モードで作成でき、パイプのようなデータをバイトのストリームとして渡すだけです。
  • 送信操作間の境界を保持する「データグラム」モードで作成できます。これにより、バイトストリームの上に独自のフレーミングプロトコルを構築しなくても、フレーミングを保持できます。
  • 彼らは、「アドレス」としてファイルシステム、またはLinuxでは「抽象的な名前空間」を使用します。
  • OSによっては、相手側になりすます、接続ソフトウェアを安全に識別する、またはソケットを介してファイルハンドルを渡すことができる場合があります。

基本的に、これらは他のソケットと同等です-それらはパイプよりも少し興味深いプロパティを持っていますが、それ以外は根本的な違いはありません。それらは通常、パイプよりも高いIPCレイテンシを持ち、多くの場合より大きなバッファを備えていますが、それを調整できる場合があり、プラットフォームによって異なります。

覚えておくべき最後の興味深い特性は、ファイルシステムを名前空間として使用することです。これは、以前の関係のないソフトウェアが通信できるという点で、匿名パイプではなく名前付きパイプのようなものです。 (抽象的な名前空間ソケットは同じですが、「ファイル」パスが存在する必要はありません。)

それより深いものはありません-彼らは典型的なパイプ、またはTCP localhostへの接続と根本的に異なるものにする超秘密の隠されたプロパティを持っていません。

21
Daniel Pittman

Linuxソケットのプログラミング、パート1:TCP/IPの使用 は、私にとって非常にうまく機能しました。まず、IPネットワークとネットワークレイヤーの概要から始め、CとPythonの両方で単純なエコーサーバーとクライアントを実装する方法を示します。

1
Oliver Weiler