Diese Frage wurde von einem der Software-Ingenieure in meiner Organisation gestellt. Ich bin an der weitesten Definition interessiert.
Antworten
Zu viele Anzeigen?Ein Socket ist im Grunde ein Endpunkt für die Netzwerkkommunikation, der mindestens aus einer IP-Adresse und einem Port besteht. In Java/C# ist ein Socket eine übergeordnete Implementierung einer Seite einer bidirektionalen Verbindung.
Auch eine (nicht-normative) Definition in der Java-Tutorial .
Ich weiß, dass es viele Erklärungen gibt. Aber es gibt einen einfacheren Weg zum Verständnis mit einem praktischen Beispiel. Wir alle können uns mit dem HTTP-Port 80 verbinden, aber bedeutet das, dass sich nur ein Benutzer gleichzeitig mit diesem Port verbinden kann? Die Antwort lautet eindeutig "Nein". Mehrere Benutzer können für verschiedene Zwecke auf den HTTP-Port 80 zugreifen, aber sie erhalten trotzdem die richtige Antwort, auf die sie warten, vom Server, nicht wahr? Denken Sie mal eine Minute darüber nach, wie? Ja, Sie haben recht, es ist IP-Adresse die verschiedene Nutzer, die zu unterschiedlichen Zwecken Kontakt aufnehmen, eindeutig identifiziert. Wenn Sie die vorherigen Antworten gelesen hätten, bevor Sie hierher kamen, wüssten Sie, dass die IP-Adresse ein Teil der Informationen ist, aus denen der Socket besteht. Denken Sie darüber nach, ob es möglich ist, eine Kommunikation ohne Sockets zu führen. Die Antwort ist "Ja", aber Sie können nicht mehr als eine Anwendung auf einem Port laufen lassen, aber wir wissen, dass wir kein "Dump"-Switch sind, der nur auf Hardware läuft.
So einfach wie möglich, es gibt keine physisch Es gibt keinen Unterschied zwischen einem Socket und einem Port, so wie es z.B. zwischen PATA und SATA ist. Es sind nur Software-Bits, die eine NIC lesen und schreiben.
Ein Hafen ist im Wesentlichen ein öffentlich Socket, von denen einige gut bekannt/akzeptiert sind, das übliche Beispiel ist 80, das für HTTP bestimmt ist. Jeder, der Datenverkehr über ein bestimmtes Protokoll, in diesem Fall HTTP, austauschen möchte, wendet sich an Port 80. Natürlich ist 80 nicht physisch für HTTP (es ist physisch nichts, es ist nur eine Zahl, ein logischer Wert) und könnte auf einem bestimmten Rechner beliebig für ein anderes Protokoll verwendet werden, solange diejenigen, die versuchen, eine Verbindung herzustellen, wissen, welches Protokoll (das ziemlich privat sein kann) sie verwenden sollen.
Eine Steckdose ist im Wesentlichen ein privat Hafen, der für bestimmte Zwecke eingerichtet wurde, die den verbindenden Parteien bekannt sind, aber nicht notwendigerweise allen anderen bekannt sind. Der zugrunde liegende Transportschicht ist normalerweise TCP oder UDP, aber das muss nicht sein. Das wesentliche Merkmal ist, dass beide Seiten wissen, was vor sich geht, was auch immer das sein mag.
Der Schlüssel dazu ist, dass, wenn eine Verbindungsanforderung auf einem bestimmten Anschluss empfangen wird, der Antwort-Handshake Informationen über den Socket enthält, der für die Bedienung des jeweiligen Anforderers erstellt wurde. Die nachfolgende Kommunikation findet über diese (private) Socket-Verbindung statt, nicht über die öffentliche Port-Verbindung, auf der der Dienst weiterhin auf Verbindungsanforderungen wartet.
Ein Port ist eine Einheit, die von Netzwerkprotokollen verwendet wird, um Zugang zu angeschlossenen Hosts zu erhalten. Ports können anwendungsspezifisch sein oder sich auf ein bestimmtes Kommunikationsmedium beziehen. Verschiedene Protokolle verwenden verschiedene Ports für den Zugriff auf die Hosts, z. B. HTTP den Port 80 oder FTP den Port 23. Sie können in Ihrer Anwendung benutzerdefinierte Portnummern zuweisen, diese sollten jedoch über 1023 liegen.
Ports öffnen die Verbindung zum gewünschten Host, während Sockets einen Endpunkt in einem Inter-Netzwerk oder einer Inter-Prozess-Kommunikation darstellen. Sockets werden durch APIs (Application Programming Interface) vom System zugewiesen.
Ein feinerer Unterschied besteht darin, dass beim Neustart eines Systems die Ports erhalten bleiben, während die Sockets zerstört werden.
Ein Verbindungs-Socket (fd) wird für lokale Adresse + lokaler Port + Peer-Adresse + Peer-Port präsentiert. Prozess empfängt/sendet Daten über Socket Abstract. Ein Listening-Socket (fd) wird für die lokale Adresse + den lokalen Listening-Port bereitgestellt. Der Prozess kann eine neue Verbindung über den Socket annehmen.