it-swarm.com.de

Was ist eine Steckdose?

Könnte mir jemand erklären, was eine Steckdose ist? Ich sehe es in vielen Akronymen im Zusammenhang mit SSL usw.

Warum heißt es auch Socket? Ist es nur, weil es der Name war, den sie erfunden haben? Oder war es der Vorname, den sie erfanden?

57
chrisjlee

Ein Socket ist nur ein logischer Endpunkt für die Kommunikation. Sie existieren auf der Transportschicht. Sie können Dinge an einem Socket senden und empfangen, Sie können einen Socket binden und abhören. Ein Socket ist spezifisch für ein Protokoll, einen Computer und einen Port und wird als solcher im Header eines Pakets adressiert.

Beejs Anleitungen zu Netzwerkprogrammierung und Kommunikation zwischen Prozessen enthalten beide gute Informationen zur Verwendung von Sockets und sogar beantworten Sie genau diese Frage .

48
Shawn J. Goff

Im einfachsten Sinne ist ein Socket eine Pseudodatei, die eine Netzwerkverbindung darstellt. Sobald ein Socket erstellt wurde (unter Verwendung der richtigen Grundelemente und der richtigen Parameter zur Identifizierung des anderen Hosts), werden Schreibvorgänge in den Socket in Netzwerkpakete umgewandelt, die gesendet werden, und vom Netzwerk empfangene Daten können vom Socket gelesen werden.

In einer Hinsicht sind Sockets Pipes sehr ähnlich: Sie sehen für die Programme, die sie verwenden, wie Dateien aus, führen jedoch nicht zum Lesen oder Schreiben auf eine Festplatte. Sie ermöglichen vielmehr die Kommunikation mit einem anderen Programm (lokal bei Pipes und möglicherweise remote bei Sockets). Sie bieten auch, wie Sie bereits erwähnt haben, bidirektionale Kommunikation (ähnlich wie ein Paar ordnungsgemäß angeschlossener Rohre).

Schließlich ist es üblich, dass Programme auf einem einzelnen Computer unter Verwendung von Standardnetzwerkprotokollen wie TCP kommunizieren. Es wäre verschwenderisch, den ganzen Weg zur Netzwerkhardware (falls vorhanden!), zur Berechnung von Prüfsummen usw. zu gehen, nur um zum selben Host zurückzukehren: Hier kommen Unix-Domain-Sockets ins Spiel Sie verbinden Prozesse auf demselben Host und nicht auf Remoteprozessen und versuchen überhaupt nicht, Netzwerkressourcen zu verwenden. Auf diese Weise sind sie ein Medium der prozessübergreifenden Kommunikation.

Wie bereits erwähnt, wurden Rohre im Laufe der Geschichte der BSD früher als Muffen eingeführt und mithilfe von Muffen neu implementiert, sobald diese vorhanden waren. Dieselbe Referenz, Das Design und die Implementierung des FreeBSD-Betriebssystems, erwähnt, dass Pipes dann aus Leistungsgründen auf eine Nicht-Socket-Implementierung zurückgesetzt wurden: Dies unterstreicht sicherlich die Tatsache, dass Pipes Ähnlichkeiten aufweisen.

74
dhag

Was ist es nun?

Ein Socket oder "Socket" kann verschiedene Dinge sein:

Zunächst ist es ein Gedankenmodell und eine Anwendungsprogrammierschnittstelle (API) . Das bedeutet, dass Sie eine Reihe von Regeln haben, die Sie befolgen müssen, und eine Reihe von Funktionen, mit denen Sie Programme schreiben können, die gemäß einem genau festgelegten Vertrag etwas tun. In diesem speziellen Fall bedeutet etwas Datenaustausch mit einem anderen Programm.

Die Sockets-API abstrahiert die Details der "Kommunikation" im Allgemeinen weitgehend. Es fasst zusammen, mit wem und wie Sie sprechen, und zwar in einer (fast) konsistenten und identischen Form des Ausstechers.
Sie können Sockets in verschiedenen "Domänen" (z. B. einem "Unix-Socket" oder einem "Internet-Socket") und für verschiedene Kommunikationsarten (z. B. einem "Datagramm" -Socket oder einem "Stream" -Socket) erstellen. und mit verschiedenen Empfängern sprechen, und alles funktioniert genau gleich (99%, es gibt offensichtlich winzige Unterschiede, die Sie berücksichtigen müssen).

Sie müssen nicht wissen (und Sie möchten nicht einmal wissen!), Ob Sie mit einem anderen Programm auf demselben Computer oder auf einem anderen Computer sprechen oder ob sich zwischen diesen Computern ein IPv4- oder IPv6-Netzwerk befindet oder ein anderes Protokoll, von dem Sie noch nie gehört haben.

socket ist auch der Name der Bibliotheksfunktion (oder des Systemaufrufs), die "den Socket" erstellt, eine spezielle Art von Datei (alles) unter Unix ist eine Datei).

Wie ist es im Vergleich zu ...

muffen fallen in dieselbe Kategorie wie Rohre und Namensrohre

Eine Pipe ist ein Mittel zur Einwegkommunikation zwischen einem Leser und einem Schreiber (beide sind Programme) auf demselben Computer. Es simuliert einen Stream von Daten (genau wie z. B. TCP).
Das heißt, aus Sicht der Pipe existieren keine einzelnen "Nachrichten" oder "Datenblöcke". Sie können eine beliebige Datenmenge in "ein Ende" kopieren, und eine andere Datenmenge kann eine beliebige Datenmenge (nicht unbedingt gleich und nicht unbedingt auf einmal) am "anderen Ende" in derselben Bytereihenfolge wie Sie lesen schob es hinein.

Eine benannt Pipe ist einfach eine Pipe die einen Namen im Dateisystem besitzt. Das heißt, es sieht genauso aus und verhält sich wie eine Datei. Es wird in der Verzeichnisliste angezeigt und Sie können es öffnen, darauf schreiben usw. usw. Beachten Sie, dass Sie auch spezielle Socket-Dateien erstellen können (dies wäre ein benannter Socket). .

Ein Socket hingegen ist ein Mittel zur bidirektionalen ("Duplex") Kommunikation, dh Sie können darauf schreiben und daraus lesen Socket, und Sie benötigen keine zwei separaten Sockets für eine bidirektionale Kommunikation.
Ein Socket kann auch als Stream fungieren (identisch mit einer Pipe) oder diskrete, unzuverlässige Nachrichten oder diskrete, geordnete Nachrichten senden (die ersten beiden funktionieren in einer beliebigen Domäne, die letzte nur auf "Unix Domain"). Es kann Nachrichten an jemanden auf einem ganz anderen Computer senden (oder einen Stream simulieren). Ein Socket kann unter bestimmten Bedingungen sogar eine Form der Eins-zu-Viele-Kommunikation (Multicast) ausführen.

In diesem Sinne ist es klar, dass Sockets etwas viel komplizierteres tun und im Allgemeinen mehr Overhead haben als Pipes (die im Grunde nicht mehr als ein einfaches memcpy von und nach a sind Puffer!), aber wenn Sie lokale Sockets erstellen (dh auf demselben Computer), wendet das Betriebssystem normalerweise einen stark optimierten schnellen Pfad an, sodass es wirklich keinen großen Unterschied gibt.

prozessübergreifende Kommunikation, die manchmal in Bezug auf Netzwerke erwähnt wird

Ja, Sockets sind eine Möglichkeit für die Kommunikation zwischen Prozessen (Shared Memory und Pipes sind Beispiele für Alternativen). Alle gleichzeitig werden sie, wie oben erläutert, für die "Vernetzung" verwendet.

8
Damon

Ein Socket eine Abstraktion. Es bietet eine Schnittstelle für Anwendungen zur Verwendung einer Systemressource (in diesem Fall der Netzwerkverbindung) auf eine Weise, die es dem Betriebssystem ermöglicht, die Verwendung einer begrenzten Ressource durch eine beliebige Anzahl von Anwendungen zu vermitteln und zu organisieren.

Wenn die Daten, die über den Socket gesendet werden, als Briefumschläge betrachtet werden könnten, wäre der Socket Ihr Postfach. Sie schließen eine Mailbox (Socket) an Ihr Haus (Programm) an und legen Ihre ausgehenden Mail (Daten) darin ab. Zu einem festgelegten Zeitpunkt kommt der Postbote (Betriebssystem) und holt Ihre ausgehenden E-Mails ab und gibt alle eingehenden E-Mails in derselben Mailbox ab. Ihre ausgehende Post wird in Ihrem Namen zusammen mit der gesamten Post Ihres Nachbarn über den Postboten (Netzwerkverbindung) an den Empfänger übermittelt. Auf diese Weise können Sie mit weit entfernten Personen korrespondieren, ohne die Kosten, die Zeit, die Schwierigkeiten usw. für die Zustellung des Briefes selbst zu benötigen.

Was den Grund betrifft, warum sie so gut als "Steckdosen" bezeichnet werden, spielt die Vorstellung, dass die Erfinder sie so nennen können, wie sie wollen, dort wahrscheinlich eine große Rolle. Allerdings ist es meiner Meinung nach kein schlechter Name :)

7
Andrew Lambert

Für udp oder tcp over IP,

Eine Socket-Adresse ist die Kombination aus einer IP-Adresse und einer Portnummer.

Eine IP-Adresse ist die Adresse eines Computers im Internet, z. unix.stackexchange.com has address 198.252.206.140

Jeder Computer muss jedoch in der Lage sein, mehr als einen Dienst bereitzustellen, sodass die meisten Computer http (Webseiten) an Port 80 und ssh an Port 22 usw. bereitstellen.

Damit unix.stackexchange.com:80 Hafen 80 von unix.stackexchange.com (ein Socket) ist der Zugangspunkt dieser Website.

Es gibt jedoch auch andere Arten von Steckdosen, siehe Kommentare unten.

2
ctrl-alt-delor

Ich glaube, Sie haben nach dem Networking gefragt. Also TCP-Dienste verwenden Sockets als Kommunikationspunkt und bestehen aus einer IP-Adresse, einem Protokoll und einer Portnummer.

0
Dragos Alexe