Was ist der Unterschied und die Beziehung zwischen einer Prozess-ID und einer Portnummer?

4726
user570593

Prozess ist ein Programm in Ausführung. ZB Firefox. Ich verstehe die Beziehung und die Unterschiede zwischen den Begriffen "Prozess" und "Ports" nicht.

Wenn ich netstat -no -p -TCPauf cmd laufe, kann ich sehen, dass jedem Prozess mehrere Portnummern zugeordnet sind (siehe unten). Die Beziehung zwischen Ports und Prozessen ist mir jedoch unklar.

screenshot: cmd output of "netstat -no -p -TCP"

4
Entspricht der Differenz zwischen einer Mitarbeiter-ID und einer Büronummer. chrylis vor 6 Jahren 8
Als Antwort auf MaQleod gemäß https://en.wikipedia.org/wiki/Network_socket ist ein Socket durch mindestens einen lokalen Socket und einen Port gekennzeichnet. barlop vor 6 Jahren 0
Übrigens, der Text in Ihrem CMD-Fenster sieht gequetscht aus. Ich sehe dies auf vielen PCs, die von 7 oder 8 auf Windows 10 aktualisiert haben. Sie können dies beheben, indem Sie die Schriftgröße ändern, speichern und dann wieder zurücksetzen. wjandrea vor 6 Jahren 0
@wjandrea Ich stelle fest, dass es bei der Auswahl des Rasters zusammengedrückt wird. Mit Raster erhalten Sie dann einige lustige Bemaßungsoptionen und Sie können sogar eine Vorschau sehen und lustig aussehen. Wenn Sie jedoch die Option "Kurier neu" wählen, erhalten Sie keine lächerlichen Bemaßungsoptionen, und mit ein paar geringfügigen Spielereien können Sie sicherstellen, dass die Einstellung richtig ist. barlop vor 6 Jahren 0

5 Antworten auf die Frage

32
Andrew Leach

Um die Frage direkt zu beantworten: Es besteht keine Verbindung zwischen der Prozess-ID und der Portnummer. Sie zählen ganz andere Dinge auf.

Die PID identifiziert einen Prozess (z. B. eine Firefox-Sitzung: Jede Registerkarte kann als anderer Prozess ausgeführt werden), und die Portnummer gibt an, welchen Port der Prozess verwendet, um zu kommunizieren. Bestimmte Portnummern haben übliche Verwendung: 80 wird im Allgemeinen für HTTP und 443 für HTTPS verwendet. Ein Prozess kann jedoch eine PID-Nummer erhalten, je nachdem, wann er gestartet wird.

Wie Sie sehen, werden Ihre lokalen Portnummern sequentiell verwendet und beziehen sich weder auf die Zielportnummer noch auf die PID des Prozesses, der sie verwendet.

Metaphorisch, wenn auch nicht wörtlich, handelt es sich um * Indizes * in verschiedenen Arrays. Pieter Geerkens vor 6 Jahren 8
Technisch gesehen ist "init" heutzutage die PID 1. Aber darüber hinaus sollte es keine Möglichkeit geben, zu wissen, welche PID ein Prozess erhalten wird. Kat vor 6 Jahren 0
Ich würde den letzten Satz als "Ihre _source_ Portnummern werden nacheinander verwendet" angeben. Es scheint, dass dies eine Workstation ist, die keine Ports überwacht. Für andere, die nach Antworten suchen und von Servern sprechen, ist dies eine wichtige Unterscheidung. Monty Harder vor 6 Jahren 0
"* Ihre lokalen Portnummern werden sequentiell verwendet *" - es sieht für mich nicht besonders sequentiell aus, es gibt einige Lücken und wir wissen auch nicht, zu welchen Zeiten die Verbindungen geöffnet wurden. Sie sind in diesem Screenshot nur in aufsteigender Reihenfolge aufgeführt. Bergi vor 6 Jahren 0
Der Vollständigkeit halber sei darauf hingewiesen, dass viele Prozesse ** keine ** Ports verwenden werden (obwohl diese per Definition nicht durch einen `netstat`-Befehl aufgeführt werden). TripeHound vor 6 Jahren 0
@Bergi Ich vermute mal, die Lücken zeigen Verbindungen an, die * irgendwann * aktiv waren, aber nicht mehr sind. Andrew Leach vor 6 Jahren 0
Port-Nummern sind nicht sequentiell. Ein Prozess kann jeden beliebigen Port öffnen. Ich habe zum Beispiel ein Programm, das Port 11000 öffnet. Es ist egal, ob Ports mit einer niedrigeren Nummer verfügbar sind, und versucht nicht einmal, sie zu öffnen. Carey Gregory vor 6 Jahren 0
12
Mokubai

Die PID wird nur angezeigt, damit Sie den spezifischen Prozess identifizieren können, der die Kommunikation durchführt, und hat keinen Bezug zur Portnummer.

Wenn Sie mehrere Kopien eines Programms ausgeführt haben und alle über das Netzwerk kommunizieren, reicht die Anzeige des Programmnamens nicht aus, um eindeutig zu erkennen, welcher Port zu welcher Kopie des Programms gehört.

Wenn Sie eine bestimmte Verbindung abbrechen möchten, jedoch nicht alle Kopien des Programms, müssen Sie die PID und nicht den Programmnamen kennen.

Wenn Sie den Prozess einfach als "Kopie eines Programms" definieren, ist dies keine klare Definition. Es gibt einen großen Unterschied zwischen einem Programm, das in zwei verschiedene Verzeichnisse kopiert wurde, oder einer Programmdatei, die an einer anderen Stelle oder mit einem anderen Namen kopiert wurde. Oder einer Instanz eines Programms im RAM. barlop vor 6 Jahren 0
9
TOOGAM

Verarbeiten

Was ist ein Prozess?

Ein Prozess ist im Grunde eine Kopie eines Programms. Wenn Sie also ein Programm wie Notepad mehrmals ausführen, erhält jede bestimmte Zeit einen eigenen Prozess. Ein Prozess verwendet Ressourcen, z. B. den verfügbaren RAM auf Ihrem Computer. Wenn Sie sich den Task-Manager ansehen und sehen, dass das Programm mehrmals ausgeführt wird, kann jedes Vorkommen des Programms ein anderer Prozess sein.

Wie werden Prozesse zugeordnet?

Die PID-Nummern ("Prozess-ID") werden vom Betriebssystem jedes Mal vergeben, wenn ein neuer Prozess durchgeführt wird.

Wofür sind Prozesse gut?

Mit der Prozess-ID (die eine genaue, spezifische Kopie eines laufenden Programms identifiziert) können Sie feststellen, von welchem ​​Softwareprogramm dieser Prozess eine Instanz ist. Sie können dies mithilfe von TaskList (über die Befehlszeile), WMIC PROCESS GET / FORMAT: LIST (über die Befehlszeile) oder über den Task-Manager ausführen. In einigen neueren Versionen von Microsoft Windows müssen Sie möglicherweise im Task-Manager auf die Registerkarte "Details" gehen. Wenn es keine Spalte für die Anzeige der PID gibt, können Sie sie hinzufügen. (Zumindest in Windows 10 klicken Sie mit der rechten Maustaste auf einen Spaltennamen und können dann sichtbare Spalten auswählen. Da der Arbeitsspeicher verfügbar ist, hatten ältere Windows-Versionen hierfür eine Menüoption.)

Ein weiterer Befehl, den Sie möglicherweise als nützlich erachten, ist netstat. Ich sehe, du benutzt netstat. Versuchen Sie, den Parameter "-b" hinzuzufügen. (Diese Option ist ziemlich spezifisch für Microsoft Windows, das Sie vermutlich auf der Grundlage von C: \ Users \ User> in Ihrer Eingabeaufforderung verwenden.) Netstat versucht, die PID zu verwenden, um den Namen der ausführbaren Datei zu ermitteln. und drucken Sie das in der nächsten Zeile.

All dies hat nichts mit der Portnummer zu tun.

Portnummern

Was ist eine Portnummer?

Eine Portnummer wird als Teil einer Netzwerkverbindung verwendet. Nicht die gesamte Netzwerkkommunikation verwendet Portnummern. Beispielsweise verwenden ICMP, das von TraceRoute (unter Microsoft Windows "TRACERT" genannt) und der Microsoft Windows-Befehl "ping" verwendet wird, keine Portnummern. Die gebräuchlichsten Protokolle sind UDP und TCP. (Vielleicht ist SCTP das am weitesten verbreitete?) Viele Protokolle, einschließlich HTTP (S) und SMTP (für E-Mail), verwenden TCP, daher werden Portnummern verwendet.

Wofür sind Portnummern gut?

Es ist möglich, mehrere TCP-Verbindungen zwischen denselben Computern herzustellen, und Portnummern werden zur Identifizierung dieser Verbindungen verwendet. Wenn Ihr E-Mail-Programm beispielsweise E-Mail erhält, kann die Netzwerkverbindung zwischen [LOKALER PORT 52534, REMOTE / FOREIGN PORT 25] bestehen, während Ihr Webbrowser eine Verbindung mit [LOKALER PORT 54499, REMOTE / FOREIGN herstellen kann PORT 443]. Wenn der Remote-Computer antwortet und der eingehende Datenverkehr als [LOCAL PORT 54499, REMOTE / FOREIGN PORT 443] definiert ist, erkennt Ihr Computer auf diese Weise, dass der Datenverkehr nicht für Ihr lokales E-Mail-Programm bestimmt ist. Tatsächlich kann Ihr Webbrowser mehrere TCP-Verbindungen herstellen, um beispielsweise mehrere Grafiken gleichzeitig herunterzuladen. Wenn Ihr Computer grafische Daten empfängt, können die Portnummern Ihrem Webbrowser helfen, zu wissen, für welche Verbindung die Daten bestimmt sind.

(Hinweis: Die eckigen Klammern sind nur eine Notation, die ich mir vorgenommen habe, um den Absatz etwas lesbarer zu machen. In der Ausgabe von Netstat werden die Portnummern nach dem Doppelpunkt angezeigt. Ich ziehe es normalerweise vor, den Begriff "fremd" zu verwenden Beschreiben Sie die Portnummern, aber ich habe es in diesem Fall getan, weil dies der von netstat verwendete Begriff ist.)

Wie werden Portnummern vergeben?

Im Allgemeinen teilt die meiste Software dem "Netzwerkstack" lediglich mit, dass sie eine Netzwerkverbindung herstellen möchte. In modernen Betriebssystemen ist der "Netzwerkstapel" als Teil des Betriebssystems integriert (obwohl in den Tagen von Windows 3.1 ein Netzwerkstapel während der Installation eines Softwareprogramms wie Microsoft Internet Explorer oder Trumpet Winsock hinzugefügt wurde). . Das Softwareprogramm teilt dem Netzwerkstapel normalerweise Folgendes mit: "Erstellen Sie eine neue TCP-Verbindung zum Remote-Port 443". Der Netzwerkstack bestimmt, welche Quellportnummer er verwenden möchte.

Zusammenfassung

Prozesse und Portnummern sind sehr unterschiedlich. Ich stimme den meisten oder allen Informationen in den anderen Antworten zu. (Allerdings habe ich hier meine eigene Antwort hinzugefügt, weil ich ein bisschen genauer dachte, wie die Zuordnung der Zahlen von vornherein dazu beitragen könnte, die Unterscheidung etwas deutlicher zu machen.)

Diese Antwort ist irgendwie nett, aber ich denke, es wäre besser zu sagen, wie Software eine bestimmte Nummer erhält, obwohl sie das Protokoll mit der zugewiesenen Portnummer verwendet, aber trotzdem +1 DreadfulWeather vor 6 Jahren 0
@DreadfulWeather: Erstens, worauf bezieht sich das Wort "sie"? Und zweitens tut meine Antwort nicht genau das, z. B. "Wie werden Portnummern vergeben?" Sektion. Ich habe Ihren Kommentar viermal gelesen, um zu sehen, ob ich verstehen könnte, was Sie zu kommunizieren versuchen, aber ich kann Ihren Kommentar leider nicht verstehen. TOOGAM vor 6 Jahren 0
2
Arthur

Etwas vereinfacht:

Die PID ist die Nummer, die intern in Ihrem Computer verwendet wird, um sich auf einen bestimmten Prozess zu beziehen. Ein Prozessor kann jeweils nur eine Aufgabe ausführen, hat jedoch mehrere Aufgaben zu erledigen. Er wechselt also zwischen verschiedenen Prozessen. Die PID ist das Kennzeichen, das der Prozessor zur Identifizierung der einzelnen Prozesse verwendet.

Die Portnummer ist ein Tag für alle Netzwerkkommunikationen. Wenn eine Antwort vom Netzwerk zurückgegeben wird, weiß der Router in Ihrem Heimnetzwerk, welcher Computer auf diese Antwort wartet, und wenn die Antwort beim Computer eingeht, weiß der Computer, auf welchen Prozess er wartet Botschaft.

Das Port-Tag stellt beispielsweise sicher, dass der Router bei der Anforderung dieser Seite von den Servern von Stackexchange die Standortdaten bei Ihrem Router ankommt und weiß, dass es sich um Ihren Computer handelt, und nicht das Smartphone oder ein anderes Gerät Ihres Bruders Sie. Und wenn sie bei Ihrem Computer ankommen, kann Ihr Computer feststellen, dass Firefox sie will und nicht Word.

2
Corrodias

Ein Prozess ist in den meisten Fällen ein laufendes Programm. Ein Programm wie Firefox kann eigentlich aus mehreren Prozessen bestehen, die zusammenarbeiten, aber für das Betriebssystem sind sie die grundlegende Arbeitseinheit: Jeder Prozess verfügt über ein Image (die ausführbare Datei), ein ausgeführtes Arbeitsverzeichnis, und ein Arbeitsverzeichnis (Ressourcenzuweisungen), Speicheradressraum, CPU- und E / A-Priorität usw. Wenn Sie notepad ausführen, wird ein Prozess mit notepad.exe gestartet, und es öffnet sich ein Fenster, mit dem Sie interagieren können.

Ein Port ist eine Ressource. Das Betriebssystem verfügt über eine bestimmte Anzahl verfügbarer Ports (65535), und ein Prozess kann ein Handle anfordern, um die ausschließliche Verwendung eines Ports zu erhalten. Ein Prozess kann Handles für eine beliebige Anzahl von nicht verwendeten Ports erhalten. Für die Netzwerkkommunikation ist ein Port erforderlich. Die für ausgehende Verbindungen ausgewählten Portnummern (wie der Browser, der eine Verbindung zu einem Webserver herstellt) sind im Wesentlichen willkürlich. Sie haben keine Bedeutung, um die Sie sich kümmern müssen.

Dies ist eine vereinfachte Übersicht alle, so nehmen Sie sich nicht als Super genau.