65536 +1 Verbindung auf einem System

35

Es gibt 65536 Ports für jedes System im Netzwerk, und jede Verbindung oder Send / Receive verwendet einen dieser Ports .

Meine Frage ist: Was passiert, wenn wir 65536 + 1 Verbindungen haben ?!

Ich weiß, dass es nicht auf normale Weise passiert, aber ich bin gespannt, wie Betriebssysteme damit umgehen.

Omid Golparvar
quelle
12
Die Verbindung würde abgelehnt. Aber Sie werden realistisch gesehen Probleme haben, lange bevor 65535 Verbindungen offen sind.
ChrisInEdmonton
1
@ChrisInEdmonton Nein. Wenn es sich um eine ausgehende Verbindung handelt, wird ein Bindefehler angezeigt, da kein lokaler Port zugewiesen werden kann. Wenn es sich um eine eingehende Verbindung handelt, gilt das Portlimit nicht.
user207421
Wenn die Verbindung nicht hergestellt werden kann, wird eine Verbindung abgelehnt. Wenn die Verbindung nicht hergestellt werden kann, tritt bei Ihrem Socket-Anruf ein Fehler auf. Ich werde dies nicht als Antwort geben, weil ich nicht sicher bin.
Jorge Aldo

Antworten:

61

Beachten Sie, dass ein System mehr als 65536 gleichzeitige Verbindungen verarbeiten kann, da diese nicht unbedingt jeweils einen separaten Port verwenden.

Eine TCP-Verbindung oder ein UDP-Fluss wird durch das 4-Tupel definiert:

(source IP address, source port, destination IP address, destination port)

Selbst wenn Sie einen Webserver mit nur einer IP-Adresse und ein einzelnes HTTP-Server-Softwarepaket haben, das nur Port 80 überwacht, können theoretisch 65536 Verbindungen pro Client-IP-Adresse verarbeitet werden, die eine Verbindung herstellen . Also 64Ki-Verbindungen von der Client-IP-Adresse 1 plus 64Ki-Verbindungen von der Client-IP-Adresse 2 usw.

Die Protokolle unterstützen also in erster Näherung 2 48 Verbindungen / Datenflüsse zu einem einzelnen TCP- oder UDP-Port an einer einzelnen IPv4-Adresse. Berücksichtigen Sie sowohl TCP und UDP als auch den IPv4-Adressraum und den kosmisch / komisch großen IPv6-Adressraum. Sie können feststellen, dass die Protokolle selbst wahrscheinlich nie die Ursache für die Beschränkung der Anzahl gleichzeitiger Verbindungen eines Hosts sind klar kommen.

Ebenso gibt es in den TCP- oder UDP-Protokollen nichts, was einen Client-Computer davon abhält, einen einzelnen Quellport an einer einzelnen IP-Adresse zu verwenden, um mehrere ausgehende Verbindungen zu verschiedenen Serveradressen und -ports herzustellen. Manchmal machen die Netzwerk-APIs eines bestimmten Betriebssystems dies möglicherweise nicht einfach, aber es ist wichtig, sich daran zu erinnern, dass beispielsweise die alte, ehrwürdige "[BSD] Sockets" -API nur eine API für TCP und UDP ist. TCP und UDP verfügen möglicherweise über Funktionen, die von der herkömmlichen Sockets-API nicht bereitgestellt werden.

Die Anzahl der gleichzeitigen TCP-Verbindungen oder UDP-Flows, die ein bestimmter Host verarbeiten kann, ist also nicht so sehr durch die Portnummern begrenzt, sondern durch die Systemressourcen wie RAM-Speicherplatz und CPU-Zeit, die erforderlich sind, um alle diese Verbindungen zu verfolgen und zu warten. Auch die implementierungsspezifischen Details eines Betriebssystems können künstliche Grenzen setzen. In der Unix-Philosophie "Alles ist eine Datei" gibt es beispielsweise möglicherweise einen Dateideskriptor für jede TCP-Verbindung oder jeden UDP-Fluss. Wenn Ihr Unix-Kernel eine Beschränkung der Anzahl der Dateideskriptoren hat, die er verfolgen kann, ist diese Beschränkung der Dateideskriptoren eine künstliche Beschränkung der Anzahl der gleichzeitigen TCP-Verbindungen oder UDP-Flows, die Ihr Kernel verarbeiten kann.

Spiff
quelle
2
Vielleicht lohnt es sich, in dieser ausgezeichneten Antwort auf en.wikipedia.org/wiki/C10k_problem zu verlinken .
ChrisInEdmonton
1
Ich habe einen TCP-Server implementiert, der gleichzeitig 65.534 Verbindungen von jeder möglichen IP-Adresse aufnehmen kann. Es macht nicht viel - es gibt einfach eingehenden Text mit ein paar Zeichenersetzungen wieder - aber es läuft auf einer sehr kleinen Hardwareplattform. Ich denke nicht, dass es RFC-konform ist, aber es scheint ziemlich gut zu funktionieren, obwohl es weder weiß noch interessiert, wie viele TCP-Verbindungen an den meisten seiner Ports offen sind.
Supercat
2
Wenn Sie wirklich mehr als 65536 Verbindungen zwischen zwei Computern herstellen müssen, können Sie die Computer so einrichten, dass sie mehrere IP-Adressen verwenden. Jede IP-Adresse, die Sie den beiden Computern hinzufügen, erhöht die maximale Anzahl der Verbindungen quadratisch (zumindest theoretisch werden Sie wahrscheinlich zuerst auf andere Probleme stoßen).
Lie Ryan