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.
networking
operating-systems
Omid Golparvar
quelle
quelle
Antworten:
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:
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.
quelle