Kann mir jemand erklären, was ein Socket ist? Ich sehe es in vielen Akronymen im Zusammenhang mit SSL usw.
Warum wird es auch als Socket bezeichnet? Ist es nur, weil es der Name war, den sie erfunden haben? Oder war es der Vorname, den sie erfanden?
Kommentare
- In den Begriffen von Laien ‚ gilt: Eine Steckdose ist ein Telefon. ‚ ist das, was Sie in der Hand halten, damit Sie mit einem anderen Telefon sprechen können. Die Analogie bricht ein wenig zusammen: Die meisten Telefongespräche finden Peer-to-Peer statt. Socket-Verbindungen sind Client-zu-Server. Der Client (z. B. Workstation-Software wie Browser) 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.
- It ‚ ist nicht so schlecht für eine Analogie. Ein Server ist nur ein Callcenter und kann viele hundert aktive Anrufe gleichzeitig tätigen.
Antwort
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 zum -Netzwerk Programmierung und Interprozesskommunikation enthalten gute Informationen zur Verwendung von Sockets und sogar Beantworten Sie genau diese Frage .
Antwort
Im einfachsten Sinne ist ein Socket eine Pseudodatei, die darstellt Eine Netzwerkverbindung. 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 gelesen werden aus dem Socket.
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 eine Festplatte, sondern ermöglichen die Kommunikation mit einem anderen Programm (lokal bei Pipes und po bei Steckdosen möglicherweise entfernt). Wie Sie bereits erwähnt haben, bieten sie auch bidirektionale Kommunikation (ähnlich wie dies bei einem Paar ordnungsgemäß verbundener Pipes der Fall sein könnte).
Schließlich ist es üblich, dass Programme auf einem einzelnen Computer über Standardnetzwerkprotokolle 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. Diese ähneln normalen Sockets , außer dass sie Prozesse auf demselben Host und nicht auf Remote-Prozessen verbinden und überhaupt nicht versuchen, Netzwerkressourcen zu verwenden. Auf diese Weise sind sie ein Medium der Kommunikation zwischen Prozessen.
Wie bereits erwähnt Im Laufe der Geschichte von BSD wurden Pipes früher als Sockets eingeführt und mithilfe von Sockets neu implementiert, sobald diese vorhanden waren. Dieselbe Referenz, Design und Implementierung des FreeBSD-Betriebssystems , erwähnt diese Pipes wurden dann aus Leistungsgründen auf eine Nicht-Socket-Implementierung zurückgesetzt: Dies unterstreicht sicherlich die Tatsache, dass Pipes Ähnlichkeiten aufweisen.
Kommentare
- Erwähnen Sie dies möglicherweise auch Pipes sind älter als Sockets, aber als die Socket-Schnittstelle zu Unix hinzugefügt wurde, war dies sehr sinnvoll o Implementieren von Pipes mithilfe lokaler Sockets.
- @tripleee: Das ‚ ist ein großartiger historischer Punkt. Möchten Sie eine Referenz bereitstellen?
- Schnelles Googeln wird angezeigt Seite 40 in Entwurf und Implementierung des FreeBSD-Betriebssystems ; Der Text erwähnt diese Änderung in 4.2BSD, stellt aber auch klar, dass dies aus Leistungsgründen nicht mehr der Fall ist. ‚.
- Ausgezeichnet, I ‚ füge dies meiner Antwort hinzu.
- Die beste Techno-Antwort aller
Antwort
Nun, was ist das?
Ein Socket oder „Socket“ kann verschiedene Dinge sein:
Zunächst einmal ist es ein Gedanke Modell 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 den 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“ erstellen (z.ein „Unix-Socket“ oder ein „Internet-Socket“) und verschiedene Arten der Kommunikation (z. B. ein „Datagramm“ -Socket oder ein „Stream“ -Socket) und sprechen mit verschiedenen Empfängern, und alles funktioniert genau gleich (gut, 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 sprechen oder auf einem anderen Computer 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), mit der „der Socket “ erstellt wird, eine spezielle Art von Datei (alles) unter Unix ist eine Datei).
Wie ist der Vergleich mit …
Sockets fallen in dieselbe Kategorie wie Pipes und Name Pipes
Eine Pipe ist ein Mittel von o ne Weg Kommunikation zwischen einem Leser und einem Schreiber (beide sind Programme) auf demselben Computer. Es simuliert einen Datenstrom (genau wie z. B. TCP).
Das heißt, aus Sicht der Pipe existieren keine einzelnen „Nachrichten“ oder „Datenblöcke“. Sie können kopieren Jede Datenmenge in „ein Ende“, und jemand anderes kann jede Datenmenge (nicht unbedingt dieselbe und nicht unbedingt auf einmal) am „anderen Ende“ in derselben Bytereihenfolge lesen, in die Sie sie „hineingeschoben“ haben
Eine Named -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 Name Socket).
Ein Socket ist andererseits ein Mittel für in beide Richtungen (“ Duplex „) Kommunikation, dh Sie können auf denselben Socket schreiben und von diesem lesen, und Sie benötigen keine zwei separaten Sockets für eine bidirektionale Kommunikation.
Außerdem kann ein Socket als Stream fungieren (identisch mit einer Pipe) ), oder es kann diskrete, unzuverlässige Nachrichten senden, oder es kann diskrete, geordnete Nachrichten senden (die ersten beiden funktionieren in einer beliebigen Domäne, die letzten nur in einer „Unix-Domäne“). Es kann Nachrichten an jemanden senden (oder einen Stream simulieren) auf einem völlig anderen Computer. Ein Socket kann unter bestimmten Bedingungen sogar eine Form der Eins-zu-Viele-Kommunikation (Multicast) ausführen.
Vor diesem Hintergrund ist klar, dass Sockets etwas viel Komplizierteres tun allgemein haben mehr Overhead als Pipes (die im Grunde nicht mehr als eine einfache memcpy
zu und von einem Puffer sind!), aber wenn Sie lokale Sockets erstellen (d. h. auf demselben Computer) wendet das Betriebssystem normalerweise einen stark optimierten schnellen Pfad an, sodass es wirklich keinen großen Unterschied gibt.
Kommunikation zwischen Prozessen manchmal in Bezug auf Netzwerke erwähnt
Ja, Sockets sind eine mögliche Art der Kommunikation zwischen Prozessen (Shared Memory und Pipes sind Beispiele für Alternativen). Alle gleichzeitig werden sie wie oben erläutert für „Vernetzung“ verwendet.
Antwort
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 Post aller Nachbarn über den LKW des Postboten (Netzwerkverbindung) an den Empfänger übermittelt. Auf diese Weise können Sie mit weit entfernten Personen korrespondieren, ohne die Kosten, die Zeit, die Schwierigkeit usw. für die Zustellung des Briefes selbst zu benötigen.
Warum sie „Sockets“ genannt werden, ist die Vorstellung, dass Die Erfinder können es so nennen, wie sie wollen, wahrscheinlich spielt es dort eine große Rolle. Allerdings ist es meiner Meinung nach kein schlechter Name 🙂
Antwort
Für udp oder tcp over IP ist
eine Socket-Adresse die Kombination aus einer IP-Adresse und einer Portnummer.
Eine IP-Adresse ist die Adresse von eine Maschine im Internet zB unix.stackexchange.com has address 198.252.206.140
Jeder Computer muss jedoch mehr als einen Dienst bereitstellen können, sodass die meisten Computer http (Webseiten) an Port 80 und ssh an Port bereitstellen 22 usw.
Also unix.stackexchange.com:80
Port 80
von unix.stackexchange.com
(ein Socket) ist der Zugangspunkt dieser Website.
Es gibt jedoch auch andere Arten von Sockets, siehe Kommentare unten.
Kommentare
- TCP / IP ist nur eine Art von Steckdose. Es gibt andere, die nichts mit TCP / IP zu tun haben.
- Wie viele verschiedene Arten von Sockets gibt es?
- @AbdulAlHazred, ich kenne vier gängige Typen, die mit IP-Netzwerken verwendet werden. das gleiche mit ip6, zwei mit unix und zwei mit IPX. Ich habe mir ax25, atm oder appletalk nicht angesehen. Es gibt andere Protokolle, die unter Linux unterstützt werden, und es gibt Protokolle, die Linux nicht unterstützt. In den meisten Fällen verfügt jedes Protokoll über Stream- (TCP) und Datagramm- (UDP) Sockets. Raw-Sockets sind ebenfalls üblich, und imcp verfügt möglicherweise auch über eine Socket-Schnittstelle.
- Diese Antwort ist unvollständig, da sie nur einen Socket-Typ abdeckt und irreführend ist, da sie Sockets im Allgemeinen als darstellt Wenn es sich immer um Netzwerk-Sockets und speziell um IP-Sockets (
AF_INET
) handelt.
Antwort
Ich glaube, Sie haben nach dem Networking gefragt. Daher verwenden TCP-Dienste Sockets als Kommunikationspunkt und bestehen aus einer IP-Adresse, einem Protokoll und einer Portnummer.