J'ai fait autant de recherches que possible sur ce sujet sans creuser tout de suite dans la source du noyau. Il semble y avoir une grande quantité d'informations de désinformation / incorrectes sur le sujet, donc j'espère que cela répond à la question pour moi et pour les autres une fois pour toutes.
Strictement parlant IPv4, l'épuisement des ports est-il réellement possible? Laissez-moi expliquer:
- Apparemment, 65535 ports sont disponibles. 0 n'est pas disponible.
- J'ai lu que l'épuisement du port nécessite que le tuple (src ip, src port, dst ip, dst port) soit unique.
- Pour être clair et en supposant que je peux utiliser 100% des ports éphémères via le paramètre sysctl net.ipv4.ip_local_port_range
Et voici la question: est-ce ainsi que cela fonctionne?
- Je pourrais avoir 65k connexions de 127.0.0.1:(x) à 127.0.0.1:80
- Je pourrais avoir 65 000 connexions de 127.0.0.1:(x) à 127.0.0.1:555
- Fondamentalement, encore une fois, la question est (srcip, srcport, dstip, dstport) doit être unique, n'est-ce pas?
- Je n'ai pas pu ouvrir plus de 65 000 connexions de l' IP "A" à l'IP "B", le port "N"
- De même, une seule adresse IP ne peut pas ouvrir plus de 65 000 connexions à mon serveur Web à xxxx: 80, mais je pourrais prendre en charge beaucoup plus de 65 000 dans la mesure où elles proviennent d' IP sources différentes ?
Enfin, je suis un peu confus au sujet des ports éphémères (sortants) et des ports entrants qui écoutent. Je me rends compte qu'une fois la connexion établie, chaque côté de la connexion est un pair et égal, mais avant cela:
Par exemple, si en effet le tuple (srcip, srcport, dstip, dstport) doit être unique, pourquoi est-ce si j'active, par exemple
net.ipv4.ip_local_port_range = 1024 65535
Ce qui permet d'utiliser des ports éphémères de 1024 à 65535, que si j'ai des services qui se lient sur le port 3306 (mySQL, par exemple), ils échoueront parfois car le port est en cours d'utilisation.
Est-ce lié au fait que: (Et c'est une déclaration que je demande à valider):
- (srcip, srcport, dstip, dstport) doivent être uniques pour chaque connexion avec la plage de ports 1-65535 (sans prêter attention à l'utilisation par le système d'exploitation des ports éphémères)
- Cependant, pour qu'un socket se lie, il peut être vu comme (srcip, srcport, *, *). Ou une autre façon de le dire, l'IP ne doit-elle pas utiliser ce port pour quelque raison que ce soit?
Je peux vérifier le comportement ci-dessus, c'est-à-dire que j'utilise la ligne sysctl exacte ci-dessus, et à cause de cela, j'ai déplacé mySQL vers un port inférieur à 1024 car il échouerait de manière occasionnelle et très aléatoire car en supposant que le système d'exploitation utilisait ce port (3306) pour un port éphémère.