Wie können Websites mit hohem Datenverkehr mehr als 65535 TCP-Verbindungen bedienen?


29

Wenn die Anzahl der Ports, die ein Computer haben kann, begrenzt ist und ein Socket nur an eine nicht verwendete Portnummer gebunden werden kann, wie gehen Server mit extrem hohen Anforderungen (mehr als die maximale Portnummer) damit um? Ist es nur so, dass das System verteilt wird, dh viele Server auf vielen Maschinen?

Antworten:


55

Sie verstehen die Portnummern sehr stark falsch: Ein Server überwacht nur einen Port und kann eine große Anzahl offener Sockets von Clients haben, die eine Verbindung zu diesem einen Port herstellen.

Auf der TCP-Ebene muss das Tupel (Quell-IP, Quell-Port, Ziel-IP, Ziel-Port) für jede gleichzeitige Verbindung eindeutig sein. Dies bedeutet, dass ein einzelner Client nicht mehr als 65535 gleichzeitige Verbindungen zu einem Server öffnen kann. Ein Server kann aber (theoretisch) 65535 Verbindungen pro Client gleichzeitig bedienen .

In der Praxis ist der Server also nur dadurch begrenzt, wie viel CPU-Leistung, Speicher usw. Anforderungen bedienen müssen, nicht durch die Anzahl der TCP-Verbindungen zum Server.


Ich frage mich, wie sich NAT auf die Carrier-Klasse auswirkt
TheLQ

@TheLQ Ohne CGN kann jeder Client nicht mehr als 65535 Verbindungen zum selben Server öffnen. Kein Client sollte fast so viele Verbindungen zum selben Server benötigen. Mit CGN kann jede CGN nicht mehr als 65535 Verbindungen zu demselben Server öffnen. Diese müssen von allen Clients, die diese CGN verwenden, gemeinsam genutzt werden. Ob der CGN gleichzeitig 65535-Verbindungen zu einem Server und 65535-Verbindungen zu einem anderen Server öffnen kann, ist ein Implementierungsdetail, das zwischen verschiedenen CGN-Implementierungen variieren kann.
Kasperd

Das Limit kann erhöht werden, indem dem CGN mehr IP-Adressen hinzugefügt oder mehr CGNs bereitgestellt werden. Sie können aber auch nur einen Dual-Stack bereitstellen. Dann gehen Verbindungen zu Servern mit IPv6-Unterstützung nicht über das CGN, sodass sie keine wertvollen Portnummern benötigen.
Kasperd

14

Sie irren sich - die Einzigartigkeit des Sockels wird von vier Faktoren bestimmt:

  1. die lokale IP-Adresse
  2. die lokale Portnummer
  3. die entfernte IP-Adresse
  4. die Remote-Port-Nummer

Beim Anbieten von Netzwerkdiensten sind 1. und 2. in der Regel statisch (z. B. IP 10.0.0.1, Port 80). Wenn Sie jedoch nicht Tausende von Verbindungen von einem einzelnen Client (oder einem einzelnen NAT-Gateway) erwarten , werden Sie den Push nicht ausführen Grenzen für die möglichen Kombinationen von 3. und 4., bevor Ihnen die lokalen Ressourcen ausgehen.

Obwohl ein Client praktisch keinen Port verwendet, der bereits für eine Verbindung verwendet wird, um eine Verbindung zu einer anderen Ziel-IP-Adresse herzustellen, wird die Verarmung der Portnummer für nahezu jede Anwendung das geringste Problem sein - sei es auf dem Server oder Client-Seite.

Das Problem ist sehr realistisch, wenn NAT-Gateways (Router) Clients mit einer hohen Anzahl offener ausgehender Verbindungen (z. B. Torrents) bedienen. Dort wird die Portnummer ausgeblendet, nachdem der für NAT verfügbare Portpool geleert wurde. In diesem Fall kann das NAT-Gateway keine zusätzlichen Zuordnungen erstellen, wodurch Clients vom Internet abgeschnitten werden.


2

Die Frage war, wie mit großen (> 64k) Verbindungszahlen umgegangen werden soll. Die zwei häufigsten Methoden sind:

  • Hinzufügen weiterer Server, wodurch die Anzahl der src / dst-Adressen und der Portnummerntupel erhöht wird. Es gibt mehrere Möglichkeiten, die Last auf mehrere Server zu verteilen. DNS Round Robin ist eins; Da sind andere

  • Setzen Sie "Carrier-Grade-NAT" ein (was ein Freund meiner Meinung nach spöttisch und korrekt als "Crummier-Grade-NAT" bezeichnet). Dies ist im Wesentlichen ein NAT eines NAT. Dies hat sehr schlechte Auswirkungen auf Anwendungen, aber es ist das, was einige große Anbieter tun, wenn ihnen der IPv4-Speicherplatz und / oder die Portnummern ausgehen und / oder sie nicht auf IPv6 umsteigen möchten.


2
Wenn Sie mehr als den Titel lesen, werden Sie feststellen, dass es sich bei dieser Frage um die Erschöpfung von Ports handelt und das OP sich in Bezug auf die Funktionsweise geirrt hat. Wie genau fügt diese Antwort dem etwas Neues hinzu?
MDMarra

2
Das OP fragt ausdrücklich (und nicht nur in der Überschrift), wie Server extrem viele Anfragen haben. Abgesehen von der Verwirrung darüber, wie Steckdosen funktionieren, ist das eine berechtigte Frage.
User8162

1
Ausgezeichnete Arbeit, um die Frage mitten im Satz abzuschneiden. Der Rest des Satzes sagt: (more than the max port number).
MDMarra

2
Vielleicht haben Sie den Teil verpasst, in dem ich festgelegt habe, dass das OP die Buchsenmechanik nicht versteht. Ich bin der Meinung, dass das Überschreiten von 64k-Ports ein zulässiges Diskussionsthema ist. Es tut mir leid, wenn Sie nicht einverstanden sind, aber das WAR die Frage und das WAR, wofür ich ein paar Antworten gegeben habe. Sie haben gefragt, wie das reagiert. so geht das.
user8162

3
Das ist die halbe Frage. Die übergeordnete Frage - wie aus dem letzten Satz des OP hervorgeht - lautet, wie die 64-KB-Grenze überschritten werden kann.
user8162
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.