2013-06-06 8 views
20

Wie behandelt ein Webserver mehrere eingehende Anfragen gleichzeitig an einem einzigen Port (80)?Wie kann ein Webserver mehrere eingehende Anfragen eines Benutzers gleichzeitig an einem einzigen Port (80) verarbeiten?

Beispiel: Zur gleichen Zeit möchten 300k Benutzer ein Bild von www.abcdef.com sehen, das IP 10.10.100.100 und Port 80 zugewiesen ist. Wie kann also www.abcdef.com die Last dieser ankommenden Benutzer handhaben?

Kann ein Server (der mit IP 10.10.100.100 zugewiesen ist) diese große Menge an eingehenden Benutzern verwalten? Wenn nicht, wie kann dann einer IP-Adresse mehr als ein Server zugewiesen werden, um diese Belastung zu bewältigen?

Antwort

10

Von tcpipguide

Diese Identifikation von Verbindungen sowohl Client- als auch Server-Sockets verwenden ist, was die Flexibilität in so dass mehrere Verbindungen zwischen Geräten liefert, die wir für über das Internet selbstverständlich. Zum Beispiel müssen ausgelastete Anwendungsserverprozesse (wie Webserver) in der Lage sein, Verbindungen von mehr als einem Client zu handhaben, oder das World Wide Web wäre ziemlich unbrauchbar. Da die Verbindung sowohl über den Client-Socket als auch über den Server identifiziert wird, ist dies kein Problem. Zur gleichen Zeit, zu der der Web-Server die oben erwähnte Verbindung aufrechterhält, kann er leicht eine andere Verbindung haben, nämlich den Port 2.199 unter der IP-Adresse 219.31.0.44. Dies wird durch die Verbindungskennung dargestellt wird:

(41.199.222.3:80, 219.31.0.44:2199). 

In der Tat, wir mehrere Verbindungen vom gleichen Client auf demselben Server haben können. Jedem Clientprozess wird eine andere ephemere Portnummer zugewiesen. Selbst wenn alle versuchen, auf denselben Serverprozess zuzugreifen (z. B. den Webserverprozess bei 41.199.222.3:80), haben sie alle einen anderen Client-Socket und stellen eindeutig dar Verbindungen. Auf diese Weise können Sie mehrere gleichzeitige Anforderungen von Ihrem Computer an dieselbe Website stellen.

Auch hier verfolgt TCP jede dieser Verbindungen unabhängig voneinander, so dass jede Verbindung die anderen nicht kennt. TCP kann Hunderte oder sogar Tausende von gleichzeitigen Verbindungen verarbeiten. Die einzige Grenze ist die Kapazität des Computers, auf dem TCP ausgeführt wird, und die Bandbreite der physischen Verbindungen zu ihm - je mehr Verbindungen gleichzeitig ausgeführt werden, desto mehr Ressourcen müssen sich teilen.

+3

Schlechte Qualität Zitat, total verwirrt zwischen Sockets und Ports. Verbindungen werden durch IP-Adresse und * Ports identifiziert, * nicht durch Sockets. – EJP

9

Ein Port ist nur eine magische Zahl. Es entspricht nicht einem Stück Hardware. Der Server öffnet einen Socket, der an Port 80 "abhört" und neue Verbindungen von diesem Socket akzeptiert. Jede neue Verbindung wird durch einen neuen Socket dargestellt, dessen lokaler Port ebenfalls Port 80 ist, dessen remote IP-Port jedoch dem Client entspricht, der verbunden ist. Sie werden also nicht durcheinander gebracht. Sie benötigen daher am Serverende nicht mehrere IP-Adressen oder gar mehrere Ports.

+0

Dies ist auch eine gute Antwort in Kombination mit der ersten Antwort. –

+0

@ManhoharReddyPoreddy Besser, in dem es zumindest nicht die Verwirrung habe, die ich erwähnte. – EJP

+0

Einverstanden, aber es hat auch mehr Informationen, die relevant sind, wie "Die einzige Grenze ist die Kapazität des Computers, auf dem TCP läuft, und die Bandbreite der physischen Verbindungen dazu", also würde ich jemanden vorschlagen, Ihre Antwort zu machen 1. und dann die erste Antwort als 2.. –

0

Antwort ist: virtuelle Hosts in HTTP-Header ist der Name der Domäne, so dass die Web-Server wissen, welche

+1

Nichts in der Frage über mehrere Domänen. – EJP

2

TCP Kümmert sich um Client-Identifikation
Wie gesagt bin, TCP-Client-Dateien ausführen oder senden kümmert sich um die Client-Identifikation, und der Server sieht nur einen "Socket" pro Client.
Angenommen, ein Server bei 10.10.100.100 überwacht Port 80 auf eingehende TCP-Verbindungen (HTTP wird über TCP erstellt). Der Client-Browser (10.9.8.7) verbindet sich über den Client-Port 27143 mit dem Server. Der Server sieht: "Der Client 10.9.8.7:27143 möchte eine Verbindung herstellen, akzeptieren Sie?". Die Server-App akzeptiert und erhält ein "Handle" (ein Socket), um die gesamte Kommunikation mit diesem Client zu verwalten, und das Handle sendet immer Pakete mit den richtigen TCP-Headern an 10.9.8.7:27143.

Pakete sind nie gleichzeitige
nun physisch, da man in der Regel nur (oder zwei) Verbindungen auf den Server Internet-Anbindung, so Pakete nur in der angegebenen Reihenfolge ankommen können. Die Frage wird: Was ist der maximale Durchsatz durch die Glasfaser und wie viele Antworten kann der Server im Gegenzug berechnen und senden? Anders als die aufgewendete CPU-Zeit oder Speicherengpässe beim Antworten auf Anforderungen muss der Server auch einige Ressourcen am Leben erhalten (mindestens 1 aktiver Socket pro Client), bis die Kommunikation beendet ist, und daher RAM verbrauchen. Der Durchsatz wird durch einige Optimierungen erreicht (nicht gegenseitig ausschließend): nicht blockierende Sockets (um Pipeline-/Socket-Latenzen zu vermeiden), Multi-Threading (um mehr CPU-Kerne/Threads zu verwenden).

Verbesserung Anfrage Durchsatz weiter: Lastausgleich
Und schließlich der Server auf dem „Front-Side“ von Websites im Allgemeinen nicht die ganze Arbeit selbst tun (vor allem der komplizierteren Sachen, wie Datenbankabfragen, Berechnungen etc.) und Aufgaben verschieben oder sogar HTTP-Anfragen an verteilte Server weiterleiten, während sie weiterhin so viele Anfragen pro Sekunde wie möglich bearbeiten (zB Weiterleitung). Die Verteilung der Arbeit über mehrere Server heißt load-balancing.

Verwandte Themen