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?
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?
Antworten:
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 .
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.
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 :)
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.
socket
ist auch der Name der Bibliotheksfunktion (oder von syscall), die "den Socket " erstellt, eine spezielle Art von Datei (alles in Unix ist eine Datei).
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 memcpy
Zu- 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.
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:80
Anschluss 80
von unix.stackexchange.com
(einer Buchse) ist der Zugangspunkt dieser Website.
Es gibt jedoch auch andere Arten von Steckdosen (siehe Kommentare unten).
AF_INET
) - Sockets.
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.