誰かが私にソケットとは何かを説明できますか?SSLなどの文脈で多くの頭字語で見られます。
また、なぜソケットと呼ばれるのですか?純粋に彼らが発明した名前だったからですか?それとも彼らが思いついた最初の名前でしたか?
誰かが私にソケットとは何かを説明できますか?SSLなどの文脈で多くの頭字語で見られます。
また、なぜソケットと呼ばれるのですか?純粋に彼らが発明した名前だったからですか?それとも彼らが思いついた最初の名前でしたか?
回答:
最も簡単に言えば、ソケットはネットワーク接続を表す擬似ファイルです。ソケットが作成されると(適切なプリミティブと適切なパラメーターを使用して他のホストを識別する)、ソケットへの書き込みがネットワークパケットに変換されて送信され、ネットワークから受信したデータをソケットから読み取ることができます。
ある点では、ソケットはパイプに非常に似ています。ソケットは、それらを使用するプログラムにとってはファイルのように見えますが、ディスクへの読み取りまたは書き込みは行いません。むしろ、他のプログラムとの通信を許可します(パイプの場合はローカル、ソケットの場合はリモート)。あなたが言及したように、それらは双方向通信も提供します(適切に接続されたパイプのペアができるように)。
最後に、単一のマシン上のプログラムがTCPなどの標準ネットワークプロトコルを使用して通信することは一般的です。同じホストに戻るためだけに、ネットワークハードウェア(存在する場合)、コンピューティングチェックサムなどに移動するのは無駄です。Unixドメインソケットが入る場所です。リモートプロセスではなく同じホスト上のプロセスを接続し、ネットワークリソースをまったく使用しようとしません。このように、それらはプロセス間通信の媒体です。
Tripleeeが述べたように、BSDの歴史の中で、パイプはソケットよりも早く導入され、それらが存在するとソケットを使用して再実装されました。同じリファレンス、FreeBSDオペレーティングシステムの設計と実装は、パイプがパフォーマンス上の理由で非ソケット実装に戻されたことに言及しています。
ソケットの抽象化。オペレーティングシステムが任意の数のアプリケーションによる限られたリソースの使用を仲介および整理できるように、システムリソース(この場合はネットワーク接続)を利用するためのアプリケーションのインターフェイスを提供します。
ソケットを介して送信されるデータがメールの封筒と考えることができる場合、ソケットはメールボックスになります。メールボックス(ソケット)を家(プログラム)に添付し、送信メール(データ)をそこに入れます。スケジュールされた時間に、郵便配達員(オペレーティングシステム)が来て、送信メールを受け取り、同じメールボックス内の受信メールをドロップします。送信メールは、すべての隣人のメールと一緒に、郵便配達員のトラック(ネットワーク接続)を介して受信者に送信されます。これにより、費用、時間、困難など、手紙を自分で配達する必要なく、遠くの人々と連絡を取ることができます。
なぜ彼らが「ソケット」と呼ばれるのかについては、発明者が彼らが望むものを何でも呼ぶようになるという概念は、おそらく大きな役割を果たします。しかし、それは私の意見では悪い名前ではありません:)
ソケット、または「ソケット」にはいくつかのことがあります。
まず、思考モデルとアプリケーションプログラミングインターフェイス(API)です。つまり、厳密に指定された契約に従って、従う必要がある一連のルールと、何かを実行するプログラムを作成するために使用できる一連の関数があることを意味します。この特定の場合、何かとは別のプログラムとデータを交換することを意味します。
ソケットAPIは、一般に「通信」の詳細を広く抽象化します。誰とどのように会話するかを、1つの(ほぼ)一貫した同一のCookie-Cutterフォームでカプセル化します。
異なる「ドメイン」(「unixソケット」や「インターネットソケット」など)および異なる種類の通信(「データグラム」ソケットや「ストリーム」ソケットなど)にソケットを作成し、異なる受信者と通信できます。 、すべてがまったく同じように機能します(まあ、99%、明らかに微妙な違いがあります)。
同じコンピューターまたは別のコンピューターで別のプログラムと話すのか、それらのコンピューター間にIPv4またはIPv6ネットワークがあるのか、またはその他のプログラムがあるのかを知る必要はありません(知りたくありません!)あなたが聞いたことがないプロトコル。
socket
また、特別な種類のファイルである「ソケット」を作成するライブラリ関数(またはsyscall)の名前です(Unixのすべてはファイルです)。
ソケットは、パイプおよびネームパイプと同じカテゴリに分類されます。
パイプは、同じコンピューター上のリーダーとライター(どちらもプログラム)の間の一方向通信の手段です。データのストリームをシミュレートします(TCPなど)。
つまり、パイプの観点からは、個々の「メッセージ」または「データのブロック」は存在しません。任意の量のデータを「一方の端」にコピーでき、誰かがあなたと同じバイト順で「もう一方の端」で任意の量のデータを読み取ることができます(必ずしも同じではなく、必ずしも一度でなくてもかまいません)押し込んだ。
名前付きパイプは、単純に、よく、パイプであるファイルシステム内の名前を所有しています。つまり、ファイルのように見えて動作するものであり、ディレクトリ一覧に表示され、それを開いたり、書き込みなどを行うことができます。ソケット特殊ファイル(名前付きソケット)を作成することもできます。 。
一方、ソケットは双方向(「二重」)通信の手段です。つまり、同じソケットに対して書き込みと読み取りを行うことができ、双方向通信に2つの別個のソケットは必要ありません。
また、ソケットは(パイプと同じ)ストリームとして機能したり、個別の信頼性の低いメッセージを送信したり、個別の順序付きメッセージを送信したりできます(最初の2つは任意のドメインで動作し、最後は「unixドメイン」でのみ動作します) )。まったく異なるコンピューター上の誰かにメッセージを送信(またはストリームをシミュレート)できます。ソケットは、特定の条件下で1対多の通信(マルチキャスト)を実行することもできます。
それを念頭に置いて、ソケットはパイプよりもはるかに複雑なことを行い、一般的にパイプよりもオーバーヘッドが多いことは明らかです(基本的にmemcpy
はバッファとの間の単純なやり取りにすぎません!)が、ローカルソケットを作成する場合(つまり同じ上に)コンピューター)、オペレーティングシステムは通常、非常に最適化された高速パスを適用するため、実際には大きな違いはありません。
ネットワークに関して時々言及されるプロセス間通信
はい、ソケットはプロセス間通信の1つの可能な方法です(共有メモリとパイプは代替の例です)。上記で説明したように、すべて同時に「ネットワーキング」に使用されています。
IP上のudpまたはtcpの場合、
ソケットアドレスは、IPアドレスとポート番号の組み合わせです。
IPアドレスは、インターネット上のマシンのアドレスです unix.stackexchange.com has address 198.252.206.140
ただし、各マシンは複数のサービスを提供できる必要があるため、ほとんどのマシンはポート80でhttp(Webページ)を提供し、ポート22でsshなどを提供します。
したがって、(ソケット)のunix.stackexchange.com:80
ポート80
はunix.stackexchange.com
、このWebサイトのアクセスポイントです。
ただし、他の種類のソケットがあります。以下のコメントを参照してください。
AF_INET
)ソケットであるかのように表すという点で誤解を招きます。