誰かがソケットとは何かを説明してもらえますか? SSLなどの文脈で多くの頭字語で見られます。
また、なぜソケットと呼ばれるのですか?それは純粋に彼らが発明した名前だったからですか?それとも彼らが思いついた最初の名前でしたか?
コメント
- 素人'の用語では、ソケットは電話です。 'は、手に持っているもので、別の電話と会話することができます。アナロジーは少し分解されます:ほとんどの電話での会話はピアツーピアです。ソケット接続はクライアントからサーバーへの接続です。クライアント(ブラウザなどのワークステーションソフトウェアなど)は、サーバー(Webサーバー、ファイルサーバー、認証サーバーなど)に接続します。類推のもう1つの欠陥:ソケット接続を閉じると、ソケットが破壊され、新しい接続を確立する前に新しいソケットを作成する必要があります。
- It 'は類推としてはそれほど悪くありません。サーバーは単なるコールセンターであり、一度に何百ものアクティブな通話を行うことができます。
回答
ソケットは通信の単なる論理エンドポイントです。それらはトランスポート層に存在します。ソケットで物事を送受信したり、ソケットをバインドしてリッスンしたりできます。ソケットはプロトコル、マシン、およびポートに固有であり、パケットのヘッダーでそのようにアドレス指定されます。
Beejのネットワークガイドプログラミングとプロセス間通信には、ソケットの使用方法に関する優れた情報があり、この正確な質問に答えてください。
答え
簡単に言うと、ソケットは次のような疑似ファイルです。ネットワーク接続。ソケットが作成されると(適切なプリミティブと適切なパラメーターを使用して他のホストを識別する)、ソケットへの書き込みはネットワークパケットに変換されて送信され、ネットワークから受信したデータを読み取ることができます。ソケットから。
ある点では、ソケットはパイプに非常に似ています。ソケットは、それを使用するプログラムにとってはファイルのように見えますが、ディスクへの読み取りや書き込みは発生しません。むしろ、通信を可能にします。別のプログラム(パイプの場合はローカル、およびpoソケットの場合はかなりリモート)。また、おっしゃるように、双方向通信も提供します(適切に接続されたパイプのペアと同じように)。
最後に、単一のマシン上のプログラムがTCPなどの標準ネットワークプロトコルを使用して通信するのが一般的です。 ;同じホストに戻るためだけに、ネットワークハードウェア(もしあれば!)、チェックサムの計算などに行くのは無駄です。そこでは、Unixドメインソケットが入ります。これらは通常のソケットによく似ています。ただし、リモートプロセスではなく同じホスト上のプロセスを接続し、ネットワークリソースをまったく使用しないことを除きます。このように、これらはプロセス間通信の媒体です。
トリプリーが述べたように、BSDの歴史の中で、パイプはソケットよりも早く導入され、ソケットが存在するとソケットを使用して再実装されました。同じリファレンス、 FreeBSDオペレーティングシステムの設計と実装には、パイプが記載されています。その後、パフォーマンス上の理由から、ソケット以外の実装に戻されました。これは、パイプが類似性を共有しているという事実を確かに強調しています。
コメント
- 多分それも言及しますパイプはソケットよりも前のものですが、ソケットインターフェイスがUnixに追加されると、それは非常に理にかなっています。 oローカルソケットを使用してパイプを再実装します。
- @tripleee:'は素晴らしい歴史的ポイントです。参照を提供しますか?
- クイックグーグルは、 FreeBSDオペレーティングシステムの設計と実装 のページ40に表示されます。 a>;このテキストでは、4.2BSDでのこの変更について言及していますが、パフォーマンス上の理由から、これが'の方法ではなくなったことも明確にしています。
- すばらしい、I 'これを私の回答に追加します。
- すべての中で最高のテクノ回答
回答
さて、それは何ですか?
ソケット、または「ソケット」はいくつかのことがあります:
まず第一に、それは考えですモデルとアプリケーションプログラミングインターフェイス(API)。つまり、正確に指定されたコントラクトに従って、従う必要のある一連のルールと、何かを実行するプログラムを作成するために使用できる一連の関数があります。この特定のケースでは、何かは別のプログラムとのデータ交換を意味します。
ソケットAPIは、一般的な「通信」の詳細を広く抽象化します。これは、1つの(ほぼ)一貫性のある同一のクッキーカッターフォームを通じて、誰とどのように話し合うかをカプセル化します。
異なる「ドメイン」(たとえば、「unixソケット」または「インターネットソケット」)およびさまざまなタイプの通信(「データグラム」ソケットまたは「ストリーム」ソケットなど)を使用してさまざまな受信者と通信すると、すべてがまったく同じように機能します(99%、明らかに、あなたが説明しなければならないわずかな違いがあります。
同じコンピュータ上の別のプログラムと話しているのか、それとも知りたくないのかを知る必要はありません(そして知りたくありません!)。別のコンピューター上、またはそれらのコンピューター間にIPv4またはIPv6ネットワークがあるかどうか、あるいは聞いたことのない他のプロトコルがあるかどうか。
socket
は、特別な種類のファイル(すべて)である「ソケット」を作成するライブラリ関数(またはsyscall)の名前でもあります。 Unixではファイルです。
比較してどうですか…
ソケットはパイプと同じカテゴリに分類されます。名前パイプ
パイプは oの手段ですne way 同じコンピューター上のリーダーとライター(両方ともプログラム)間の通信。データのストリームをシミュレートします(TCPなど)。
つまり、パイプの観点からは、個々の「メッセージ」や「データのブロック」は存在しません。コピーできます。任意の量のデータを「一方の端」に、他の誰かが「もう一方の端」で、あなたが押し込んだのと同じバイト順序で任意の量のデータを読み取ることができます(必ずしも同じである必要はなく、必ずしも一度に読み取る必要はありません)。 。
名前付きパイプは、まあ、ファイルシステムで名前を所有するパイプです。つまり、ファイルのように見え、動作するものであり、ディレクトリリストに表示され、開いたり、書き込んだりすることができます。ソケットの特殊ファイル(名前付き)を作成することもできることに注意してください。ソケット)。
一方、ソケットは双方向( “デュプレックス」)通信。つまり、同じソケットへの書き込みと同じソケットからの読み取りが可能であり、双方向通信に2つの別個のソケットは必要ありません。
また、ソケットはストリームとして機能できます(パイプと同じ)。 )、または個別の信頼性の低いメッセージを送信するか、個別の順序付けられたメッセージを送信できます(最初の2つは任意のドメインで機能し、最後は「unixドメイン」でのみ機能します)。誰かにメッセージを送信(またはストリームをシミュレート)できます。まったく別のコンピュータ上で。ソケットは、特定の条件下で1対多の通信(マルチキャスト)の形式を実行することもできます。
それを念頭に置いて、ソケットがはるかに複雑なことを実行し、 一般的にはパイプよりもオーバーヘッドが大きくなります(基本的には、バッファとの間の単純なmemcpy
にすぎません!)が、ローカルソケットを作成する場合(つまり、同じコンピューター上で)、オペレーティングシステムは通常、高度に最適化された高速パスを適用するため、実際には大きな違いはありません。
プロセス間通信ネットワークに関して時々言及される
はい、ソケットはプロセス間通信の1つの可能な方法です(共有メモリとパイプは代替の例です)。上記で説明したように、これらはすべて同時に「ネットワーキング」に使用されています。
回答
ソケットの抽象化。これは、オペレーティングシステムが任意の数のアプリケーションによる限られたリソースの使用を仲介および整理できるように、アプリケーションがシステムリソース(この場合はネットワーク接続)を利用するためのインターフェイスを提供します。
ソケットを介して送信されるデータがメールのエンベロープと見なすことができる場合、ソケットはメールボックスになります。メールボックス(ソケット)を家(プログラム)に添付し、送信メール(データ)をそこに入れます。スケジュールされた時間に、郵便配達員(オペレーティングシステム)がやって来て、送信メールを受け取り、同じメールボックス内の受信メールをすべてドロップします。あなたの送信メールは、あなたに代わって、郵便配達員のトラック(ネットワーク接続)を介して、すべての隣人のメールとともに受信者に伝達されます。これにより、手紙を自分で配達するための費用、時間、困難などを必要とせずに、遠く離れた人々と連絡を取ることができます。
なぜ彼らが「ソケット」と呼ばれるのかについては、発明者は、おそらくそこで大きな役割を果たしていると思いますが、それは悪い名前ではありません:)
回答
udpまたはtcpover IPの場合、
ソケットアドレスは、IPアドレスとポート番号の組み合わせです。
IPアドレスは次のアドレスです。インターネット上のマシン(例: unix.stackexchange.com has address 198.252.206.140
ただし、各マシンは複数のサービスを提供できる必要があるため、ほとんどのマシンはポート80でhttp(Webページ)を提供し、ポートでsshを提供します。 22など。
unix.stackexchange.com
divのunix.stackexchange.com:80
ポート80
>(ソケット)はこのWebサイトのアクセスポイントです。
ただし、他の種類のソケットもあります。以下のコメントを参照してください。
コメント
- tcp / ipは1種類にすぎません。ソケット。 tcp / ipとは関係のないものもあります。
- ソケットの種類はいくつありますか?
- @ AbdulAlHazred、IPネットワークで使用される4つの一般的なタイプを知っています。 ip6でも同じで、unixで2つ、IPXで2つです。私はax25、atm、またはappletalkを見ていません。 Linuxでサポートされているプロトコルは他にもありますが、Linuxでサポートされていないプロトコルもあります。ほとんどの場合、各プロトコルにはstream(tcp)ソケットとdatagram(udp)ソケットがあります。 rawソケットも一般的であり、imcpにもソケットインターフェイスがある場合があります。
- 要点は、この回答は1種類のソケットしかカバーしていないという点で不完全であり、一般にソケットを表すという点で誤解を招きます。それらが常にネットワークソケット、具体的にはIP(
AF_INET
)ソケットである場合。
回答
ネットワーキングについて質問されたと思います。したがって、TCPサービスは通信のポイントとしてソケットを使用し、IPアドレス、プロトコル、およびポート番号で構成されます。