it-swarm.com.de

Unterschied zwischen einem Socket und einem Port

Könnte jemand bitte ganz klar den Unterschied zwischen einem Port und einem Socket erklären. Ich weiß, dass ein Port als Tür zum Netzwerk für einen Anwendungsprozess dient und dass der Anwendungsprozess eine Socket-Verbindung zur angegebenen Portnummer verwendet, um die Netzwerkkommunikation zu handhaben. Wenn jedoch mehrere Prozesse eine einzelne Portnummer abhören, stelle ich fest Es ist schwierig, den Unterschied zwischen der Buchse und dem Anschluss zu verstehen und wie sie alle zusammenpassen.

128
cobie

[~ # ~] s [~ # ~] ist ein Serverprogramm: Nehmen wir an, es ist ein HTTP-Server, also wird der bekannte verwendet Portnummer für [~ # ~] http [~ # ~] , die 80 ist. Ich führe sie auf einem Host mit der IP-Adresse 10.0.0.4 aus, also wird es Hören Sie auf Verbindungen auf 10.0.0.4:80 (denn dort wird jeder erwarten, dass sie gefunden werden).

In [~ # ~] s [~ # ~] werde ich einen Socket erstellen und binden an diese Adresse: Jetzt weiß das Betriebssystem, dass Verbindungen, die in 10.0.0.4:80 eingehen, an meine [ ~ # ~] s [~ # ~] Prozess über diesen bestimmten Socket.

  • 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 ist alle Nullen, da es [~ # ~] s [~ # ~] egal ist, wie ihre Clients sie erreichen

Sobald [~ # ~] s [~ # ~] diesen Socket gebunden hat, akzeptiert er Verbindungen - Jedes Mal, wenn ein neuer Client eine Verbindung herstellt, gibt accept einen Socket neu zurück, 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:80 Repräsentiert [~ # ~] s [~ # ~] das Ende der Verbindung und ist dem zurückgegebenen Socket zugeordnet von accept
    • 10.0.0.5:55715 Ist das Ende der Verbindung des Clients und dem Socket zugeordnet, den der Client an connect übergeben hat. Der Client-Port wird nur für das Weiterleiten von Paketen auf dieser TCP -Verbindung zum richtigen Prozess) verwendet. Er wird vom Client-Kernel zufällig aus dem kurzlebigen Portbereich zugewiesen.

Jetzt kann [~ # ~] s [~ # ~] gerne weitere Clientverbindungen akzeptieren ... jeder erhält seinen eigenen Socket, Jeder Socket wird einer eindeutigen TCP -Verbindung) zugeordnet, und jede Verbindung hat eine eindeutige Remote-Adresse. [~ # ~] s [~ # ~] verfolgt den Client-Status (falls vorhanden), indem er ihn dem Socket zuordnet.

Also ungefähr:

  • die IP-Adresse dient zum Routing zwischen Hosts im Netzwerk
  • der Port dient zum Weiterleiten an den richtigen Socket auf dem Host
    • Ich hätte fast gesagt korrekter Prozess, aber es ist tatsächlich möglich, dass mehrere (normalerweise untergeordnete) Prozesse auf demselben Socket akzeptiert werden ...
    • jedes Mal, wenn einer der gleichzeitigen accept -Aufrufe zurückkehrt, geschieht dies jedoch nur in one Prozessen. 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 bei einem Dateideskriptor
    • wie in den Kommentaren erwähnt, gibt es viele andere Verwendungsmöglichkeiten für Sockets, die überhaupt keine Ports verwenden: Zum Beispiel erstellt socketpair ein Paar miteinander verbundener Sockets mit nein Adressierungsschema überhaupt - die einzige Möglichkeit, diese Pipe zu verwenden, besteht darin, der Prozess zu sein, der socketpair aufgerufen hat, ein untergeordnetes Element dieses Prozesses ist und einen erbt oder explizit einen der Sockets übergeben wird von diesem Prozess
118
Useless

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ße des Gebäudes.

52
Caleb

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

Ein Socket ist Teil der Schnittstelle, die das Betriebssystem Anwendungen zur Verfügung stellt, 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 könnte eine andere Schnittstelle für Anwendungen bieten. Ein Socket ist einfach eine Möglichkeit, Daten an einem bestimmten Port zu senden und zu empfangen.

48
Dirk Holsopple

Ein Computer verfügt über eine IP-Adresse, die ihn als separate Entität 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 Betriebssystemseite der Verbindung benötigen Sie Puffer, Verbindungsstatus usw. Dieses logische Objekt ist der Socket.

8
stonemetal

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 erstellen Sie einen Socket und schließen ihn an den Port an. Grundsätzlich bieten Socket = IP + -Ports Sockets Zugriff auf Port + IP

0
Sitati