1160 Stimmen

Was ist der Unterschied zwischen einem Port und einem Socket?

Diese Frage wurde von einem der Software-Ingenieure in meiner Organisation gestellt. Ich bin an der weitesten Definition interessiert.

24voto

Roel Punkte 18798

Es handelt sich um Begriffe aus zwei verschiedenen Bereichen: Port" ist ein Begriff aus dem TCP/IP-Netz, "Socket" ist eine API (Programmiersprache). Ein "Socket" wird (im Code) aus einem Port und einem Hostnamen oder Netzwerkadapter gebildet und zu einer Datenstruktur kombiniert, mit der Sie Daten senden oder empfangen können.

17voto

Colin Punkte 2059

Nachdem ich die ausgezeichneten Antworten gelesen hatte, fand ich, dass der folgende Punkt für mich, einen Neuling in der Netzwerkprogrammierung, hervorgehoben werden muss:

TCP-IP-Verbindungen sind bidirektionale Pfade, die eine Adresse:Port-Kombination mit einer anderen Adresse:Port-Kombination verbinden. Wenn Sie also eine Verbindung von Ihrem lokalen Rechner zu einem Port auf einem entfernten Server (z. B. www.google.com:80) öffnen, verknüpfen Sie mit der Verbindung auch eine neue Portnummer auf Ihrem Rechner, damit der Server Daten an Sie zurücksenden kann (z. B. 127.0.0.1:65234). Es kann hilfreich sein, netstat zu verwenden, um die Verbindungen Ihres Rechners 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
...

14voto

Mecki Punkte 113876

Ein Socket ist ein Kommunikationsendpunkt. Ein Socket ist nicht direkt mit der TCP/IP-Protokollfamilie verbunden, sondern kann mit jedem Protokoll verwendet werden, das Ihr System unterstützt. Die C-Socket-API erwartet, dass Sie zunächst ein leeres Socket-Objekt vom System erhalten, das Sie dann entweder an eine lokale Socket-Adresse binden können (um eingehenden Datenverkehr bei verbindungslosen Protokollen direkt abzurufen oder um eingehende Verbindungsanfragen bei verbindungsorientierten Protokollen anzunehmen) oder das Sie mit einer entfernten Socket-Adresse verbinden können (für beide Arten von Protokollen). Sie können sogar beides tun, wenn Sie sowohl die lokale Socket-Adresse, an die ein Socket gebunden ist, als auch die entfernte Socket-Adresse, mit der ein Socket verbunden ist, kontrollieren wollen. Bei verbindungslosen Protokollen ist es sogar optional, einen Socket zu verbinden, aber wenn Sie das nicht tun, müssen Sie mit jedem Paket, das Sie über den Socket senden wollen, auch die Zieladresse übergeben, denn woher soll der Socket sonst wissen, wohin er die Daten senden soll? Der Vorteil ist, dass Sie einen einzigen Socket verwenden können, um Pakete an verschiedene Socket-Adressen zu senden. Sobald Sie Ihren Socket konfiguriert und vielleicht sogar angeschlossen haben, betrachten Sie ihn als bidirektionales Kommunikationsrohr. Sie können es benutzen, um Daten an ein bestimmtes Ziel zu senden, und ein anderes Ziel kann es benutzen, um Daten an Sie zurück zu senden. Was Sie in ein Socket schreiben, wird versendet, und was Sie empfangen haben, steht zum Lesen zur Verfügung.

Ports hingegen sind etwas, das nur bestimmte Protokolle des TCP/IP-Protokollstapels haben. TCP- und UDP-Pakete haben Ports. Ein Port ist nur eine einfache Nummer. Die Kombination aus Quell- und Zielport kennzeichnet einen Kommunikationskanal zwischen zwei Hosts. Sie haben z. B. einen Server, der sowohl ein einfacher HTTP-Server als auch ein einfacher FTP-Server sein soll. Wenn nun ein Paket für die Adresse dieses Servers ankommt, woher weiß er dann, ob es sich um ein Paket für den HTTP- oder den FTP-Server handelt? Nun, er wird es wissen, da der HTTP-Server auf Port 80 und der FTP-Server auf Port 21 läuft. Wenn also das Paket mit dem Zielport 80 ankommt, ist es 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 immer nur eine Verbindung zu einer IP-Adresse haben kann. Der Quellport ermöglicht es einem Server, ansonsten identische Verbindungen zu unterscheiden: Sie haben alle den gleichen Zielport, z. B. Port 80, die gleiche Ziel-IP (die IP des Servers) und die gleiche Quell-IP, da sie alle vom gleichen Client kommen, aber da sie unterschiedliche Quellports haben, kann der Server sie voneinander unterscheiden. Und wenn der Server Antworten zurücksendet, dann an den Port, von dem die Anfrage kam, so dass der Client auch verschiedene Antworten, die er vom selben Server erhält, unterscheiden kann.

13voto

Krishna Punkte 4514

Ein Socket ist ein spezieller Typ eines Dateihandles, der von einem Prozess verwendet wird, um Netzwerkdienste vom Betriebssystem anzufordern. Eine Socket-Adresse ist ein Tripel: {protocol, local-address, local-process}, wobei der lokale Prozess durch eine Portnummer identifiziert wird.

In der TCP/IP-Suite, zum Beispiel:

{tcp, 193.44.234.3, 12345}

Eine Konversation ist die Kommunikationsverbindung zwischen zwei Prozessen und stellt somit eine Verbindung zwischen zwei dar. Eine Assoziation ist das 5-Tupel, das die beiden Prozesse, die eine Verbindung bilden, vollständig spezifiziert: {protocol, local-address, local-process, foreign-address, foreign-process}

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 Halb-Assoziation ist entweder: {Protokoll, lokale Adresse, lokaler Prozess}

oder

{Protokoll, ausländische Adresse, ausländischer Prozess}

die jeweils die Hälfte einer Verbindung angeben.

Die Halbassoziation 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. Sie ist als allgemeine Programmierschnittstelle für die Kommunikation konzipiert und wurde erstmals mit dem UNIX-System 4.2BSD eingeführt. Obwohl sie nicht standardisiert wurde, hat sie sich zu einem De-facto-Industriestandard entwickelt.

13voto

Zaz Punkte 42583

Eine Socket-Adresse ist eine IP-Adresse und eine Port-Nummer

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

Eine Verbindung entsteht, wenn 2 Steckdosen miteinander verbunden sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X