Fungiert derselbe Port sowohl als Client als auch als Server?

Fungiert derselbe Port sowohl als Client als auch als Server?

ich finde etwas Seltsames an dieser Netstat-Ausgabe. Die Ausgabe erfolgt mit netstat -a -n -o -p TCPeinem Befehl unter Win 7.

 Proto  Local Address          Foreign Address        State           PID
 TCP    127.0.0.1:55486        127.0.0.1:55487        ESTABLISHED     5808
 TCP    127.0.0.1:55487        127.0.0.1:55486        ESTABLISHED     5808

55486Bitte beachten Sie diese beiden Zeilen. Sowohl die lokale als auch die ausländische Adresse ist „localhost“. Aber wie kommt es , dass die Ports gepaart sind? Welcher von zwei Ports 55487ist der Server-Port und welcher der Client-Port?

soweit ich es verstehe, local-addressbezeichnet die Spalte die Clientseite einer TCP-Verbindung und die foreign-adressSpalte die Serverseite. Aus dieser Ausgabe scheint hervorzugehen, dass sich derselbe Port sowohl als Client als auch als Server verhält.UndServer.

Ich verstehe nicht, wie das mit TCP möglich ist?

netstat mit gepaarten Ports

Antwort1

Linie:TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808

Gibt an, dass der Client eine Verbindung zum Port 55487 für den Server herstellt, während der Client Port 55486 verwendet.

Linie: TCP 127.0.0.1:55487 127.0.0.1:55486 ESTABLISHED 5808

gibt an, dass der Server von Port 55487 aus über Port 55486 eine Verbindung zum Client herstellt.

TCP erfordert den „3-Wege-Handshake“, um die Verbindung zwischen einem Client und einem Server herzustellen.

Der Client stellt eine Verbindung zu einem Server her (Teil 1 des 3-Wege-Handshakes). Der Server antwortet mit der Bestätigung der Verbindung (Teil 2). Der Client antwortet auf die Bestätigung mit einer eigenen Bestätigung (Teil 3).

TL;DR - Der Client verwendet im Allgemeinen einen zufälligen Port, um sich mit einem Server mit einem bestimmten Port zu verbinden. Der Server antwortet diesem Rechner über den zufälligen Port. Client und Server sindNICHTauf demselben Port.

Antwort2

Ich kann nicht genau sagen, wie viel Sie davon jetzt verstehen, also erlauben Sie mir, ein wenig pedantisch zu sein.

Sie verstehen offensichtlich das Konzept von Client und Server, daher überrascht es mich, dass Sie schreiben: „Die Local AddressSpalte bezeichnet die Clientseite einer TCP-Verbindung und die Foreign AddressSpalte bezeichnet die Serverseite.“ Das ist falsch; die Local AddressSpalte bezeichnet dielokalSeite einer TCP-Verbindung und die Foreign AddressSpalte bezeichnet dieausländisch(oderFernbedienung) Seite. Mit anderen Worten Local Addressbezeichnet die Spalte den (TCP-)Socket, den ein Prozessauf deinem Computerverwendet (also einen Sockel, den Ihr Computerbesitzt), und die Foreign AddressSpalte bezeichnet den Socket, mit dem der lokale Socket verbunden ist. Wie Sie anscheinend verstehen, können Prozesse auf Ihrem Computer als Server fungieren, sodass lokale Sockets Server-Sockets sein können – und dann würde der entsprechende Client-Socket als „fremd“ aufgeführt.

Die Dinge beginnen verwirrend zu werden, wenn ein Client-Prozess auf Ihrem Computer eine Verbindung zu einem Server-Prozess auf Ihrem Computer herstellt. Diese eine Verbindung stellt nun zwei lokale Sockets dar – und netstatmeldet für jeden eine Zeile; eine zeigt den Client als lokal und den Server als fremd an (obwohl es sich tatsächlich um einen lokalen Socket handelt) und eine umgekehrt.

Ihre Situation ist nur ein wenig verwirrender. Ihr Jetty-Server (Prozess 5808) erstellt natürlich Sockets und akzeptiert Verbindungen darauf – das ist die Aufgabe von Servern. Aber er erstellt viele Sockets gleichzeitig. (Notwendigerweise befinden sie sich auf unterschiedlichen Portnummern; das Betriebssystem lässt nicht zu, dass mehrere Sockets mit demselben Protokoll und derselben Portnummer nebeneinander existieren.) Und er scheint zufällige (vom Betriebssystem zugewiesene) Portnummern zu verwenden. Wie Sie beispielsweise angemerkt haben, lauscht er auf Port 55484. Ich kenne mich mit Jetty nicht aus, also weiß ich nicht, ob das normal ist.

Wenn Sie Ihre netstatAusgabe genau untersuchen, werden Sie feststellen, dass der lokale Prozess 184 über einen Socket auf Port 8081 eine Verbindung zum Prozess 5808/Port 55482 hat.

Was ich wirklich seltsam finde, ist, dass Prozess 5808 verbunden istzu sich selbstauf mehreren dieser Sockets. Sie haben also mehrere TCP-Verbindungen, bei denen beide Sockets gehalten werden, nicht nur auf demselben Host, sondernim gleichen Verfahren. Ich glaube nicht, dass wir mit Sicherheit sagen können, welches Ende der Client und welches der Server ist. Ich würde sogar vermuten, dass die niedrigere Portnummer eher der Server ist, aber das ist nur eine Vermutung.

Antwort3

Das ist keine ungewöhnliche Situation. 127.0.0.1ist eine gültige IP-Adresse, auf die Ihr Programm hört. Das Programm kann diese Adresse hören. Das Programm kann sich auch mit dieser Adresse verbinden. Dies entspricht der Client-Server-Architektur. Sie haben einen Client und einen Server. Sie können sich auf verschiedenen Computern befinden, aber gleichzeitig können sie beide auf einem Computer sein.

Wenn Sie beispielsweise eine Google-Website verwenden, ist Ihr Computer der Client und der Webserver von Google der Server. Es besteht eine Verbindung zwischen Ihrem Computer und dem Server von Google.

Sie können Ihren eigenen Webserver auf Ihrem Computer laufen lassen und auf der Schnittstelle lauschen 127.0.0.1. Öffnen Sie Ihren Browser und geben Sie 127.0.0.1- ein. Als Ergebnis wird Ihnen die Webseite Ihres Webservers angezeigt. In diesem Fall netstatwird dasselbe angezeigt.

Zur Beantwortung Ihrer Frage:

Aus dieser Ausgabe scheint hervorzugehen, dass derselbe Port sowohl als Client als auch als Server fungiert.

Nein. Ein Port ist Client, ein anderer ist Server. Beachten Sie - esnichtsagen

 TCP    127.0.0.1:55486        127.0.0.1:55486        ESTABLISHED     5808

Es sagt:

 TCP    127.0.0.1:55486        127.0.0.1:55487        ESTABLISHED     5808
 TCP    127.0.0.1:55487        127.0.0.1:55486        ESTABLISHED     5808

Was durchaus Sinn macht.

verwandte Informationen