Unterschied zwischen einem Socket und einem Port

121

Könnte mir bitte jemand den Unterschied zwischen einem Port und einem Socket ganz klar erklären. Ich weiß, dass ein Port als Tür in das Netzwerk für einen Anwendungsprozess dient und dass der Anwendungsprozess eine Socket-Verbindung mit der angegebenen Portnummer verwendet, um die Netzwerkkommunikation zu verwalten Es ist schwierig, den Unterschied zwischen der Steckdose und dem Port zu verstehen und zu verstehen, wie sie alle zusammenpassen.

Cobie
quelle
9
Port ist eine physikalische Adresse, während Socket ein Objekt ist.
SuperM
14
Wenn ein Paket eine Tasche auf einem Sockel an einem Port
trifft

Antworten:

116

S ist ein Serverprogramm: Nehmen wir an, es ist ein HTTP-Server, also verwendet er die bekannte Portnummer für HTTP (80). Ich führe es auf einem Host mit IP-Adresse aus 10.0.0.4, damit es auf Verbindungen wartet 10.0.0.4:80(weil das ist, wo jeder erwarten wird, es zu finden).

In S erstelle ich einen Socket und binde ihn an diese Adresse: Jetzt weiß das Betriebssystem, dass eingehende Verbindungen über diesen bestimmten Socket 10.0.0.4:80an meinen S- Prozess geleitet werden sollen.

  • Netstat-Ausgabe, sobald der Socket gebunden ist:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB. Die lokale Adresse besteht nur aus Nullen, da es S egal ist, wie seine Clients sie erreichen

Sobald S diesen Socket gebunden hat, akzeptiert es Verbindungen. Jedes Mal, wenn ein neuer Client eine Verbindung herstellt, wird acceptein neuer Socket zurückgegeben, der für diesen Client spezifisch ist

  • Netstat-Ausgabe, sobald eine Verbindung akzeptiert wird:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80repräsentiert S Ende der Verbindung S‘und ist mit dem Sockel verbunden ist durch zurückaccept
    • 10.0.0.5:55715ist das Ende der Verbindung des Clients und ist dem Socket zugeordnet, den der Client an die Verbindung übergeben hat . Der Client-Port wird nur zum Weiterleiten von Paketen auf dieser TCP-Verbindung an den richtigen Prozess verwendet: Er wird vom Client-Kernel nach dem Zufallsprinzip aus dem kurzlebigen Portbereich zugewiesen.

Jetzt kann S problemlos weitere Client-Verbindungen akzeptieren. Jeder Socket erhält einen eigenen Socket, jeder Socket wird einer eindeutigen TCP-Verbindung zugeordnet und jede Verbindung hat eine eindeutige Remoteadresse. S verfolgt den Client-Status (falls vorhanden), indem es ihn dem Socket zuordnet.

Also ungefähr:

  • Die IP-Adresse dient zum Routing zwischen Hosts im Netzwerk
  • Der Port dient zur Weiterleitung an den richtigen Socket auf dem Host
    • Ich habe beinahe gesagt , dass der Prozess korrekt ist , aber es ist tatsächlich möglich, dass mehrere (normalerweise untergeordnete) Prozesse gleichzeitig denselben Socket akzeptieren ...
    • Jedes Mal, wenn einer der gleichzeitigen acceptAufrufe zurückgegeben wird, erfolgt dies jedoch in nur einem Vorgang. Der Socket jeder eingehenden Verbindung ist für eine Instanz des Servers eindeutig
  • Der Socket ist das Objekt, mit dem ein Prozess mit dem Betriebssystem über eine bestimmte Verbindung spricht, ähnlich wie ein Dateideskriptor
    • Wie in den Kommentaren erwähnt, gibt es viele andere Verwendungszwecke für Sockets, die überhaupt keine Ports verwenden: Zum Beispiel erstellt socketpair ein Paar miteinander verbundener Sockets, die überhaupt kein Adressierungsschema haben - die einzige Möglichkeit, diese Pipe zu verwenden, besteht darin, zu sein der Prozess, der aufgerufen socketpairhat, ein Kind dieses Prozesses zu sein und einen zu erben oder explizit einen der Sockets dieses Prozesses zu übergeben
Nutzlos
quelle
1
@Useless Es ist erwähnenswert, dass Sockets nicht IP-basiert sein müssen, wie die Antwort zeigt. Es ist nicht gerade relevant für das OP, aber eine Erklärung der Sockelfamilien würde diese Antwort abrunden.
Hafichuk
Guter Punkt - Ich machte mir schon Sorgen über das Scope Creep, als ich anfing, über Multiprozess-Server zu schreiben. Fühlen Sie sich frei, es zu bearbeiten, und wenn Sie es nicht tun, werde ich irgendwann darauf
zurückkommen
11
das ist überhaupt nicht nutzlos
l - '' '' ''---------' '' '' '' '' ''
Ich versuche, die Steckdose in der Elektronik zu verstehen. Ein Server, der eine Steckdose an eine Portnummer bindet, gleicht dem Anbringen einer Steckdose an einer Wand, die darauf wartet, dass einige elektronische Geräte angeschlossen werden, um den Akku aufzuladen. Aber wenn akzeptiert, wird eine neue Steckdose zurückgegeben? Warum? Wird eine neue Steckdose an die Wand gestellt? Bitte helfen Sie mir, einen Sinn daraus zu machen.
Aaron Shen
3
Das Problem hierbei ist, dass Ihre Analogie falsch ist. Vergessen Sie, was ein Socket in der physischen Welt bedeutet - es ist keine Metapher für etwas anderes, sondern nur ein Fachbegriff für ein bestimmtes technisches Softwarekonzept. Es ist nicht einmal stark mit physischen Netzwerkports oder -sockets verbunden - man muss es in diesem Bereich nur als ein Konzept auf seine eigenen Begriffe verstehen.
Nutzlos
49

Stellen Sie sich Ihre Maschine als Wohnhaus vor:

  • Ein Hafen ist eine Wohnungsnummer.

  • Eine Steckdose ist die Tür einer Wohnung.

  • Eine IP-Adresse ist die Straßenadresse des Gebäudes.

Caleb
quelle
3
Ich mag diese Analogie, obwohl ich jetzt darüber nachdenke, in dieser Wohnung zu sein und einen endlosen Korridor mit vielen Türen zu sehen. Ich kann nicht raus. Ich kann nicht raus! :)
Daniel Hollinrake
1
@Caleb A socket is the door of an apartment.Aber konnten nicht mehrere Sockets an einem Port offen sein?
Suhail Gupta
3
@suhail Manchmal hat eine Wohnung mehr als eine Tür. Sie haben alle die gleiche Wohnungsnummer, aber sie sind verschiedene Türen.
Caleb
45

Ein Port ist Teil der Adresse in den TCP- und UDP-Protokollen. Es wird verwendet, um dem Betriebssystem zu helfen, zu identifizieren, welche Anwendung die empfangenen Daten erhalten soll. Ein Betriebssystem muss Ports unterstützen, um TCP und UDP zu unterstützen, da Ports ein wesentlicher Bestandteil von TCP und UDP sind.

Ein Socket ist Teil der Schnittstelle, die das Betriebssystem für Anwendungen bereitstellt, damit diese Netzwerkdaten senden und empfangen können. Die meisten Socket-Implementierungen unterstützen viele Protokolle jenseits von TCP und UDP, von denen einige kein Konzept für Ports haben. Ein Betriebssystem muss keine Sockets unterstützen, um TCP oder UDP zu unterstützen. Es könnte eine andere Schnittstelle für Anwendungen zur Verfügung stellen. Ein Socket ist einfach eine Möglichkeit, Daten an einem bestimmten Port zu senden und zu empfangen.

Dirk Holsopple
quelle
Ein Socket besteht im Wesentlichen aus 4 Tupeln: Quell-IP: Port-Ziel-IP: Port.
Tony der Löwe
Du meinst, dass Port nur in TCP und UDP Protokollen existiert ??? Was ist mit http und anderen Protokollen?
Hosein Aqajani
HTTP ist ein Anwendungsschichtprotokoll, das auf Transportschichtprotokollen wie TCP oder UDP ausgeführt wird. Es hat kein eigenes Konzept für Ports, sondern erbt diese vom zugrunde liegenden Transportschichtprotokoll.
Dirk Holsopple
8

Ein Computer verfügt über eine IP-Adresse, die ihn als separate Einheit im Netzwerk identifiziert. Wir fügen dem eine zusätzliche Nummer hinzu, damit wir zwischen Verbindungen zu diesem Computer unterscheiden können. Dies ist die Portnummer. Auf der OS-Seite der Verbindung benötigen Sie Puffer, Verbindungsstatus usw. Dieses logische Objekt ist der Socket.

Steinmetalle
quelle
0

Ein Socket ist ein Kommunikationspfad zu einem Port. Wenn Sie möchten, dass Ihr Programm über das Netzwerk kommuniziert, haben Sie ihm eine Möglichkeit zur Adressierung des Ports gegeben. Dazu müssen Sie einen Socket erstellen und diesen an den Port anschließen. Grundsätzlich gilt: Socket = IP + Ports Sockets bieten Zugriff auf den Port + IP

Sitati
quelle
-1

Eine IP-Adresse identifiziert das Gerät, dh die Adresse für das jeweilige Gerät, wenn Sie das Gerät über den IP-Now-Port erreicht haben, definiert, mit welchem ​​Prozess das Gerät kommunizieren soll.

Für die eigentliche Kommunikation benötigen Sie also beide Ports + IP, die als Socket bezeichnet werden.

pj
quelle