Ich habe so viel wie möglich darüber recherchiert, ohne direkt in der Kernelquelle zu graben. Es scheint eine große Menge an Desinformation / falschen Informationen zu diesem Thema zu geben, daher hoffe ich, dass dies die Frage für mich und andere ein für alle Mal beantwortet.
Streng genommen ist eine IPv4-Erschöpfung tatsächlich möglich? Lassen Sie mich erklären:
- Anscheinend stehen 65535 Ports zur Verfügung. 0 ist nicht verfügbar.
- Ich habe gelesen, dass für die Port-Erschöpfung das Tupel (src ip, src port, dst ip, dst port) eindeutig sein muss.
- Um klar zu sein und davon auszugehen, dass ich 100% der kurzlebigen Ports über die Einstellung sysctl net.ipv4.ip_local_port_range verwenden kann
Und das ist die Frage: Funktioniert das so?
- Ich könnte 65k Verbindungen von 127.0.0.1:(x) bis 127.0.0.1:80 haben
- Ich könnte 65k Verbindungen von 127.0.0.1:(x) bis 127.0.0.1:555 haben
- Grundsätzlich ist die Frage (srcip, srcport, dstip, dstport) noch einmal eindeutig, richtig?
- Ich konnte nicht mehr als 65.000 Verbindungen von IP "A" zu IP "B", Port "N" öffnen.
- Ebenso konnte eine einzelne IP unter xxxx: 80 nicht mehr als 65.000 Verbindungen zu meinem Webserver öffnen. Ich konnte jedoch insgesamt viel mehr als 65.000 unterstützen, solange sie von verschiedenen Quell-IPs stammen .
Schließlich bin ich ein wenig verwirrt über (ausgehende) kurzlebige Ports und eingehende Ports, die abhören. Sobald die Verbindung hergestellt ist, ist mir klar, dass jede Seite der Verbindung gleichrangig und gleich ist, aber bevor dies geschieht:
Wenn zum Beispiel das Tupel (srcip, srcport, dstip, dstport) eindeutig sein muss, warum ist es dann so, wenn ich es aktiviere?
net.ipv4.ip_local_port_range = 1024 65535
Dies ermöglicht die Verwendung von kurzlebigen Ports von 1024-65535. Wenn ich Dienste habe, die an Port 3306 gebunden sind (z. B. mySQL), können diese manchmal nicht gestartet werden, da der Port verwendet wird.
Bezieht sich dies auf die Tatsache, dass: (Und dies ist eine Aussage, die ich um Bestätigung bitte):
- (srcip, srcport, dstip, dstport) müssen für jede Verbindung mit dem Portbereich von 1-65535 eindeutig sein (ohne Berücksichtigung der Verwendung kurzlebiger Ports durch das Betriebssystem).
- Damit ein Socket gebunden werden kann, kann er als (srcip, srcport, *, *) angesehen werden. Oder anders ausgedrückt: Darf die IP diesen Port aus keinem Grund zum Binden verwenden?
Ich kann das obige Verhalten überprüfen, dh ich verwende die exakte sysctl-Zeile oben, und aus diesem Grund habe ich mySQL auf einen Port unter 1024 verschoben, da es gelegentlich und sehr zufällig nicht neu gestartet werden konnte, da angenommen wurde, dass das Betriebssystem diesen Port verwendet (3306). für einen kurzlebigen Hafen.