ソケットとは何ですか?


48

誰かが私にソケットとは何かを説明できますか?SSLなどの文脈で多くの頭字語で見られます。

また、なぜソケットと呼ばれるのですか?純粋に彼らが発明した名前だったからですか?それとも彼らが思いついた最初の名前でしたか?


9
素人の言葉で:ソケットは電話です。他の電話と会話できるのは、あなたが手に持っているものです。アナロジーは少し崩れます:ほとんどの電話での会話はピアツーピアです。ソケット接続はクライアントからサーバーへの接続です。クライアント(ブラウザなどのワークステーションソフトウェアなど)は、サーバー(Webサーバー、ファイルサーバー、認証サーバーなど)に接続します。類推の別の欠陥:ソケット接続を閉じると、ソケットは破棄され、新しい接続を確立する前に新しいソケットを作成する必要があります。
G-マンは「元に戻すモニカ言う

類推するほど悪くはありません。サーバーは単なるコールセンターであり、一度に何百ものアクティブコールを持つことができます。
–MSalters

回答:


42

ソケットは、通信のための単なる論理的なエンドポイントです。それらはトランスポート層に存在します。ソケットで物事を送受信でき、ソケットをバインドしてリッスンできます。ソケットはプロトコル、マシン、およびポートに固有であり、パケットのヘッダーでそのようにアドレス指定されます。

ネットワークプログラミングプロセス間通信に関するBeejのガイドには、どちらもソケットの使用方法に関する良い情報があり、この正確な質問に答えています


64

最も簡単に言えば、ソケットはネットワーク接続を表す擬似ファイルです。ソケットが作成されると(適切なプリミティブと適切なパラメーターを使用して他のホストを識別する)、ソケットへの書き込みがネットワークパケットに変換されて送信され、ネットワークから受信したデータをソケットから読み取ることができます。

ある点では、ソケットはパイプに非常に似ています。ソケットは、それらを使用するプログラムにとってはファイルのように見えますが、ディスクへの読み取りまたは書き込みは行いません。むしろ、他のプログラムとの通信を許可します(パイプの場合はローカル、ソケットの場合はリモート)。あなたが言及したように、それらは双方向通信も提供します(適切に接続されたパイプのペアができるように)。

最後に、単一のマシン上のプログラムがTCPなどの標準ネットワークプロトコルを使用して通信することは一般的です。同じホストに戻るためだけに、ネットワークハードウェア(存在する場合)、コンピューティングチェックサムなどに移動するのは無駄です。Unixドメインソケットが入る場所です。リモートプロセスではなく同じホスト上のプロセスを接続し、ネットワークリソースをまったく使用しようとしません。このように、それらはプロセス間通信の媒体です。

Tripleeeが述べたように、BSDの歴史の中で、パイプはソケットよりも早く導入され、それらが存在するとソケットを使用して再実装されました。同じリファレンス、FreeBSDオペレーティングシステムの設計と実装は、パイプがパフォーマンス上の理由で非ソケット実装に戻されたことに言及しています。


3
パイプはソケットよりも前のものであると言うこともできますが、ソケットインターフェイスがUnixに追加されると、ローカルソケットを使用してパイプを再実装することは非常に理にかなっています。
トリプリー

@tripleee:それは素晴らしい歴史的なポイントです。参照を提供しますか?
dhag

クイックグーグルでは、FreeBSDオペレーティングシステムの設計と実装のページ40が表示されます。テキストは4.2BSDでのこの変更に言及していますが、パフォーマンス上の理由から、これはもはやそれが行われた方法ではないことも明確にしています。
トリプリー

すばらしい、これを回答に追加します。
dhag

すべての中で最高のテクノ答え
chaosguru

7

ソケットの抽象化。オペレーティングシステムが任意の数のアプリケーションによる限られたリソースの使用を仲介および整理できるように、システムリソース(この場合はネットワーク接続)を利用するためのアプリケーションのインターフェイスを提供します。

ソケットを介して送信されるデータがメールの封筒と考えることができる場合、ソケットはメールボックスになります。メールボックス(ソケット)を家(プログラム)に添付し、送信メール(データ)をそこに入れます。スケジュールされた時間に、郵便配達員(オペレーティングシステム)が来て、送信メールを受け取り、同じメールボックス内の受信メールをドロップします。送信メールは、すべての隣人のメールと一緒に、郵便配達員のトラック(ネットワーク接続)を介して受信者に送信されます。これにより、費用、時間、困難など、手紙を自分で配達する必要なく、遠くの人々と連絡を取ることができます。

なぜ彼らが「ソケット」と呼ばれるのかについては、発明者が彼らが望むものを何でも呼ぶようになるという概念は、おそらく大きな役割を果たします。しかし、それは私の意見では悪い名前ではありません:)


7

さて、それは何ですか?

ソケット、または「ソケット」にはいくつかのことがあります。

まず、思考モデルとアプリケーションプログラミングインターフェイス(API)です。つまり、厳密に指定された契約に従って、従う必要がある一連のルールと、何かを実行するプログラムを作成するために使用できる一連の関数があることを意味します。この特定の場合、何かとは別のプログラムとデータを交換することを意味します。

ソケットAPIは、一般に「通信」の詳細を広く抽象化します。誰とどのように会話するかを、1つの(ほぼ)一貫した同一のCookie-Cutterフォームでカプセル化します。
異なる「ドメイン」(「unixソケット」や「インターネットソケット」など)および異なる種類の通信(「データグラム」ソケットや「ストリーム」ソケットなど)にソケットを作成し、異なる受信者と通信できます。 、すべてがまったく同じように機能します(まあ、99%、明らかに微妙な違いがあります)。

同じコンピューターまたは別のコンピューターで別のプログラムと話すのか、それらのコンピューター間にIPv4またはIPv6ネットワークがあるのか​​、またはその他のプログラムがあるのか​​を知る必要はありません(知りたくありません!)あなたが聞いたことがないプロトコル。

socketまた、特別な種類のファイルである「ソケット」を作成するライブラリ関数(またはsyscall)の名前です(Unixのすべてはファイルです)。

それと比較して...

ソケットは、パイプおよびネームパイプと同じカテゴリに分類されます。

パイプは、同じコンピューター上のリーダーとライター(どちらもプログラム)の間の一方向通信の手段です。データのストリームをシミュレートします(TCPなど)。
つまり、パイプの観点からは、個々の「メッセージ」または「データのブロック」は存在しません。任意の量のデータを「一方の端」にコピーでき、誰かがあなたと同じバイト順で「もう一方の端」で任意の量のデータを読み取ることができます(必ずしも同じではなく、必ずしも一度でなくてもかまいません)押し込んだ。

名前付きパイプは、単純に、よく、パイプであるファイルシステム内の名前を所有しています。つまり、ファイルのように見えて動作するものであり、ディレクトリ一覧に表示され、それを開いたり、書き込みなどを行うことができます。ソケット特殊ファイル(名前付きソケット)を作成することもできます。 。

一方、ソケットは双方向(「二重」)通信の手段です。つまり、同じソケットに対して書き込みと読み取りを行うことができ、双方向通信に2つの別個のソケットは必要ありません。
また、ソケットは(パイプと同じ)ストリームとして機能したり、個別の信頼性の低いメッセージを送信したり、個別の順序付きメッセージを送信したりできます(最初の2つは任意のドメインで動作し、最後は「unixドメイン」でのみ動作します) )。まったく異なるコンピューター上の誰かにメッセージを送信(またはストリームをシミュレート)できます。ソケットは、特定の条件下で1対多の通信(マルチキャスト)を実行することもできます。

それを念頭に置いて、ソケットはパイプよりもはるかに複雑なことを行い、一般的にパイプよりもオーバーヘッドが多いことは明らかです(基本的にmemcpyはバッファとの間の単純なやり取りにすぎません!)が、ローカルソケットを作成する場合(つまり同じ上に)コンピューター)、オペレーティングシステムは通常、非常に最適化された高速パスを適用するため、実際には大きな違いはありません。

ネットワークに関して時々言及されるプロセス間通信

はい、ソケットはプロセス間通信の1つの可能な方法です(共有メモリとパイプは代替の例です)。上記で説明したように、すべて同時に「ネットワーキング」に使用されています。


1

IP上のudpまたはtcpの場合、

ソケットアドレスは、IPアドレスとポート番号の組み合わせです。

IPアドレスは、インターネット上のマシンのアドレスです unix.stackexchange.com has address 198.252.206.140

ただし、各マシンは複数のサービスを提供できる必要があるため、ほとんどのマシンはポート80でhttp(Webページ)を提供し、ポート22でsshなどを提供します。

したがって、(ソケット)のunix.stackexchange.com:80ポート80unix.stackexchange.com、このWebサイトのアクセスポイントです。

ただし、他の種類のソケットがあります。以下のコメントを参照してください。


5
tcp / ipはソケットの一種です。tcp / ipとは関係のないものもあります。
-psusi

いくつの種類のソケットがありますか?
アブドゥルアルハズレッド

1
@AbdulAlHazred、私はipネットワーキングで使用される4つの一般的なタイプを知っています、ip6で同じ、unixで2つ、IPXで2つ。私はax25、atm、またはappletalkを見ていません。Linuxでサポートされている他のプロトコルがあり、Linuxでサポートされていないプロトコルもあります。ほとんどの場合、各プロトコルにはstream(tcp)およびdatagram(udp)ソケットがあります。rawソケットも一般的であり、imcpにはソケットインターフェイスもあります。
15

ポイントは、この答えは1種類のソケットのみを対象としているという点で不完全であり、一般にソケットを常にネットワークソケット、特にIP(AF_INET)ソケットであるかのように表すという点で誤解を招きます。
トリプリー

0

ネットワーキングについて質問されたと思います。したがって、TCPサービスは通信のポイントとしてソケットを使用し、IPアドレス、プロトコル、およびポート番号で構成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.