J'ai fait autant de recherches que je pouvais sur cela sans creuser directement dans la source du noyau. Il semble y avoir une grande quantité de désinformation/d'informations incorrectes sur le sujet, alors j'espère que cela répond à la question de moi et d'autres une fois pour tous.
Strictly IPv4 parlant, est-ce que l'épuisement du port est réellement possible? Laisse-moi expliquer:
Et c'est la question suivante: est-ce que cela fonctionne?
Enfin, je suis un peu confus sur les ports éphémères (sortants) et les ports entrants qui écoutent. Je réalise une fois que la connexion est établie, chaque côté de la connexion est un pair et égal, mais avant cela ne se produit:
Par exemple, si même le (SRCIP, SRCPORT, DSTIP, DSTPORT) tuple doit être unique, pourquoi est-ce si j'accepte, par exemple
net.ipv4.ip_local_port_range = 1024 65535
Ce qui permet d'utiliser des ports éphémères du 1024-65535, que si j'ai des services qui se lient sur le port 3306 (MySQL, par exemple), ils ne parviendront parfois pas à démarrer car le port est utilisé.
Est-ce que cela relative au fait que: (et c'est une déclaration que je demande à être validée):
Je peux vérifier le comportement ci-dessus, c'est-à-dire que j'utilise la ligne SYSCTL exacte ci-dessus et, en raison de celui-ci, j'ai déplacé MySQL sur un port inférieur à 1024, car il échouerait de temps en temps et très aléatoirement de redémarrer, car en supposant que l'OS utilisait ce port (3306). pour un port éphémère.
Vous avez deux questions principales ici:
Strictly IPv4 parlant, est-ce que l'épuisement du port est réellement possible?
Oui. Prenez, par exemple, un routeur d'équilibrage de la charge envoie toutes les connexions à un NAT Adresse IP. Cela est susceptible de se produire lorsque vous avez beaucoup SRC IP
s Connexion au goulot d'étranglement d'un seul DST IP
.
Cela signifie que votre serveur Web pourrait avoir un tas de connexions comme:
root@buglab:~# netstat -pnt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 173.200.1.18:80 10.100.1.100:49923 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.200.1.200:10155 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.10.1.10:14400 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.10.1.10:50652 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.20.1.20:57554 ESTABLISHED 13939/nginx: worker
et c'est parfaitement bien. Toutefois, si toutes les "adresses étrangères" étaient les mêmes, cela peut provoquer un problème (par exemple, un grand routeur qui effectue NAT <---> serveur avec une adresse IP ").
Si je devais postuler pourquoi l'épuisement des ports éphémères n'est pas un problème courant, je suggérerais que tout le port nécessite un service d'écoute et suffisamment de ressources pour répondre - une autre ressource (mémoire, la CPU) est normalement un goulot d'étranglement.
Cependant, j'ai personnellement rencontré quelques problèmes d'épuisement des ports lorsque vous travaillez lors d'une entreprise d'équilibrage de charge.
"Ce qui permet d'utiliser des ports éphémères à partir du 1024-65535, que si j'ai des services qui se lient sur le port 3306 (MySQL, par exemple), ils ne parviendront parfois pas à démarrer car le port est utilisé."
Le serveur MySQL ne peut pas se lier à ce port s'il est utilisé - dites par localhost: 3306 ou sur toutes les interfaces. Par exemple, voir la ligne 0.0.0.0:80 dans la sortie suivante netstat
Sortie?
root@buglab:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 964/php-fpm.conf)
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1660/mysqld
tcp 0 0 0.0.0.0:842 0.0.0.0:* LISTEN 1317/inetd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13938/nginx
Cela signifie que le port 80 écoute à travers toutes interfaces locales sur le serveur. Si un autre processus détient le port 80 avant que mon nginx
Server commence, nginx
_ _ ne pourra pas prendre le contrôle de ce port et échouera probablement à sa procédure de démarrage.
Normalement, le port 3306 va bien car les services d'écoute ont des ports (ou des plages) prédéfinis (ou des plages) demandés à partir de la machine hôte - par exemple. Port 80 et 443 pour les serveurs Web.
Je pourrais avoir 65k connexions à partir de 127.0.0.1:(X) à 127.0.0.1:80 Je pourrais avoir 65k connexions du 127.0.0.1:(x) à 127.0.0.1:555
a: Oui, si votre port local est 1-65535, le nombre de connexions est de 65k-1 (un port est écouté)
Fondamentalement encore une fois, la question est (SRCIP, SRCPORT, DSTIP, DSTPORT) doit être unique, correcte? A: oui
Je ne pouvais plus ouvrir de plus de 65 000 connexions de IP "A" à IP "B", Port "N" également, une seule adresse IP n'a pas pu ouvrir plus de 65 000 connexions à mon serveur WebServer à XXXX: 80, mais je pourrais supporter beaucoup plus 65k globalement tant qu'ils proviennent de différentes sources IPS?
r: Une seule adresse IP n'a pas pu ouvrir plus de 65 000 connexions à mon serveur Web à X.x.x.x: 80, car SRCIP, SRCPORT, DSTIP, DSTPort est unique. oui, vous pouvez soutenir beaucoup plus de 65k, si la Sorce IP est différente