誰かがソケットとは何かを私に説明できますか? SSLなどの文脈では、多くの略語で見ることができます。
また、ソケットと呼ばれる理由は何ですか?純粋に彼らが名前を発明したからですか?それとも彼らが思いついた名前でしたか?
答え1
ソケットは、ネットワーク接続を表す擬似ファイルです。ソケットが作成されると(他のホストとポートを識別する)、ソケットへの書き込みは送信されたネットワークパケットに変換され、ネットワークで受信されたデータはソケットから読み取ることができます。
ソケットはパイプに似ています。どちらもそれを使用するプログラムではファイルのように見えます。どちらもプロセス間通信を容易にします。パイプはローカルプログラムと通信します。前述のように、ソケットは双方向通信も提供します(正しく接続されたパイプのペアと同様)。
最後に、単一システムのプログラムは通常、標準ネットワークプロトコル(TCPなど)を使用して通信します。ネットワークハードウェアがある場合は、チェックサムを計算するなどのタスクを実行するのは無駄です。同じホストに。 Unix ドメインソケットはこのような状況を処理します。リモートプロセスではなく、同じホスト上のプロセスを接続するためにネットワークをバイパスします。
Tripleeeが述べたように、パイプはBSDの歴史上ソケットの前に導入され、一度存在した後にソケットを使用して再実装されました。同じ参照、FreeBSDオペレーティングシステムの設計と実装、パフォーマンス上の理由から、パイプはその後非ソケット実装に戻ったと述べました。
答え2
ソケットは単に通信のための論理的な終点です。トランスポート層に存在します。ソケットでコンテンツを送受信でき、ソケットをバインドして受信できます。ソケットはプロトコル、システム、ポートによって異なり、パケットヘッダにアドレスが割り当てられます。
Beejのガイドネットワークプログラミングそしてプロセス間通信どちらもソケットの使い方に関する良い情報を持っています。この正確な質問に答えてください。
答え3
さて、これは何ですか?
ソケットまたは「ソケット」はさまざまな意味を持つことができます。
まず、精神モデルだ。API(アプリケーションプログラミングインターフェース)。これは、従うべき一連の規則と、正確に指定された契約に従って作業を実行するプログラムを作成するために使用できる一連の機能があることを意味します。この特別なケースでは何他のプログラムとデータを交換することを意味します。
ソケットAPIは、「通信」の一般的な詳細を広く抽象化します。これは、あなたが誰と会話し、どのように会話するかを(ほぼ)一貫して同じ陳腐な形式にまとめます。
さまざまな「ドメイン」(例:「Unixソケット」または「インターネットソケット」)およびさまざまな種類の通信(例:「データグラム」ソケットまたは「ストリーム」ソケット)という単語でソケットを作成し、さまざまな受信者と通信できます。が正確に動作します。同じです(まあ、99%、明らかに考慮すべきわずかな違いがあります)。
同じコンピュータまたは別のコンピュータ上の他のプログラムと通信しているかどうか、またはこれらのコンピュータ間にIPv4またはIPv6ネットワークがあるかどうかを知る必要はありません(知りたくありません!)。過去の契約について聞いたことのない他のネットワーク。
socket
また、生成されたライブラリ関数(またはシステムコール)の名前「ソケット”は特別な種類のファイルです(Unixのすべてはファイルです)。
と比べるとどうでしょう…?
ソケットはパイプとネームパイプと同じカテゴリに属します。
パイプラインは手段です一方通行同じコンピュータ上のリーダーとライター(両方のプログラム)間の通信。シミュレーション小川(TCPと同様)データ。
つまり、パイプラインの観点からは、別の「メッセージ」またはデータ「チャンク」はありません。必要な量のデータを「一端」にコピーすることができ、他の人はプッシュしたものと同じバイト順序で「もう一方の端」(必ずしも同じである必要はなく、同時にすべて必要ありません)のすべての量のデータをを読むことができます。 。
ㅏ名前付きパイプはパイプですファイルシステムに名前があります。つまり、ファイルのように見え、機能し、ディレクトリリストに表示され、ファイルを開いて書き込むことができます。ソケット特殊ファイル(ソケット名が指定されている)を生成することもできます。
一方、ソケットはスーダンです。2つの方法(「二重」)通信。これは、同じソケットで書いて読み取ることができ、双方向通信には2つの別々のソケットが必要ないことを意味します。
また、ソケットはストリーム(パイプと同じ)で動作することも、信頼できない個別のメッセージを送信することも、個別の順序付きメッセージを送信することもできます(最初の2つはすべてのドメインで動作し、最後のメッセージは「unix 「ドメイン」でのみ機能します)。 "))). まったく別のコンピュータ上の誰かにメッセージを送信したりストリームをシミュレートしたりすることができます。
これを念頭に置いて、ソケットがより複雑な作業を行うことは明らかです。一般的に言えばパイプよりもオーバーヘッドが多いが(基本的にmemcpy
バッファまでの単純な往復)、ローカルソケットを作成すると(つまり、同じシステム上)、オペレーティングシステムは通常高度に最適化された高速パスを適用するため、実際にはそうではありません。特に違いはありません。
場合によっては、ネットワーキングの観点からプロセス間通信が挙げられます。
はい、ソケットはプロセス間通信の可能な方法です(共有メモリとパイプが代替の例です)。同時に、上記のように「ネットワーク」でも使用されます。
答え4
IP経由のUDPまたはTCPの場合、
ソケットアドレスは、IPアドレスとポート番号の組み合わせです。
IPアドレスはインターネット上のマシンアドレスです。unix.stackexchange.com has address 198.252.206.140
ただし、各システムは複数のサービスを提供できる必要があるため、ほとんどのシステムはポート80でhttp(Webページ)を、ポート22でsshを提供します。
したがって、unix.stackexchange.com:80
(ソケットの)ポートはWebサイトへのアクセスポイントです。80
unix.stackexchange.com
しかし、他のタイプのソケットもあります。以下の説明を参照してください。