Dies war eine Frage, die von einem der Softwareentwickler in meiner Organisation aufgeworfen wurde. Ich interessiere mich für die breiteste Definition.
networking
sockets
port
Richard Dorman
quelle
quelle
Antworten:
Zusammenfassung
Ein TCP - Socket ist eine Endpunkt - Instanz durch eine IP - Adresse definiert ist, und ein Port im Zusammenhang mit entweder einem bestimmten TCP - Anschluss oder dem Hörzustand.
Ein Port ist ein Virtualisierungs - Identifikator einen Service - Endpunkt (im Unterschied zu einem Dienst definierenden Instanz Endpunkt aka Sitzungskennung).
Ein TCP-Socket ist keine Verbindung , sondern der Endpunkt einer bestimmten Verbindung.
Es können gleichzeitige Verbindungen zu einem Dienstendpunkt bestehen , da eine Verbindung sowohl von ihren lokalen als auch von ihren Remote- Endpunkten identifiziert wird , sodass der Datenverkehr an eine bestimmte Dienstinstanz weitergeleitet werden kann.
Es kann nur einen Listener-Socket für eine bestimmte Kombination aus Adresse und Port geben .
Exposition
Dies war eine interessante Frage, die mich dazu zwang, einige Dinge, die ich zu wissen glaubte, erneut zu untersuchen. Sie würden denken, ein Name wie "Socket" wäre selbsterklärend: Er wurde offensichtlich gewählt, um Bilder des Endpunkts zu erzeugen, an den Sie ein Netzwerkkabel anschließen, da es starke funktionale Parallelen gibt. Trotzdem trägt das Wort "Socket" im Netzwerk-Sprachgebrauch so viel Gepäck, dass eine sorgfältige Überprüfung erforderlich ist.
Im weitesten Sinne ist ein Port ein Ein- oder Ausstiegspunkt. Obwohl das französische Wort porte nicht in einem Netzwerkkontext verwendet wird, bedeutet es wörtlich Tür oder Gateway , was die Tatsache weiter unterstreicht, dass Häfen Transportendpunkte sind, unabhängig davon, ob Sie Daten oder große Stahlcontainer versenden.
Für die Zwecke dieser Diskussion werde ich die Betrachtung auf den Kontext von TCP-IP-Netzwerken beschränken. Das OSI-Modell ist alles sehr gut, wurde jedoch nie vollständig implementiert, geschweige denn unter verkehrsreichen Bedingungen mit hohem Stress weit verbreitet.
Die Kombination einer IP-Adresse und eines Ports wird streng als Endpunkt bezeichnet und manchmal als Socket bezeichnet. Diese Verwendung stammt aus RFC793, der ursprünglichen TCP-Spezifikation.
Eine TCP- Verbindung wird durch zwei Endpunkte ( Sockets) definiert .
Ein Endpunkt (Buchse) wird durch die Kombination aus einer Netzwerkadresse und eine definierten Port - Kennung. Beachten Sie, dass Adresse / Port einen Socket nicht vollständig identifiziert (dazu später mehr).
Der Zweck von Ports besteht darin, mehrere Endpunkte auf einer bestimmten Netzwerkadresse zu unterscheiden. Man könnte sagen, dass ein Port ein virtualisierter Endpunkt ist. Diese Virtualisierung ermöglicht mehrere gleichzeitige Verbindungen auf einer einzigen Netzwerkschnittstelle.
In den meisten von C abgeleiteten Sprachen werden TCP-Verbindungen mithilfe von Methoden für eine Instanz einer Socket-Klasse hergestellt und bearbeitet. Obwohl es üblich ist, auf einer höheren Abstraktionsebene zu arbeiten, normalerweise einer Instanz einer NetworkStream-Klasse, wird dadurch im Allgemeinen ein Verweis auf ein Socket-Objekt verfügbar gemacht. Für den Codierer scheint dieses Socket-Objekt die Verbindung darzustellen, da die Verbindung mit den Methoden des Socket-Objekts erstellt und bearbeitet wird.
Um in C # zunächst eine TCP-Verbindung (zu einem vorhandenen Listener) herzustellen, erstellen Sie einen TcpClient . Wenn Sie dem TcpClient- Konstruktor keinen Endpunkt angeben, werden Standardwerte verwendet. Auf die eine oder andere Weise wird der lokale Endpunkt definiert. Anschließend rufen Sie die Connect- Methode für die von Ihnen erstellte Instanz auf. Diese Methode erfordert einen Parameter, der den anderen Endpunkt beschreibt.
All dies ist ein bisschen verwirrend und lässt Sie glauben, dass eine Steckdose eine Verbindung ist, die Blödsinn ist. Ich arbeitete unter diesem Missverständnis, bis Richard Dorman die Frage stellte.
Nachdem ich viel gelesen und nachgedacht habe, bin ich jetzt überzeugt, dass es viel sinnvoller wäre, eine Klasse TcpConnection mit einem Konstruktor zu haben, der zwei Argumente akzeptiert , LocalEndpoint und RemoteEndpoint . Sie könnten wahrscheinlich ein einzelnes Argument RemoteEndpoint unterstützen, wenn die Standardeinstellungen für den lokalen Endpunkt akzeptabel sind. Dies ist auf Multihomed-Computern nicht eindeutig. Die Mehrdeutigkeit kann jedoch mithilfe der Routing-Tabelle behoben werden, indem die Schnittstelle mit der kürzesten Route zum Remote-Endpunkt ausgewählt wird.
Die Klarheit würde auch in anderer Hinsicht verbessert. Ein Socket wird nicht durch die Kombination von IP-Adresse und Port identifiziert:
Wie Sie sehen, ist es nicht nur möglich, sondern sehr wahrscheinlich, dass ein Netzwerkdienst über mehrere Sockets mit derselben Adresse / demselben Port verfügt, sondern nur über einen Listener-Socket für eine bestimmte Kombination aus Adresse und Port. Typische Bibliotheksimplementierungen stellen eine Socket-Klasse dar, deren Instanz zum Erstellen und Verwalten einer Verbindung verwendet wird. Dies ist äußerst bedauerlich, da es Verwirrung stiftet und zu einer weitverbreiteten Verschmelzung der beiden Konzepte geführt hat.
Hagrawal glaubt mir nicht (siehe Kommentare), also hier ein echtes Beispiel. Ich habe einen Webbrowser mit http://dilbert.com verbunden und bin dann gelaufen
netstat -an -p tcp
. Die letzten sechs Zeilen der Ausgabe enthalten zwei Beispiele dafür, dass Adresse und Port nicht ausreichen, um einen Socket eindeutig zu identifizieren. Es gibt zwei unterschiedliche Verbindungen zwischen 192.168.1.3 (meine Workstation) und 54.252.94.236:80 (dem Remote-HTTP-Server).Da ein Socket der Endpunkt einer Verbindung ist, gibt es zwei Sockets mit der Kombination aus Adresse und Port
207.38.110.62:80
und zwei weitere mit der Kombination aus Adresse und Port54.252.94.236:80
.Ich denke, Hagrawals Missverständnis ergibt sich aus meiner sehr sorgfältigen Verwendung des Wortes "identifiziert". Ich meine "vollständig, eindeutig und eindeutig identifiziert". Im obigen Beispiel gibt es zwei Endpunkte mit der Adress / Port-Kombination
54.252.94.236:80
. Wenn Sie nur Adresse und Port haben, verfügen Sie nicht über genügend Informationen, um diese Steckdosen voneinander zu unterscheiden. Es reichen nicht genügend Informationen aus, um einen Socket zu identifizieren .Nachtrag
In Abschnitt 2.7 Absatz 2 von RFC793 heißt es
Diese Definition von Socket ist aus Programmiersicht nicht hilfreich, da sie nicht mit einem Socket- Objekt identisch ist , das der Endpunkt einer bestimmten Verbindung ist. Für einen Programmierer und die meisten Zuschauer dieser Frage sind Programmierer. Dies ist ein entscheidender funktionaler Unterschied.
Verweise
TCP-IP Illustrated Volume 1 Die Protokolle , W. Richard Stevens, 1994 Addison Wesley
RFC793 , Institut für Informationswissenschaften, University of Southern California für DARPA
RFC147 , Die Definition eines Sockels, Joel M. Winett, Lincoln Laboratory
quelle
Eine Steckdose besteht aus drei Dingen:
Ein Port ist eine Zahl zwischen 1 und einschließlich 65535, die ein logisches Gate in einem Gerät kennzeichnet. Jede Verbindung zwischen einem Client und einem Server erfordert einen eindeutigen Socket.
Zum Beispiel:
quelle
Ein Socket repräsentiert eine einzelne Verbindung zwischen zwei Netzwerkanwendungen. Diese beiden Anwendungen werden nominell auf verschiedenen Computern ausgeführt, aber Sockets können auch für die Interprozesskommunikation auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets für die Kommunikation miteinander erstellen. Sockets sind bidirektional, was bedeutet, dass jede Seite der Verbindung sowohl Daten senden als auch empfangen kann. Daher kann theoretisch ein Socket auf jeder Ebene des OSI-Modells ab 2 erstellt werden. Programmierer verwenden häufig Sockets in der Netzwerkprogrammierung, wenn auch indirekt. Programmierbibliotheken wie Winsock verbergen viele der einfachen Details der Socket-Programmierung. Steckdosen sind seit den frühen 1980er Jahren weit verbreitet.
Ein Port repräsentiert einen Endpunkt oder "Kanal" für die Netzwerkkommunikation. Mithilfe von Portnummern können verschiedene Anwendungen auf demselben Computer Netzwerkressourcen nutzen, ohne sich gegenseitig zu stören. Portnummern erscheinen am häufigsten in der Netzwerkprogrammierung, insbesondere in der Socket-Programmierung. Manchmal werden Portnummern jedoch für den Gelegenheitsbenutzer sichtbar gemacht. Beispielsweise verwenden einige Websites, die eine Person im Internet besucht, eine URL wie die folgende:
http://www.mairie-metz.fr:8080/ In diesem Beispiel bezieht sich die Nummer 8080 auf die Portnummer, die vom Webbrowser verwendet wird, um eine Verbindung zum Webserver herzustellen. Normalerweise verwendet eine Website die Portnummer 80 und diese Nummer muss nicht in der URL enthalten sein (obwohl dies möglich ist).
In IP-Netzwerken können Portnummern theoretisch zwischen 0 und 65535 liegen. Die meisten gängigen Netzwerkanwendungen verwenden jedoch Portnummern am unteren Ende des Bereichs (z. B. 80 für HTTP).
Hinweis: Der Begriff Port bezieht sich auch auf verschiedene andere Aspekte der Netzwerktechnologie. Ein Port kann sich auf einen physischen Verbindungspunkt für Peripheriegeräte wie serielle, parallele und USB-Ports beziehen. Der Begriff Port bezieht sich auch auf bestimmte Ethernet-Verbindungspunkte, z. B. auf einem Hub, Switch oder Router.
Siehe http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
quelle
Mit etwas Analogie
Obwohl oben bereits viele technische Dinge für Sockets angegeben sind ... Ich möchte meine Antwort hinzufügen, nur für den Fall, dass jemand den Unterschied zwischen IP, Port und Sockets immer noch nicht spüren kann
Betrachten Sie einen Server S ,
und sagen, Person X, Y, Z benötigen einen Dienst (sagen wir Chat-Dienst) von diesem Server S.
dann
IP-Adresse sagt -> wer? ist der Chat-Server 'S', den X, Y, Z kontaktieren möchten
Okay, du hast "Wer ist der Server?"
Angenommen, der Server 'S' stellt auch anderen Personen einige andere Dienste zur Verfügung. Sagen wir, 'S' bietet Person A, B, C Speicherdienste an
dann
Port sagt ---> welche? Dienst, den Sie (X, Y, Z) benötigen, dh Chat-Dienst und nicht dieser Speicherdienst
Okay .., Sie lassen den Server wissen, dass "Chat-Service" das ist, was Sie wollen und nicht der Speicher
aber
Sie sind drei Jahre alt und der Server möchte möglicherweise alle drei unterschiedlich identifizieren
da kommt die Steckdose
Jetzt sagt Socket -> welches? besondere Verbindung
das heißt, sagen wir
Steckdose 1 für Person X.
Steckdose 2 für Person Y.
und Buchse 3 für Person Z.
Ich hoffe es hilft jemandem, der noch verwirrt war :)
quelle
Erstens denke ich, wir sollten mit einem kleinen Verständnis beginnen, was es bedeutet, ein Paket von A nach B zu bekommen.
Eine gebräuchliche Definition für ein Netzwerk ist die Verwendung des OSI-Modells, das ein Netzwerk je nach Zweck in mehrere Schichten unterteilt. Es gibt einige wichtige, die wir hier behandeln werden:
TCP enthält unter anderem das Konzept der Ports . Dies sind effektiv unterschiedliche Datenendpunkte auf derselben IP-Adresse, an die ein Internet Socket (
AF_INET
) binden kann.Zufällig auch UDP und andere Transportschichtprotokolle. Sie müssen technisch gesehen keine Ports aufweisen, aber diese Ports bieten mehreren Anwendungen in den obigen Schichten die Möglichkeit, denselben Computer zum Empfangen (und Herstellen) ausgehender Verbindungen zu verwenden.
Das bringt uns zur Anatomie einer TCP- oder UDP-Verbindung. Jedes verfügt über einen Quellport und eine Quelladresse sowie einen Zielport und eine Zieladresse. Auf diese Weise kann die Zielanwendung in einer bestimmten Sitzung sowohl von der Quelle antworten als auch empfangen.
Daher sind Ports im Wesentlichen eine spezifikationspflichtige Methode, um mehrere gleichzeitige Verbindungen zu ermöglichen, die dieselbe Adresse verwenden.
Jetzt müssen wir uns ansehen, wie Sie aus Sicht der Anwendung nach außen kommunizieren. Um dies zu tun, müssen Sie Ihr Betriebssystem freundlich fragen. Da die meisten Betriebssysteme die Vorgehensweise von Berkeley Sockets unterstützen, können wir Sockets mit Ports aus einer Anwendung wie dieser erstellen:
Großartig! Also geben
sockaddr
wir in den Strukturen unseren Port und unsere BAM an! Job erledigt! Na ja, fast, außer:ist auch möglich. Urgh, das ist ein Schraubenschlüssel in Arbeit!
Ok, eigentlich hat es nicht. Alles was wir tun müssen, ist einige geeignete Definitionen zu finden:
/var/run/database.sock
.Voila! Das räumt auf. Also in unserem Schema dann,
Ein Port ist also eine Teilmenge der Anforderungen für die Bildung eines Internet-Sockets. Leider kommt es nur so vor, dass die Bedeutung des Wortes Socket auf verschiedene Ideen angewendet wurde. Ich rate Ihnen daher von Herzen, Ihren nächsten Projekt-Socket zu nennen, um die Verwirrung zu vergrößern;)
quelle
Ein Socket = IP-Adresse + ein Port (numerische Adresse)
Zusammen identifizieren sie einen Endpunkt für eine Netzwerkverbindung auf einem Computer. (Habe ich gerade das Netzwerk 101 durchgefallen?)
quelle
Im Allgemeinen erhalten Sie viele theoretische Informationen, aber eine der einfachsten Möglichkeiten, diese beiden Konzepte zu unterscheiden, ist folgende:
Um einen Service zu erhalten, benötigen Sie eine Service-Nummer. Diese Dienstnummer wird als Port bezeichnet. So einfach ist das.
Beispielsweise wird HTTP als Dienst auf Port 80 ausgeführt.
Jetzt können viele Benutzer den Dienst anfordern, und eine Verbindung vom Client-Server wurde hergestellt. Es wird viele Verbindungen geben. Jede Verbindung repräsentiert einen Client. Um jede Verbindung aufrechtzuerhalten, erstellt der Server pro Verbindung einen Socket, um seinen Client aufrechtzuerhalten.
quelle
Es scheint viele Antworten zu geben, die den Socket mit der Verbindung zwischen 2 PCs gleichsetzen. Was ich für absolut falsch halte. Ein Socket war schon immer der Endpunkt auf einem PC, der möglicherweise verbunden ist oder nicht - sicherlich haben wir alle irgendwann Listener- oder UDP-Sockets * verwendet. Der wichtige Teil ist, dass es adressierbar und aktiv ist. Das Senden einer Nachricht an 1.1.1.1:1234 funktioniert wahrscheinlich nicht, da für diesen Endpunkt kein Socket definiert ist.
Sockets sind protokollspezifisch - daher unterscheidet sich die Implementierung der Eindeutigkeit, die sowohl von TCP / IP als auch von UDP / IP verwendet wird * ( IP- Adresse: Port), von z. B. IPX (Netzwerk, Knoten und ... ähm, Socket - aber anders Socket als unter dem allgemeinen Begriff "Socket" zu verstehen. IPX-Socket-Nummern entsprechen IP-Ports. Sie alle bieten jedoch einen eindeutigen adressierbaren Endpunkt.
Da IP zum dominierenden Protokoll geworden ist, ist ein Port (in Bezug auf das Netzwerk) entweder mit einer UDP- oder einer TCP-Portnummer synonym geworden - was ein Teil der Socket-Adresse ist.
UDP ist verbindungslos - das heißt, es wird nie eine virtuelle Verbindung zwischen den beiden Endpunkten erstellt. Wir bezeichnen UDP-Sockets jedoch weiterhin als Endpunkt. Die API-Funktionen machen deutlich, dass es sich bei beiden nur um unterschiedliche Socket-Typen handelt -
SOCK_DGRAM
UDP (nur Senden einer Nachricht) undSOCK_STREAM
TCP (Erstellen einer virtuellen Verbindung).Technisch gesehen enthält der IP-Header die IP-Adresse und das Protokoll über IP (UDP oder TCP) die Portnummer. Dies ermöglicht andere Protokolle (z. B. ICMP , die keine Portnummern haben, aber IP-Adressinformationen haben).
quelle
Kurze kurze Antwort.
Ein Port kann als interne Adresse innerhalb eines Hosts beschrieben werden, die ein Programm oder einen Prozess identifiziert.
Ein Socket kann als Programmierschnittstelle beschrieben werden, über die ein Programm mit anderen Programmen oder Prozessen, im Internet oder lokal kommunizieren kann.
quelle
Es handelt sich um Begriffe aus zwei verschiedenen Domänen: 'Port' ist ein Konzept aus dem TCP / IP-Netzwerk, 'Socket' ist eine API-Sache (Programmierung). Ein 'Socket' wird (im Code) erstellt, indem ein Port und ein Hostname oder ein Netzwerkadapter zu einer Datenstruktur kombiniert werden, mit der Sie Daten senden oder empfangen können.
quelle
Dies sind grundlegende Netzwerkkonzepte, daher werde ich sie auf einfache und dennoch umfassende Weise erläutern, um sie im Detail zu verstehen.
Ein Socket im Netzwerk ist also ein virtuelles Kommunikationsgerät, das an ein Paar (IP, Port) = (Adresse, Dienst) gebunden ist.
Hinweis:
Hoffe, es klärt Sie Zweifel
quelle
Nachdem ich die hervorragenden Antworten gelesen hatte, stellte ich fest, dass der folgende Punkt für mich, einen Neuling in der Netzwerkprogrammierung, hervorgehoben werden musste:
TCP-IP-Verbindungen sind bidirektionale Pfade, die eine Adresse: Port-Kombination mit einer anderen Adresse: Port-Kombination verbinden. Wenn Sie daher eine Verbindung von Ihrem lokalen Computer zu einem Port auf einem Remote-Server herstellen (z. B. www.google.com:80), ordnen Sie der Verbindung auch eine neue Portnummer auf Ihrem Computer zu, damit der Server senden kann Dinge zurück zu Ihnen (zB 127.0.0.1:65234). Es kann hilfreich sein, netstat zu verwenden, um die Verbindungen Ihres Computers zu überprüfen:
quelle
Eine Socket-Adresse ist eine IP-Adresse und eine Portnummer
Eine Verbindung entsteht, wenn 2 Sockets miteinander verbunden sind.
quelle
Ein Socket ist eine spezielle Art von Dateihandle, die von einem Prozess verwendet wird, um Netzwerkdienste vom Betriebssystem anzufordern. Eine Socket-Adresse ist das Tripel: {Protokoll, lokale Adresse, lokaler Prozess}, wobei der lokale Prozess durch eine Portnummer identifiziert wird.
In der TCP / IP-Suite zum Beispiel:
{tcp, 193.44.234.3, 12345}
Ein Gespräch ist die Kommunikationsverbindung zwischen zwei Prozessen und zeigt somit eine Assoziation zwischen zwei. Eine Zuordnung ist das 5-Tupel, das die beiden Prozesse, aus denen eine Verbindung besteht, vollständig spezifiziert: {Protokoll, lokale Adresse, lokaler Prozess, Fremdadresse, Fremdprozess}
In der TCP / IP-Suite zum Beispiel:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
könnte eine gültige Assoziation sein.
Eine halbe Assoziation ist entweder: {Protokoll, lokale Adresse, lokaler Prozess}
oder
{Protokoll, Fremdadresse, Fremdprozess}
die jede Hälfte einer Verbindung angeben.
Die Halbzuordnung wird auch als Socket oder Transportadresse bezeichnet. Das heißt, ein Socket ist ein Endpunkt für die Kommunikation, der in einem Netzwerk benannt und adressiert werden kann. Die Socket-Schnittstelle ist eine von mehreren Anwendungsprogrammierschnittstellen (APIs) zu den Kommunikationsprotokollen. Es wurde als generische Kommunikationsprogrammierschnittstelle entwickelt und erstmals vom 4.2BSD UNIX-System eingeführt. Obwohl es nicht standardisiert wurde, ist es de facto zu einem Industriestandard geworden.
quelle
Ein Socket ist ein Kommunikationsendpunkt. Ein Socket steht nicht in direktem Zusammenhang mit der TCP / IP-Protokollfamilie. Er kann mit jedem von Ihrem System unterstützten Protokoll verwendet werden. Die C-Socket-API erwartet, dass Sie zuerst ein leeres Socket-Objekt vom System erhalten, das Sie dann entweder an eine lokale Socket-Adresse binden können (um eingehenden Datenverkehr für verbindungslose Protokolle direkt abzurufen oder eingehende Verbindungsanforderungen für verbindungsorientierte Protokolle zu akzeptieren). oder dass Sie eine Verbindung zu einer Remote-Socket-Adresse herstellen können (für beide Arten von Protokollen). Sie können sogar beides tun, wenn Sie beide steuern möchten, die lokale Socket-Adresse, an die ein Socket gebunden ist, und die Remote-Socket-Adresse, mit der ein Socket verbunden ist. Bei verbindungslosen Protokollen ist das Anschließen eines Sockets sogar optional. Wenn Sie dies jedoch nicht tun, müssen Sie Müssen Sie auch die Zieladresse mit jedem Paket übergeben, das Sie über den Socket senden möchten, wie sonst würde der Socket wissen, wohin diese Daten gesendet werden sollen? Vorteil ist, dass Sie einen einzelnen Socket verwenden können, um Pakete an verschiedene Socket-Adressen zu senden. Wenn Sie Ihre Steckdose konfiguriert und möglicherweise sogar angeschlossen haben, betrachten Sie sie als bidirektionale Kommunikationsleitung. Sie können es verwenden, um Daten an ein Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung. Sie können es verwenden, um Daten an ein Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung. Sie können es verwenden, um Daten an ein Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung.
Ports hingegen haben nur bestimmte Protokolle des TCP / IP-Protokollstapels. TCP- und UDP-Pakete haben Ports. Ein Port ist nur eine einfache Nummer. Die Kombination aus Quellport und Zielport identifiziert einen Kommunikationskanal zwischen zwei Hosts. Beispielsweise haben Sie möglicherweise einen Server, der sowohl ein einfacher HTTP-Server als auch ein einfacher FTP-Server sein soll. Wenn jetzt ein Paket für die Adresse dieses Servers eintrifft, wie würde es wissen, ob dies ein Paket für den HTTP- oder den FTP-Server ist? Nun, es wird wissen, dass der HTTP-Server auf Port 80 und der FTP-Server auf Port 21 ausgeführt wird. Wenn das Paket also mit einem Zielport 80 ankommt, gilt dies für den HTTP-Server und nicht für den FTP-Server. Außerdem hat das Paket einen Quellport, da ein Server ohne einen solchen Quellport jeweils nur eine Verbindung zu einer IP-Adresse haben könnte. Der Quellport ermöglicht es einem Server, ansonsten identische Verbindungen zu unterscheiden: Sie haben alle denselben Zielport, z. B. Port 80, dieselbe Ziel-IP (die IP des Servers) und dieselbe Quell-IP, von der sie alle stammen der gleiche Client, aber da sie unterschiedliche Quellports haben, kann der Server sie voneinander unterscheiden. Wenn der Server Antworten zurücksendet, wird dies an den Port gesendet, von dem die Anforderung stammt. Auf diese Weise kann der Client auch verschiedene Antworten unterscheiden, die er vom selben Server empfängt.
quelle
Der Port war der einfachste Teil, er ist nur eine eindeutige Kennung für einen Socket. Ein Socket ist etwas, mit dem Prozesse Verbindungen herstellen und miteinander kommunizieren können. Der große Jeff hatte eine großartige Telefonanalogie, die nicht perfekt war, also beschloss ich, sie zu beheben:
quelle
netstat
einige Zeit ein Display an. Alle von einem Listening-Socket akzeptierten Sockets teilen sich denselben Port. Ergo ist ein Port keine eindeutige Kennung für einen Socket.Eine Anwendung besteht aus zwei Prozessen, die über das Netzwerk kommunizieren (Client-Server-Paar). Diese Prozesse senden und empfangen Nachrichten über eine als Socket bezeichnete Softwareschnittstelle in und aus dem Netzwerk . In Anbetracht der Analogie, die im Buch "Computer Networking: Top Down Approach" vorgestellt wird. Es gibt ein Haus, das mit anderen Häusern kommunizieren möchte. Hier ist Haus analog zu einem Prozess und Tür zu einer Steckdose. Beim Senden wird davon ausgegangen, dass sich auf der anderen Seite der Tür eine Infrastruktur befindet, die die Daten zum Ziel transportiert. Sobald die Nachricht auf der anderen Seite angekommen ist, gelangt sie durch die Empfängertür (Steckdose) ins Haus (Prozess). Diese Illustration aus demselben Buch kann Ihnen helfen:
Sockets sind Teil der Transportschicht, die Anwendungen logisch kommuniziert. Dies bedeutet, dass aus Sicht der Anwendung beide Hosts direkt miteinander verbunden sind, obwohl sich zwischen ihnen zahlreiche Router und / oder Switches befinden. Ein Socket ist also keine Verbindung selbst, sondern der Endpunkt der Verbindung. Transportschichtprotokolle werden nur auf Hosts und nicht auf Zwischenroutern implementiert.
HäfenBereitstellung von Mitteln zur internen Adressierung einer Maschine. Der Hauptzweck besteht darin, mehreren Prozessen das Senden und Empfangen von Daten über das Netzwerk zu ermöglichen, ohne andere Prozesse (deren Daten) zu stören. Alle Sockets sind mit einer Portnummer versehen. Wenn ein Segment bei einem Host ankommt, überprüft die Transportschicht die Zielportnummer des Segments. Anschließend wird das Segment an den entsprechenden Socket weitergeleitet. Diese Aufgabe, die Daten in einem Transportschichtsegment an den richtigen Socket zu liefern, wird als De-Multiplexing bezeichnet . Die Daten des Segments werden dann an den an den Socket angeschlossenen Prozess weitergeleitet.
quelle
Ein Socket ist eine Struktur in Ihrer Software. Es ist mehr oder weniger eine Datei; Es hat Operationen wie Lesen und Schreiben. Es ist keine physische Sache; Auf diese Weise kann Ihre Software auf physische Dinge verweisen.
Ein Port ist eine geräteähnliche Sache. Jeder Host verfügt über ein oder mehrere Netzwerke (diese sind physisch). Ein Host hat in jedem Netzwerk eine Adresse. Jede Adresse kann Tausende von Ports haben.
Möglicherweise verwendet nur ein Socket einen Port an einer Adresse. Der Socket weist den Port ungefähr so zu wie ein Gerät für Dateisystem-E / A. Sobald der Port zugewiesen ist, kann kein anderer Socket eine Verbindung zu diesem Port herstellen. Der Port wird freigegeben, wenn der Socket geschlossen wird.
Schauen Sie sich die TCP / IP-Terminologie an .
quelle
aus dem Oracle Java Tutorial :
quelle
Die Gebäudenummer der "Bank" entspricht der IP-Adresse. Eine Bank hat verschiedene Bereiche wie:
1 (Sparkontoabteilung), 2 (Privatkreditabteilung), 3 (Wohnungsbaudarlehensabteilung) und 4 (Beschwerdeabteilung) sind Häfen.
Nehmen wir nun an, Sie eröffnen ein Sparkonto, gehen zur Bank (IP-Adresse), gehen zur Abteilung "Sparkonto" (Portnummer 1) und treffen einen der Mitarbeiter der Abteilung "Sparkonto" ". Nennen wir ihn SAVINGACCOUNT_EMPLOYEE1, um ein Konto zu eröffnen.
SAVINGACCOUNT_EMPLOYEE1 ist Ihr Socket-Deskriptor, daher kann SAVINGACCOUNT_EMPLOYEE1 zu SAVINGACCOUNT_EMPLOYEEN gehören. Dies sind alles Socket-Deskriptoren.
Ebenso werden in anderen Abteilungen Angestellte beschäftigt sein, und sie sind analog zu Socket.
quelle
Ein Socket ist ein Daten-E / A-Mechanismus. Ein Port ist ein vertragliches Konzept eines Kommunikationsprotokolls . Ein Socket kann ohne Port existieren. Ein Port kann ohne einen bestimmten Socket existieren (z. B. wenn mehrere Sockets am selben Port aktiv sind, was für einige Protokolle zulässig sein kann).
Ein Port wird verwendet, um zu bestimmen, an welchen Socket der Empfänger das Paket mit vielen Protokollen weiterleiten soll. Dies ist jedoch nicht immer erforderlich, und die Auswahl des empfangenden Sockets kann auf andere Weise erfolgen. Ein Port ist vollständig ein Tool, das vom Protokollhandler verwendet wird das Netzwerk-Subsystem. Wenn ein Protokoll beispielsweise keinen Port verwendet, können Pakete an alle empfangenden Sockets oder an jeden Socket gesendet werden.
quelle
Die Frage impliziert die relative TCP / IP-Terminologie, von der ich annehme, dass sie impliziert ist. In Laienbegriffen:
Ein PORT ist wie die Telefonnummer eines bestimmten Hauses in einer bestimmten Postleitzahl. Die Postleitzahl der Stadt könnte als IP-Adresse der Stadt und aller Häuser in dieser Stadt angesehen werden.
Eine Steckdose hingegen ähnelt eher einem etablierten Telefonanruf zwischen Telefonen zweier Häuser, die miteinander sprechen. Diese Anrufe können zwischen Häusern in derselben Stadt oder zwischen zwei Häusern in verschiedenen Städten hergestellt werden. Es ist dieser vorübergehend eingerichtete Pfad zwischen den beiden Telefonen, die miteinander sprechen, der die Buchse ist.
quelle
Im weitesten Sinne ist Socket genau das, eine Steckdose, genau wie Ihre Elektro-, Kabel- oder Telefonsteckdose. Ein Punkt, an dem "erforderliche Dinge" (Leistung, Signal, Information) ausgehen und eintreten können. Es verbirgt viele detaillierte Dinge, die für die Verwendung der "erforderlichen Dinge" nicht erforderlich sind. Im Software-Sprachgebrauch bietet es eine allgemeine Möglichkeit, einen Kommunikationsmechanismus zwischen zwei Entitäten zu definieren (diese Entitäten können beliebig sein - zwei Anwendungen, zwei physisch getrennte Geräte, Benutzer- und Kernel-Speicherplatz innerhalb eines Betriebssystems usw.).
Ein Port ist ein Endpunktdiskriminator. Es unterscheidet einen Endpunkt von einem anderen. Auf Netzwerkebene wird eine Anwendung von einer anderen unterschieden, sodass der Netzwerkstapel Informationen an die entsprechende Anwendung weitergeben kann.
quelle
Auf diese Frage wurden bereits theoretische Antworten gegeben. Ich möchte dieser Frage ein praktisches Beispiel geben, das Ihr Verständnis für Socket und Port verdeutlicht.
Ich habe es hier gefunden
quelle
Socket ist eine Abstraktion, die der Kernel Benutzeranwendungen für Daten-E / A bereitstellt. Ein Socket-Typ wird durch das Protokoll, seine Behandlung, eine IPC-Kommunikation usw. definiert. Wenn also jemand einen TCP-Socket erstellt, kann er Manipulationen wie das Lesen von Daten zum Socket und das Schreiben von Daten mit einfachen Methoden und die Protokollbehandlung auf niedrigerer Ebene wie TCP-Konvertierungen und durchführen Das Weiterleiten von Paketen an Netzwerkprotokolle niedrigerer Ebene erfolgt durch die bestimmte Socket-Implementierung im Kernel. Der Vorteil ist, dass sich der Benutzer nicht um protokollspezifische Nitigritien kümmern muss und Daten wie ein normaler Puffer lesen und in den Socket schreiben sollte. Gleiches gilt für IPC. Der Benutzer liest und schreibt nur Daten in den Socket, und der Kernel verarbeitet alle Details der unteren Ebene basierend auf dem Typ des erstellten Sockets.
Port zusammen mit IP ist wie das Bereitstellen einer Adresse für den Socket, obwohl dies nicht erforderlich ist, aber bei der Netzwerkkommunikation hilfreich ist.
quelle
Ein einzelner Port kann eine oder mehrere Buchsen haben, die mit verschiedenen externen IPs verbunden sind, wie z. B. eine Mehrfachsteckdose.
quelle
Socket ist die SW-Abstraktion des Netzwerkendpunkts, die als Schnittstelle zur Anwendung verwendet wird. In Java wird C # durch ein Objekt dargestellt, in Linux Unix ist es eine Datei.
Port ist nur eine Eigenschaft eines Sockets, den Sie angegeben haben, wenn Sie eine Kommunikation herstellen möchten. Um ein Paket von einem Socket zu empfangen, müssen Sie es an einen bestimmten lokalen Port und eine Netzwerkkarte (mit lokaler IP-Adresse) oder an alle Netzwerkkarten binden (INADDR_ANY wird im Bindungsaufruf angegeben). Um ein Paket zu senden, müssen Sie den Port und die IP des Remote-Sockets angeben.
quelle
Ein Socket ist im Grunde ein Endpunkt für die Netzwerkkommunikation, der aus mindestens einer IP-Adresse und einem Port besteht. In Java / C # ist ein Socket eine übergeordnete Implementierung einer Seite einer bidirektionalen Verbindung.
Auch eine Definition in der Java-Dokumentation .
quelle
Hafen:
Ein Port kann sich auf einen physischen Verbindungspunkt für Peripheriegeräte wie serielle, parallele und USB-Ports beziehen. Der Begriff Port bezieht sich auch auf bestimmte Ethernet-Verbindungspunkte, z. B. auf einem Hub, Switch oder Router.
Steckdose:
Ein Socket repräsentiert eine einzelne Verbindung zwischen zwei Netzwerkanwendungen. Diese beiden Anwendungen werden nominell auf verschiedenen Computern ausgeführt, aber Sockets können auch für die Interprozesskommunikation auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets für die Kommunikation miteinander erstellen. Sockets sind bidirektional, was bedeutet, dass jede Seite der Verbindung sowohl Daten senden als auch empfangen kann.
quelle
Ein Port bezeichnet einen Kommunikationsendpunkt in den TCP- und UDP-Transporten für das IP-Netzwerkprotokoll. Ein Socket ist eine Software-Abstraktion für einen Kommunikationsendpunkt, der üblicherweise bei der Implementierung dieser Protokolle verwendet wird (Socket-API). Eine alternative Implementierung ist die XTI / TLI-API.
Siehe auch:
Stevens, WR 1998, UNIX-Netzwerkprogrammierung: Netzwerk-APIs: Sockets und XTI; Band 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Band 1: The Protocols, Addison-Wesley.
quelle