Warum nur Port 80 für Webdienste?


54

Warum ist es nicht sinnvoll, mehr als einen TCP / IP-Port für http zu reservieren? Ist es nicht irgendwie intuitiv zu glauben, dass die Serverleistung irgendwie gesteigert werden könnte, obwohl dies zugegebenermaßen naiv ist?


17
Sie sind absolut richtig. Ich habe den Standardport meines Webservers von 80 auf 90,91,92 und 93 geändert. Die Belastung des Servers ist drastisch gesunken.
David Houde

17
... vielleicht weil keine Clients mehr den Server finden können?
Marcos Gonzalez

5
80 ist nur der Port, der für http verwendet wird. Wenn Sie "something.com" sagen; (oder sogar "something.com") der Browser vervollständigt es, um eine Anfrage an "something.com:80" zu sein; (Auf Port 80, da dies der bekannte Standard-HTTP-Port ist). Dasselbe gilt für https auf 443. Wenn Sie sich dazu entschließen, es zu ändern, müssen Sie es in der URL sagen: "myserver.com:1280"; Andernfalls versucht der Browser, Port 80 aufzusuchen, und findet ihn nicht. Eine Liste finden Sie auf Wikipedia
Olivier Dulac

6
Entschuldigung Marcos, das war ein schlechter Humor. Ich war noch nie gut darin.
David Houde

3
@ DavidHoude, Zeit für eine Auffrischung der Emoticons für Sie. :-) cs.cmu.edu/~sef/sefSmiley.htm
generalnetworkerror

Antworten:


70

Port 80 ist ein bekannter Port, was bedeutet, dass er als der Ort bekannt ist, an dem sich normalerweise HTTP-Server befinden. Sie finden es im HTTP / 1.1-RFC dokumentiert .

Ein Standard ist gerade deshalb nützlich, weil Sie ihn nicht mit der URI in Ihren Webbrowser eingeben müssen. Wenn Sie einen HTTP-Server (oder einen beliebigen Dienst) an einem nicht standardmäßigen Port ausführen, erzwingen Sie, dass sich der Client merkt, welche beliebige 16-Bit-Nummer Sie ausgewählt haben, und geben Sie sie ein.

Zusätzlich zu dieser Unfreundlichkeit gibt es keinen Leistungsvorteil: Ein Port ist nur ein Teil des (dst ip:port, src ip:port)4-Tupels, das eine TCP-Verbindung eindeutig identifiziert. Wenn zwei Verbindungen a gemeinsam nutzen dst ip:port, bedeutet dies nicht, dass sie eine Systemressource gemeinsam nutzen. Sie können sich in verschiedenen Threads oder in verschiedenen Prozessen befinden.

Wenn Sie nun über logisch unterschiedliche Dienste verfügen, die beide zufällig HTTP verwenden, können Sie diese problemlos auf verschiedenen Ports ausführen. Das macht die URI nur ein bisschen hässlicher.


7
Das ist es! Port 80 ist keine Ressource! Es ist nur ein Teil eines Tupels! Danke, dass du es so deutlich ausdrückst.
Marcos Gonzalez

2
Es ist auch nichts wert, dass selbst für verschiedene Dienste die eigentliche HTTP-Verbindung in der Regel über Port 80 von einem systemweiten Treiber empfangen wird, der eine erste Protokollanalyse durchführt und diese dann an den richtigen Dienst übergibt, wodurch völlig unterschiedliche Dienste in verschiedenen Prozessen möglich werden Teilen Sie den gleichen Port.
Monstieur

1
Benutzerfreundliche Antwort von Useless
Deckard

26

Der Server verschwendet keine Ressourcen, indem er Verbindungen in einem oder mehreren Ports verarbeitet. Serverressourcen werden für die Verarbeitung von Verbindungen zugewiesen, und die Portnummer ist nur eine Möglichkeit, ein bestimmtes Programm mit einer bestimmten Verbindung zu verbinden.

Beispiel: Der HTTP-Server weiß, dass er Verbindungen abhört, die an Port 80 eingehen. Und der Server weiß, dass er jedes Mal, wenn er eine Anfrage an Port 80 erhält, diese an den HTTP-Server weiterleitet. Danach kümmert sich der http-Server um die Kommunikation und verbraucht dann Ressourcen.


8
Ich würde zu dieser Antwort hinzufügen, dass Port 80 nicht von einem Benutzer belegt wird, der seine Anfrage an ihn sendet. Aus diesem Grund ist es für die Skalierbarkeit kein Engpass, nur Port 80 (oder einen beliebigen bekannten Port für das eingehende Protokoll, das Sie verwenden) zu verwenden.
Craig Sirkin

1
Genau das habe ich nicht verstanden. Selbst 100.000 Benutzer, die gleichzeitig eine Verbindung zu www.example.com:80 herstellen, werden Port 80 nicht belegen. Vielen Dank für die Klarstellung. Ich finde @Useless 'Informationen unten auch sehr aufschlussreich.
Marcos Gonzalez

Einige Webserver-Software haben Beschränkungen pro Instanzen und / oder Prozess. Manchmal kann es eine gute Idee sein, mehrere Instanzen auszuführen, aber dazu ist auf demselben Computer ein anderer Überwachungsport erforderlich, wobei der erste (TCP80 / 443) Verbindungen zur ersten Instanz weiterleitet.
Remi Letourneau

22

Sie scheinen sich Ports als etwas Reales vorzustellen. Es ist nur eine vorzeichenlose 16-Bit-Zahl (0-65535), die eine Bezeichnung im Header eines IP-Pakets ist. Dies hilft beim Multiplexen auf Anwendungsebene. Wenn ein eingehendes Paket auf einer Netzwerkkarte eintrifft, erhält das Betriebssystem eine Benachrichtigung. Es überprüft, an welchen Port das eingehende Paket geleitet wurde, und leitet das Paket dann nur an die richtige Anwendung weiter. Wenn Sie Ihren Webserver (nginx) ausführen, um Port 80 abzuhören, werden nur bei nginx Pakete an Port 80 gesendet.

Wenn ein Client (IP: 100.200.100.200) eine HTTP-Anforderung an den Server (55.55.55.55) sendet, sendet er diese Anforderung an den Zielport 80 auf dem Server (55.55.55.55:80), der Quellport wird jedoch vom zufällig ausgewählt Betriebssystem für den Webbrowser (so etwas wie 45490). Die HTTP-Antwort vom Webserver kommt dann von (55.55.55.55:80), wird aber an das Ziel (Ihre IP) gesendet (100.200.100.200:45490). Das Betriebssystem Ihres Computers weiß, dass eingehende Pakete an Port 45490 (von 55.55.55.55:80) an den Webbrowser weitergeleitet werden müssen, der die Anforderung gestellt hat. Da jede eindeutige Verbindung zu einer Website vom Client einen eindeutigen zufälligen Port erhält, können mehrere Webbrowser eine Verbindung zu derselben Website herstellen, und wenn eine Seite in einem Browser neu geladen wird, sind die anderen Fenster nicht betroffen.

Für jedes IP-Paket stehen im Header sowohl die Quell- als auch die Ziel-IP-Adresse und der Port zur Verfügung. Das Betriebssystem und die Anwendung (Webbrowser oder Webserver) können beide verwenden, um die entsprechende Aktion für die Verarbeitung des Pakets zu ermitteln.


2
+2 Stimmen, wenn ich könnte.
Generalnetworkerror

13

Port 80 und 443 sind die "Standard" -Ports für HTTP / HTTPS

Dies bedeutet, dass Sie den Port ( http://www.example.com:80 , https://www.example.com:443 ) nicht angeben müssen, wenn Sie einen Webbrowser verwenden.

Wenn ein Webserver andere Ports überwachen soll, müssen die Benutzer den Port manuell zur URL hinzufügen oder er muss in einem Link zu diesem bestimmten Port codiert sein.

Außerdem lassen die meisten Proxies und Firewalls keine Verbindungen zu diesen Ports zu, es sei denn, sie sind speziell dafür konfiguriert Nicht-TCP80 / 443-Verbindungsversuche blockieren)

All dies schränkt die Möglichkeiten auf TCP / IP-Ebene ein

Eine Möglichkeit, die Leistung zu steigern, besteht darin, dass ein Lastenausgleichsgerät / -dienst TCP80 / 443 überwacht und die Anforderung dann an Server an verschiedenen Ports und / oder IP-Adressen (Local Balancing) oder sogar an verschiedenen Remotestandorten (Global Balancing) umleitet. Aber das ist insgesamt ein anderes Thema


Vielen Dank, dass Sie mich mit dem Konzept des "Load Balancing" bekannt gemacht haben.
Marcos Gonzalez

1
Wenn Sie einige "Pseudo" -Praktiken und Ideen zu Load-Balancing-Konzepten haben möchten, bietet F5 kostenlose Online-Schulungen unter university.f5.com. Die Registrierung ist kostenlos und ermöglicht Ihnen den Zugriff auf LTM (Local Traffic Manager - ihren lokalen Balancer) ) Training, in dem Sie sehen können, wie es aussieht, und einige Lastausgleichskonzepte lernen (z. B. Real IP, Virtual IP, Pools, Integritätsprüfung usw.)
Remi Letourneau

Netter Ratschlag!
Marcos Gonzalez

9

Durch das Hinzufügen zusätzlicher Ports wird keine zusätzliche Bandbreite oder ähnliches hinzugefügt. Ein Port ist eher eine Bezeichnung als eine Pipe . Er kann so breit werden, wie Sie es benötigen, ohne langsamer zu werden, da die Pipe voll ist.

Wenn ein Server zu viele Anforderungen empfängt, wird der Server natürlich langsamer. Dies ist jedoch nicht die Art von Problem, das durch Hinzufügen einer weiteren Portnummer behoben werden kann.


s / label then / label than / - Ich würde bearbeiten, aber es scheint, dass nur ein Zeichen keine akzeptable Bearbeitung ist.
Paul Gear

7

Wenn Sie zufällige Ports verwenden, müsste der Benutzer bei jedem Besuch Ihrer Site die richtigen Portnummern hinzufügen. dh www.example.com:80; www.example.com:81; www.example.com:82 etc

Es würde die Leistung nicht erhöhen, wenn mehr Ports verwendet würden. Die Quellports sind für jede Verbindung ein kurzlebiger Port und damit sowieso unterschiedlich


7

Jede TCP / IP-Verbindung verfügt über einen sourceIP: sourcePort und einen destinationIP: destinationPort.

Wenn Sie eine Verbindung herstellen, verwenden Sie immer 80 als Zielport (was sinnvoll ist, da der Server nur Port 80 auf HTTP und nicht auf mehrere Ports überwachen muss). Der Trick ist, dass der SourcePort für jede Verbindung dynamisch ist.

Beispiel:

Benutzer1: 1.1.1.1:29999 bis 2.2.2.2:80

Benutzer2: 1.1.1.2:45333 bis 2.2.2.2:80


2

Verwechseln Sie einen anderen Port nicht mit einer anderen physischen Verbindung oder einer höheren Netzwerkbandbreite oder Server-Verarbeitungsleistung. Was der Server erhält, sind TCP- oder UDP-Pakete, die zufällig eine Portnummer als Teil der Adresse haben. Sie kommen immer noch über dieselben Kabel, durchlaufen dieselbe Netzwerkschnittstellenhardware und denselben Treiber und so weiter.

Wenn Sie zwei Pakete an einen Server senden, ist es in Bezug auf die Ressourcen, die der Server für die Verarbeitung dieser beiden Pakete benötigt, unerheblich, ob einer der beiden unterschiedliche oder die gleichen Portnummern zugeordnet sind, die interne Verarbeitung nahezu identisch sein.

Daher ist dies keine Methode zur Leistungssteigerung.

Die einzige mögliche Ausnahme besteht darin, dass Sie zwei verschiedene Dämonen (oder zwei Kopien derselben), die gleichzeitig ausgeführt werden, den beiden verschiedenen Portnummern zuordnen und jede dieser Dämonen mit der Last extrem schlecht skalieren würde. Welches ist in der Regel nicht der Fall.


1

Wie Remi bereits erwähnte, sind Port 80 und 443 die "Standard" -Ports für HTTP / HTTPS.

Die meisten Netzwerke und Firewalls blockieren den Datenverkehr über diese Ports nicht. Die Verwendung dieser Ports ist daher einfacher, da Sie sich die meiste Zeit nicht darum kümmern müssen, dass Firewalls Ihren Dienst blockieren. Andernfalls müssen Sie möglicherweise die Firewall-Regeln neu konfigurieren und die entsprechenden Genehmigungen von Compliance / Sicherheit einholen.


1
Amen, Websites, die nicht standardmäßige Ports verwenden, gehören zum Alltag eines jeden Sicherheitsadministrators. Ein Benutzer in Ihrem Netzwerk muss eine Website mit seltsamem Port = Proxy-Wechsel, FW-Wechsel, Sicherheitsüberprüfung usw. verwenden.
wintermute000

0

Wie alle anderen hier bereits gesagt haben, ist es grundsätzlich sinnlos, einen Webserver an einem anderen Port als Port 80 zu hosten, es sei denn, Sie hosten ihn von zu Hause aus. Viele ISPs drosseln die ausgehenden TCP / UDP-Ports 80 und 443 ( IANA definiert als HTTP bzw. HTTPS ), und in diesem Fall wird durch die Verwendung dieser Ports die Ladegeschwindigkeit des Standorts usw. beeinträchtigt. IANA hat jedoch 3 HTTP-ALT- Ports für zugewiesen sowohl TCP als auch UDP. Dies sind: 591, 8008 und 8080. Die Verwendung dieser Ports ist ebenfalls akzeptabel, aber Sie werden das Leben von Serveradministratoren zur Hölle machen.

Quelle der Portnummern: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.