Was ist der Unterschied zwischen einem Port und einem Socket?

928

Dies war eine Frage, die von einem der Softwareentwickler in meiner Organisation aufgeworfen wurde. Ich interessiere mich für die breiteste Definition.

Richard Dorman
quelle
19
Nur um es noch einmal zu wiederholen: Sockets sind nicht auf Netzwerk-E / A beschränkt. Sie sind in allen möglichen Situationen für das Streaming von Daten zwischen verschiedenen Anwendungen verfügbar.
Oli

Antworten:

977

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.

Es ist das Socket-Paar (das 4-Tupel, bestehend aus der Client-IP-Adresse, der Client-Portnummer, der Server-IP-Adresse und der Server-Portnummer), das die beiden Endpunkte angibt, die jede TCP-Verbindung in einem Internet eindeutig identifizieren. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)

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:

[...] TCP demultiplext eingehende Segmente unter Verwendung aller vier Werte, die die lokalen und fremden Adressen umfassen: Ziel-IP-Adresse, Ziel-Port-Nummer, Quell-IP-Adresse und Quell-Port-Nummer. TCP kann nicht anhand des Zielports feststellen, welcher Prozess ein eingehendes Segment erhält. Außerdem ist der einzige der [verschiedenen] Endpunkte an [einer bestimmten Portnummer], der eingehende Verbindungsanforderungen empfängt, der im Empfangsstatus. (S. 255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)

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).

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Da ein Socket der Endpunkt einer Verbindung ist, gibt es zwei Sockets mit der Kombination aus Adresse und Port 207.38.110.62:80und zwei weitere mit der Kombination aus Adresse und Port 54.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

Eine Verbindung wird durch das Sockelpaar an den Enden vollständig spezifiziert. Ein lokaler Socket kann an vielen Verbindungen zu verschiedenen fremden Sockets teilnehmen.

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

  1. TCP-IP Illustrated Volume 1 Die Protokolle , W. Richard Stevens, 1994 Addison Wesley

  2. RFC793 , Institut für Informationswissenschaften, University of Southern California für DARPA

  3. RFC147 , Die Definition eines Sockels, Joel M. Winett, Lincoln Laboratory

Peter Wone
quelle
6
Vielleicht würde eine reale Analogie zu den Schlüsselwörtern Socket und Port denjenigen helfen, die die Frage positiv bewertet haben. Immer noch eine gute Erklärung!
Rohitverma
5
@rationalcoder - Lesen Sie die gesamte Antwort. Es gibt einen Unterschied zwischen der Definition durch etwas und der Identifizierung durch etwas. Beispielsweise werden Instanzen einer Klasse von der Klasse definiert. Sie werden teilweise, aber nicht vollständig dadurch identifiziert.
Peter Wone
6
Ich habe nicht abgestimmt, weil ich mit dieser Aussage nicht einverstanden bin - " Ein Socket wird nicht durch die Kombination von IP-Adresse und Port identifiziert: " .. Lesen Sie TCP RFC - tools.ietf.org/html/rfc793 .. Es ist sehr klar, dass Socket ist eine Kombination aus IP und Port. Wenn Sie IP und Port kennen, haben Sie einen Socket oder Endpunkt identifiziert. Wenn Sie ein Socket-Paar kennen, dh Client-IP +
-Port
6
"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 Sockets voneinander zu unterscheiden. Es sind nicht genügend Informationen vorhanden, um a zu identifizieren Steckdose." Sind das nicht die gleichen Sockets, sondern unterschiedliche Verbindungen zwischen den beiden Verbindungen, mit denen Sie 3 Sockets, 2 Ortsansässige und einen Server-Socket verbunden haben? oder sind es tatsächlich zwei verschiedene Steckdosen? Es gibt keine Möglichkeit, sie voneinander zu unterscheiden, da sie gleich sind. Um die Verbindungen voneinander zu unterscheiden, benötigen Sie die verschiedenen lokalen Steckdosen.
Andrew Clavin
6
-1 Ihre Antwort ist einfach falsch. Sie: "Ein TCP-Socket ist ... der Endpunkt einer bestimmten Verbindung ." RFC 793 : "Ein Socket kann gleichzeitig in mehreren Verbindungen verwendet werden ." Ich bin nicht sicher, welche Bibliotheken Sie verwenden, aber in den von mir verwendeten Bibliotheken wurden Socket-Objekte durch eine IP und einen Port eindeutig definiert und haben Verbindungsobjekte für jeden Remote-Socket erzeugt.
Zaz
187

Eine Steckdose besteht aus drei Dingen:

  1. Eine IP-Adresse
  2. Ein Transportprotokoll
  3. Eine Portnummer

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:

  • 1030 ist ein Hafen.
  • (10.1.1.2, TCP, Port 1030) ist ein Socket.
RT_
quelle
80
Nein. Ein Socket besteht aus fünf Dingen: {Protokoll, lokale Adresse, lokaler Port, Remote-Adresse, Remote-Port}.
Marquis von Lorne
19
@EJP Nein, schon wieder. Weitere Informationen finden Sie in der ausgewählten Antwort.
Kehlan Krumme
2
@KorayTugay Es ist im IP-Header. Was lässt Sie denken, dass die TCP-Schicht das nicht sehen kann?
Marquis von Lorne
1
@EJP Wie ich in der oben genannten Antwort sehen kann, ist ein Socket NICHT die Verbindung selbst, sondern der Endpunkt einer Verbindung. Wie kommt es dann, dass er sowohl lokale als auch Remote-Ports und IP-Adressen enthalten kann? Ein Socket repräsentiert nur eine Seite der Verbindung, dh entweder den lokalen Port und die lokale IP-Adresse ODER den Remote-Port und die Remote-IP-Adresse. Bitte korrigieren Sie mich, wenn ich falsch liege.
RBT
7
@EJP Still RFC 793: "Ein Socket-Paar identifiziert jede Verbindung eindeutig. Das heißt, ein Socket kann gleichzeitig in mehreren Verbindungen verwendet werden." Wenn eine Steckdose bereits aus fünf Dingen bestand, wie könnte es dann "ein Paar Steckdosen" in meinem Zitat geben?
Gab
100

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

Galwegisch
quelle
2
Schicht 2 im OSI-Modell ist eine Verbindung zwischen Knoten, es gibt keinen Mechanismus zum Verbinden von Prozessen. Ich glaube nicht, dass Sie einen Socket in Betracht ziehen können, der bei OSI 12 existiert.
Antonio Haley
18
Eine Schaltung ist eine Verbindung - eine Buchse ist ein Endpunkt. Eine Verbindung besteht aus 2 Steckdosen.
Mark Brackett
" Ein Socket stellt eine einzelne Verbindung zwischen zwei Netzwerkanwendungen dar. " Dies entspricht nicht RFC 793, Transmission Control Protocol , das erklärt: " Damit viele Prozesse innerhalb eines einzelnen Hosts gleichzeitig TCP-Kommunikationsfunktionen verwenden können, stellt der TCP eine Reihe von Adressen bereit oder Ports innerhalb jedes Hosts. Verkettet mit den Netzwerk- und Hostadressen der Internetkommunikationsschicht bildet dies einen Socket. Ein Paar Sockets identifiziert jede Verbindung eindeutig. "
Ron Maupin
84

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 :)

eRaisedToX
quelle
X, Y, Z würden sich also mit demselben Port verbinden, dh mit demselben Dienst, aber auf der Serverseite unterschiedliche Sockets haben? Wenn X beispielsweise ein Paket an den Server sendet, heißt es: "Finde mir den Socket (Protokoll, X-IP, X-Port, S-IP, S-Port)" und sende ihn an die Chat-App. Ich gehe davon aus, dass zwischen einigen anwendungsspezifischen Objekten und Socket-Objekten eine Bindung bestehen muss. Wenn ich zum Beispiel Daten von Socket-1 erhalte, möchte ich diese als Benutzernachricht anzeigen, aber die App muss wissen, dass Nachrichten von Socket A von Benutzer-X stammen.
Monolith
44

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:

  • Die Datenverbindungsschicht . Diese Schicht ist dafür verantwortlich, Datenpakete von einem Netzwerkgerät zu einem anderen zu übertragen, und befindet sich direkt über der Schicht, die die Übertragung tatsächlich durchführt. Es spricht über MAC-Adressen und weiß, wie Hosts anhand ihrer MAC-Adresse (Hardware-Adresse) gefunden werden, aber nicht mehr.
  • Die Netzwerkschicht ist die Schicht, mit der Sie Daten über Maschinen und physische Grenzen wie physische Geräte transportieren können. Die Netzwerkschicht muss im Wesentlichen einen zusätzlichen adressbasierten Mechanismus unterstützen, der sich irgendwie auf die physische Adresse bezieht. Geben Sie das Internetprotokoll (IPv4) ein. Eine IP-Adresse kann Ihr Paket über das Internet von A nach B bringen, weiß jedoch nichts darüber, wie einzelne Hops durchlaufen werden. Dies wird von der obigen Schicht gemäß den Routing-Informationen behandelt.
  • Die Transportschicht . Diese Ebene ist dafür verantwortlich, die Art und Weise zu definieren, wie Informationen von A nach B gelangen, sowie alle Einschränkungen, Überprüfungen oder Fehler in diesem Verhalten. Beispielsweise fügt TCP einem Paket zusätzliche Informationen hinzu, sodass abgeleitet werden kann, ob Pakete verloren gegangen sind.

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:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Großartig! Also geben sockaddrwir in den Strukturen unseren Port und unsere BAM an! Job erledigt! Na ja, fast, außer:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

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:

  • Ein Internet-Socket ist die Kombination aus einer IP-Adresse, einem Protokoll und der zugehörigen Portnummer, über die ein Dienst Daten bereitstellen kann. TCP-Port 80, stackoverflow.com ist also ein Internet-Socket.
  • Ein Unix-Socket ist ein IPC-Endpunkt, der im Dateisystem dargestellt wird, z /var/run/database.sock.
  • Eine Socket-API ist eine Methode zum Anfordern einer Anwendung, Daten in einen Socket lesen und schreiben zu können.

Voila! Das räumt auf. Also in unserem Schema dann,

  • Ein Port ist eine numerische Kennung, die als Teil eines Transportschichtprotokolls die Dienstnummer identifiziert, die auf die angegebene Anforderung antworten soll.

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
Dies ist der Grund, warum Kugeln Powerpoint nicht verlassen und nicht verlassen. Sie arbeiten!
Anurag Kalia
Sehr schöne Einführung in die TCP-IP- und Netzwerkkommunikation. Anfänger, lesen Sie dies zuerst.
Colin
32

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?)

Gishu
quelle
7
Ich glaube, Port hat eine breitere Bedeutung als Ihre Definition.
Richard Dorman
2
Und Sockets unterliegen nicht nur dem TCP / IP-Stack. Siehe UNIX-Domänensockets oder Interprozess-Kommunikationssockets im Allgemeinen.
Matthias Krull
Ich bin mir über diese Antwort nicht sicher. Sie können HTTP verwenden, um über Sockets mit einem anderen Prozess zu kommunizieren, ohne einen Port zuzuweisen.
13.
31

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.

kta
quelle
Benötigt jeder Socket einen eigenen Port?
Montag,
Genial. Der einfachste Weg, ein Bergwissen zu präsentieren.
Asif Mehmood
5
Ich bin nicht sicher, ob Ihre Aussage "Der Server erstellt einen Socket pro Verbindung, um seinen Client zu verwalten" richtig ist.
Rushi Agrawal
1
@RushiAgrawal Dann schlage ich vor, dass Sie es nachschlagen. Insbesondere siehe Mann akzeptieren.
Marquis von Lorne
1
Dies bedeutet, dass für jeden Socket, den der Server pro Verbindung erstellt, um seinen Client zu verwalten, dieselbe Portnummer (z. B. Port 80 für die Fortsetzung von HTTP-Verbindungen) verwendet werden kann, jedoch mit einer anderen IP-Adresse der Clients, von denen die Anforderungen für Verbindungen gesendet werden. Recht?
Randika Vishman
25

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_DGRAMUDP (nur Senden einer Nachricht) und SOCK_STREAMTCP (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).

Mark Brackett
quelle
25

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.

Andy
quelle
3
Das Wort "intern" in der Portbeschreibung klingt für mich eher nach "nicht öffentlich".
Jonas N
Könnten wir also sagen: Sockets laufen in Ports? oder Ports läuft in Sockets?
Gucho Ca
@GuchoCa Wir können nicht sagen, dass Sockets oder Ports überhaupt laufen, geschweige denn ineinander. Unklar, was Sie fragen.
Marquis von Lorne
16

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.

Roel
quelle
Die allgemeinste Antwort erhalten Sie, indem Sie "einen Port und einen Hostnamen oder Netzwerkadapter nehmen und zu einem kombinieren". Ein UNIX-Socket ist beispielsweise (im Code) eine Datenstruktur (oder ein Objekt), mit der Sie Daten senden oder empfangen können.
Josiah Yoder
14

Dies sind grundlegende Netzwerkkonzepte, daher werde ich sie auf einfache und dennoch umfassende Weise erläutern, um sie im Detail zu verstehen.

  • Eine Steckdose ist wie ein Telefon (dh ein End-to-End-Gerät für die Kommunikation).
  • IP ist wie Ihre Telefonnummer (dh Adresse für Ihre Steckdose)
  • Port ist wie die Person, mit der Sie sprechen möchten (dh der Service, den Sie unter dieser Adresse bestellen möchten).
  • Ein Socket kann ein Client- oder ein Server-Socket sein (dh in einem Unternehmen ist das Telefon des Kundensupports ein Server, aber ein Telefon in Ihrem Haus ist meistens ein Client).

Ein Socket im Netzwerk ist also ein virtuelles Kommunikationsgerät, das an ein Paar (IP, Port) = (Adresse, Dienst) gebunden ist.

Hinweis:

  • Ein Computer, ein Computer, ein Host, ein Mobiltelefon oder ein PC kann mehrere Adressen, mehrere offene Ports und damit mehrere Sockets haben. Wie in einem Büro können Sie mehrere Telefone mit mehreren Telefonnummern und mehreren Personen zum Sprechen haben.
  • Das Vorhandensein eines offenen / aktiven Ports erfordert, dass ein Socket daran gebunden ist, da der Socket den Port zugänglich macht. Möglicherweise haben Sie jedoch vorerst nicht verwendete Ports.
  • Beachten Sie auch, dass Sie in einem Server-Socket ihn an (einen Port, eine bestimmte Adresse eines Computers) oder an (einen Port, alle Adressen eines Computers) binden können, da Sie im Telefon möglicherweise viele Telefonleitungen (Telefonnummern) anschließen ein Telefon oder eine bestimmte Telefonleitung zu einem Telefon und dennoch können Sie eine Person über alle diese Telefonleitungen oder über eine bestimmte Telefonleitung erreichen.
  • Sie können eine Steckdose nicht mit zwei Anschlüssen verknüpfen (binden), da im Telefon normalerweise nicht immer zwei Personen gleichzeitig dasselbe Telefon verwenden können.
  • Erweitert: Auf demselben Computer können nicht zwei Sockets mit demselben Typ (Client oder Server) und demselben Port und derselben IP-Adresse vorhanden sein. Wenn Sie jedoch ein Client sind, können Sie zwei Verbindungen mit zwei Sockets zu einem Server öffnen, da der lokale Port in jedem Socket dieses Clients unterschiedlich ist.

Hoffe, es klärt Sie Zweifel

Mosab Shaheen
quelle
Es ist interessant, all diese Erkenntnisse und Analogien von Sockets / Ports / IP-Adressen unter dieser Frage zu sehen. Und ich mag diese Antwort.
Bloodmoon
12

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:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...
Colin
quelle
12

Eine Socket-Adresse ist eine IP-Adresse und eine Portnummer

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Eine Verbindung entsteht, wenn 2 Sockets miteinander verbunden sind.

Zaz
quelle
Es gibt keine Möglichkeit, zwei Steckdosen miteinander zu verbinden. Das Wort "gebunden" bedeutet etwas anderes mit Ports.
Marquis von Lorne
10

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.

Krishna
quelle
Diese Antwort hat es für mich getan. Ich denke, das liegt daran, dass sonst niemand das Wort Assoziation erwähnt hat. Gute Erklärung.
Rationalcoder
In keinem Ihrer Beispiele gibt es eine Prozessnummer. Das Wort, das Sie suchen, ist "Hafen".
Marquis von Lorne
Lesen Sie den ersten Absatz. Dort wird er deutlich erwähnt. Lassen Sie mich jede Unklarheit wissen, indem Sie den genauen Satz zitieren. Wäre hilfreich für mich, um zu improvisieren.
Krishna
7

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.

Mecki
quelle
2
Das ist falsch. Ein Socket ist kein Endpunkt. Ein Socket wird durch zwei Endpunkte definiert. Jeder Endpunkt wird durch eine Netzwerkadresse und einen Port definiert. Der Zweck von Ports besteht darin, mehrere Endpunkte auf derselben Netzwerkadresse zu unterscheiden, sodass mehrere gleichzeitige Sockets unterstützt werden können.
Peter Wone
1
Ich stelle fest, dass RFC793 (ursprüngliche TCP-Spezifikation) die Kombination einer Netzwerkadresse und eines Ports als Socket bezeichnet, sodass ich sehen kann, woher Sie diese haben, aber es ist immer noch falsch, da ein Socket notwendigerweise durch zwei Endpunkte definiert ist.
Peter Wone
2
Nachdenklich ist die Literatur widersprüchlich und ich entschuldige mich. Genau genommen findet die Kommunikation erst statt, wenn eine TCP-Verbindung zwischen zwei Endpunkten (auch Sockets genannt) hergestellt wurde, von denen jeder durch eine Netzwerkadresse und einen Port identifiziert wird. Ich gebe auf.
Peter Wone
6

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:

  • IP und Port ~ Telefonnummer
  • Steckdose ~ Telefongerät
  • Verbindung ~ Anruf
  • Verbindung herstellen ~ Nummer anrufen
  • Prozesse, Remote-Anwendungen ~ Menschen
  • Nachrichten ~ Sprache
inf3rno
quelle
Gute Klarstellung (besonders wenn man die Telefonvermittlungshistorie betrachtet, die Teil der Grundlage der Netzwerkterminologie ist ..)
oɔɯǝɹ
Schauen Sie sich netstateinige 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.
Marquis von Lorne
6

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:
Geben Sie hier die Bildbeschreibung ein
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.

Ugnes
quelle
5

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 .

S.Lott
quelle
3
Diese Beschreibung der Steckdose ist ziemlich falsch. Bei einem Socket handelt es sich um die Verbindung zwischen einem Tupelpaar, wobei sich ein Tupel auf ein IP ADDR- und Port-Paar bezieht. Zusätzlich können viele Sockel an denselben Port angeschlossen werden. Wie kann ein Webserver an Port 80 mehrere Verbindungen herstellen? Dies ist eine schlechte Antwort
Tall Jeff
1
Es tut uns leid. Mehrere Sockets sind nicht mit Port 80 verbunden. Ein Socket ist verbunden und erzeugt zusätzliche Sockets, an denen die eigentliche Übertragung stattfindet. Siehe opengroup.org/onlinepubs/009695399/functions/listen.html .
S.Lott
1
Tatsächlich ist die Beschreibung unter opengroup.org/onlinepubs/009695399/functions/connect.html besser. Der von einer Verbindung zurückgegebene Peer-Socket befindet sich NICHT an Port 80.
S.Lott
1
Dieser Beitrag ist in mehreren Einzelheiten falsch und in mehrfacher Hinsicht irreführend.
Peter Wone
@ Peter Wone: Welche Angaben? Welche Aspekte? Ich hoffe aus meinen Fehlern zu lernen.
S.Lott
5

aus dem Oracle Java Tutorial :

Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei im Netzwerk ausgeführten Programmen. Ein Socket ist an eine Portnummer gebunden, damit die TCP-Schicht die Anwendung identifizieren kann, an die Daten gesendet werden sollen.

yondoo
quelle
Das ist nur ein Tutorial und sicherlich keine normative Referenz.
Marquis von Lorne
"Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung" Ist das nicht eine Socket-Definition, kein Java-Tutorial?
Prayagupd
@prayagupd Natürlich ist es eine Definition, aber es stammt aus einem Tutorial, nicht aus einer Spezifikation.
Marquis von Lorne
4

Port und Socket können mit der Bankfiliale verglichen werden.

Die Gebäudenummer der "Bank" entspricht der IP-Adresse. Eine Bank hat verschiedene Bereiche wie:

  1. Sparkontenabteilung
  2. Persönliche Kreditabteilung
  3. Wohnungsbaudarlehensabteilung
  4. Beschwerdeabteilung

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.

Shridhar410
quelle
3

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.

Sander
quelle
3

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.

Großer Jeff
quelle
2
Ein Socket ist ein Endpunkt. Es existiert, bevor eine Verbindung hergestellt wird (TCP) oder wenn keine Verbindung besteht (UDP). Ergo ist es nicht selbst die Verbindung.
Marquis von Lorne
2

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.

Harty
quelle
2

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

In diesem Beispiel werden Sie durch den Prozess der Verbindung zu einer Website wie Wiley geführt. Sie würden Ihren Webbrowser (wie Mozilla Firefox) öffnen und www.wiley.com in die Adressleiste eingeben. Ihr Webbrowser verwendet einen DNS-Server (Domain Name System), um den Namen www.wiley.com nachzuschlagen und die IP-Adresse zu ermitteln. In diesem Beispiel lautet die Adresse 192.0.2.100.

Firefox stellt eine Verbindung zur Adresse 192.0.2.100 und zu dem Port her, an dem der Webserver der Anwendungsschicht ausgeführt wird. Firefox weiß, welcher Port zu erwarten ist, da es sich um einen bekannten Port handelt. Der bekannte Port für einen Webserver ist der TCP-Port 80.

Der Ziel-Socket, den Firefox zu verbinden versucht, wird als Socket: Port oder in diesem Beispiel als 192.0.2.100:80 geschrieben. Dies ist die Serverseite der Verbindung, aber der Server muss wissen, wohin die Webseite gesendet werden soll, die Sie in Mozilla Firefox anzeigen möchten, damit Sie auch einen Socket für die Clientseite der Verbindung haben.

Die clientseitige Verbindung besteht aus Ihrer IP-Adresse, z. B. 192.168.1.25, und einer zufällig ausgewählten dynamischen Portnummer. Der mit Firefox verknüpfte Socket sieht wie folgt aus: 192.168.1.25:49175. Da Webserver an TCP-Port 80 ausgeführt werden, sind beide Sockets TCP-Sockets. Wenn Sie eine Verbindung zu einem Server herstellen, der an einem UDP-Port ausgeführt wird, sind sowohl Server- als auch Client-Sockets UDP-Sockets.

Omkar Ramtekkar
quelle
Zitat von sehr schlechter Qualität. Der dritte Absatz missbraucht das Wort "Socket", als würde es "IP-Adresse" bedeuten. Das tut es nicht.
Marquis von Lorne
2

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.

Navneet Singh
quelle
2

Ein einzelner Port kann eine oder mehrere Buchsen haben, die mit verschiedenen externen IPs verbunden sind, wie z. B. eine Mehrfachsteckdose.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312
Gast
quelle
2

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.

Dražen G.
quelle
1

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 .

Erik van Brakel
quelle
Im Java Turorial meinen Sie.
Marquis von Lorne
1

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.

balaweblog
quelle
Ein TCP- oder UDP-Port bezieht sich weder auf physische noch auf Ethernet-Verbindungspunkte. Sie haben die Frage nicht beantwortet.
Marquis von Lorne
1

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.

VoidPointer
quelle