web-dev-qa-db-fra.com

Port de réseau Linux Épuisement

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:

  • Apparemment, il y a 65535 ports disponibles pour une utilisation. 0 n'est pas disponible.
  • J'ai lu que l'épuisement de port nécessite la (IP SRC, Port SRC, DST IP, Port DST) à être unique.
  • Pour être clair et en supposant que je puisse utiliser 100% des ports éphémères via SYSCTL NET.IPV4.IP_LOCAL_PORT_RANGE

Et c'est la question suivante: est-ce que cela fonctionne?

  • Je pourrais avoir 65k connexions du 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
  • Fondamentalement encore une fois, la question est (SRCIP, SRCPORT, DSTIP, DSTPORT) doit être unique, correcte?
  • Je ne pouvais pas ouvrir plus de 65k connexions de IP "A" à IP "B", port "N"
  • De même, A Single IP Impossible d'ouvrir plus de 65 000 connexions à mon serveur Web à XXXX: 80, mais je pourrais prendre en charge beaucoup plus de 65 000 de 65k dans la mesure où ils sont de différents source IPS?

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):

  • (SRCIP, SRCPORT, DSTIP, DSTPORT) sont nécessaires pour être uniques pour chaque connexion avec la plage de ports de 1 à 65535 (ne prêtant pas attention à l'utilisation des ports éphémères du système d'exploitation)
  • Cependant, pour une prise à lier, cela pourrait être considéré comme (SRCIP, SRCPORT, *, *). Ou une autre façon de mettre cela, la propriété intellectuelle ne doit pas utiliser ce port pour une raison quelconque de se lier?

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.

10
A.B. Carroll

Vous avez deux questions principales ici:

1.

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 IPs 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.

2. Pourquoi un port utilisé peut-il présenter un problème pour un service d'écoute?

"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

0
wow qing