Was ist eine Steckdose?


48

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

Auch, warum heißt es eine Steckdose? Ist es nur so, weil sie diesen Namen erfunden haben? Oder war es der Vorname, den sie erfanden?


9
Laien sagen: Eine Steckdose ist ein Telefon. Es ist das, was Sie in der Hand halten, um ein Gespräch mit einem anderen Telefon zu führen. Die Analogie bricht ein wenig zusammen: Die meisten Telefongespräche sind Peer-to-Peer-Gespräche. Socket-Verbindungen sind Client zu Server. Der Client (z. B. Arbeitsstationssoftware wie Browser, ist jedoch nicht darauf beschränkt) stellt eine Verbindung zu einem Server her (z. B. einem Webserver, einem Dateiserver, einem Authentifizierungsserver oder einem anderen). Ein weiterer Fehler in der Analogie: Wenn Sie eine Socket-Verbindung schließen, wird der Socket zerstört, und Sie müssen einen neuen Socket erstellen, bevor Sie eine neue Verbindung herstellen können.
G-Man sagt, dass Monica am

Für eine Analogie ist das gar nicht so schlecht. Ein Server ist nur ein Callcenter und kann mehrere hundert aktive Anrufe gleichzeitig tätigen.
MSalters

Antworten:


42

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

Beejs Leitfäden zur Netzwerkprogrammierung und zur prozessübergreifenden Kommunikation enthalten gute Informationen zur Verwendung von Sockets und beantworten sogar genau diese Frage .


64

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 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 zu Lese- oder Schreibvorgängen auf einer 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 Pipes).

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

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


3
Erwähnen Sie vielleicht auch, dass Pipes älter sind als Sockets, aber als die Socket-Schnittstelle zu Unix hinzugefügt wurde, war es sehr sinnvoll, Pipes mit lokalen Sockets erneut zu implementieren.
Tripleee

@tripleee: Das ist ein großartiger historischer Punkt. Möchten Sie eine Referenz bereitstellen?
Dhag

Schnelles googeln wird auf Seite 40 unter Das Design und die Implementierung des FreeBSD-Betriebssystems beschrieben . Der Text erwähnt diese Änderung in 4.2BSD, stellt aber auch klar, dass dies aus Leistungsgründen nicht mehr der Fall ist.
Tripleee

Hervorragend, ich werde dies zu meiner Antwort hinzufügen.
Dhag

Die beste Techno-Antwort überhaupt
Chaosguru

7

Eine Steckdose eine Abstraktion. Es bietet eine Schnittstelle, über die Anwendungen eine Systemressource (in diesem Fall die Netzwerkverbindung) so nutzen können, dass das Betriebssystem die Verwendung einer begrenzten Ressource durch eine beliebige Anzahl von Anwendungen vermitteln und organisieren kann.

Wenn die über den Socket gesendeten Daten als Briefumschläge betrachtet werden könnten, wäre der Socket Ihre Mailbox. Sie hängen eine Mailbox (Socket) an Ihr Haus (Programm) und legen Ihre ausgehende Mail (Daten) hinein. Zu einem festgelegten Zeitpunkt kommt der Postbote (Betriebssystem) und holt Ihre ausgehende Mail ab und gibt alle eingehenden Mails in der gleichen Mailbox ab. Ihre ausgehende Post wird in Ihrem Namen zusammen mit der Post Ihrer Nachbarn über den Postboten-LKW (Netzwerkverbindung) an den Empfänger weitergeleitet. Dies ermöglicht es Ihnen, mit weit entfernten Personen zu korrespondieren, ohne den Aufwand, die Zeit, die Schwierigkeiten usw. zu benötigen, um den Brief selbst zuzustellen.

Was den Grund angeht, warum man sie "Steckdosen" nennt, spielt die Vorstellung, dass die Erfinder sie so nennen dürfen, wie sie wollen, wahrscheinlich eine große Rolle. Obwohl es meiner Meinung nach kein schlechter Name ist :)


7

Nun, was ist das?

Ein Socket oder "Socket" kann mehrere Dinge sein:

Erstens ist es ein Gedankenmodell und eine Anwendungsprogrammierschnittstelle (API) . Das heißt, Sie müssen eine Reihe von Regeln befolgen und eine Reihe von Funktionen verwenden, um Programme zu schreiben, die nach einem genau festgelegten Vertrag etwas tun. In diesem speziellen Fall bedeutet etwas , Daten mit einem anderen Programm auszutauschen.

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

Sie müssen nicht wissen (und Sie möchten es auch nicht 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.

socketist auch der Name der Bibliotheksfunktion (oder von syscall), die "den Socket " erstellt, eine spezielle Art von Datei (alles in Unix ist eine Datei).

Wie ist es im Vergleich zu ...

Muffen fallen in die gleiche Kategorie wie Rohre und Namensrohre

Ein Rohr ist ein Mittel , eine Möglichkeit , die Kommunikation zwischen einem Lesegerät und einem Schreiber ( die beide Programme) auf demselben Computer. Es simuliert einen Strom von Daten (wie zB 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 Person kann eine beliebige Datenmenge (nicht notwendigerweise gleich und nicht notwendigerweise auf einmal) am "anderen Ende" in derselben Bytereihenfolge wie Sie lesen schob es in.

Eine Named Pipe ist einfach eine Pipe, die einen Namen im Dateisystem besitzt . Das heißt, es sieht 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 (das wäre ein benannter Socket). .

A - Buchse, auf der anderen Seite, ist ein Mittel , Zweiweg ( „Duplex“) Kommunikation, das heißt , Sie schreiben und aus dem gleichen Sockel lesen, und Sie müssen nicht zwei getrennte Buchsen für eine Zwei-Wege - Kommunikation benötigen.
Ein Socket kann auch als Stream fungieren (identisch mit einer Pipe), oder er kann diskrete, unzuverlässige Nachrichten senden, oder er kann diskrete, geordnete Nachrichten senden (die ersten beiden funktionieren in einer Domain, die letzte nur in einer "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 von Eins-zu-Viele-Kommunikation (Multicast) ausführen.

In Anbetracht dessen ist klar, dass Sockets etwas viel Komplizierteres tun und im Allgemeinen mehr Overhead haben als Pipes (die im Grunde nichts anderes sind als ein einfaches memcpyZu- und Abspeichern!), Aber wenn Sie lokale Sockets erstellen (dh auf demselben) Computer) verwendet das Betriebssystem normalerweise einen stark optimierten schnellen Pfad, so dass es wirklich keinen großen Unterschied gibt.

Kommunikation zwischen Prozessen, 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). Gleichzeitig werden sie, wie oben erläutert, zur "Vernetzung" verwendet.


1

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 Rechners 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) auf Port 80 und ssh auf Port 22 usw. bereitstellen.

So unix.stackexchange.com:80Anschluss 80von unix.stackexchange.com(einer Buchse) ist der Zugangspunkt dieser Website.

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


5
TCP / IP ist nur eine Art von Socket. Es gibt andere, die nichts mit TCP / IP zu tun haben.
Psusi

Wie viele verschiedene Arten von Steckdosen gibt es?
Abdul Al Hazred

1
@AbdulAlHazred, ich kenne vier gebräuchliche Typen für IP-Netzwerke, die gleichen für IP6, zwei für Unix und zwei für IPX. Ich habe mir ax25, atm oder appletalk nicht angesehen. Es gibt andere Protokolle, die von Linux unterstützt werden, und es gibt Protokolle, die von Linux nicht unterstützt werden. In den meisten Fällen verfügt jedes Protokoll über Stream- (TCP) und Datagramm- (UDP) Sockets. Raw-Sockets sind ebenfalls üblich, und imcp kann auch eine Socket-Schnittstelle haben.
Hildred

Diese Antwort ist jedoch insofern unvollständig, als sie nur einen Socket-Typ abdeckt und irreführend ist, als sie Sockets im Allgemeinen so darstellt, als wären sie immer Netzwerk-Sockets, insbesondere IP ( AF_INET) - Sockets.
Tripleee

0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.