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?
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?
Antworten:
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.
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.
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.
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
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.
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
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
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.
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.
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