Maison  >  Article  >  Tutoriel système  >  Analyse du nombre maximum de connexions TCP simultanées et méthodes d'identification pour une seule machine en programmation réseau

Analyse du nombre maximum de connexions TCP simultanées et méthodes d'identification pour une seule machine en programmation réseau

王林
王林original
2024-07-19 13:09:22397parcourir

网络编程中单机最大并发 TCP 连接数及标识方式解析

Programmation réseau Dans les applications TCP, le serveur écoute à l'avance un port fixe, le client initie activement une connexion et une connexion TCP est établie après une poignée de main à trois. Quel est le nombre maximum de connexions TCP simultanées pour une seule machine ?

Comment marquer une connexion TCP. Avant de déterminer le nombre maximum de connexions, voyons d'abord comment le système marque une connexion TCP. Le système utilise un 4-tuple pour identifier de manière unique une connexion TCP : {localip, localport, remoteip, remoteport}.

Nombre maximum de connexions TCP par client. Chaque fois qu'un client lance une demande de connexion TCP, à moins que le port ne soit lié, le système sélectionnera généralement un port local inactif (localport). Ce port est exclusif et ne peut pas être partagé avec d'autres connexions TCP. . Le type de données du port TCP n'est pas signé, donc le nombre maximum de ports locaux n'est que de 65 536 sur le système serveur Linux. Le port 0 a une signification particulière et ne peut pas être utilisé. Par conséquent, le nombre maximum de ports disponibles est de 65 535. lorsque tous sont utilisés comme clients, le nombre maximum de connexions TCP est de 65 535. , cette connexion peut être connectée à différents serveurs.

Nombre maximum de connexions TCP pour le serveur. Le serveur est généralement fixé sur un port local et écoute, en attente de la demande de connexion du client. Sans tenir compte de la réutilisation des adresses (l'option SO_REUSEADDR d'Unix), bien qu'il existe plusieurs adresses IP côté serveur, le port d'écoute local est également exclusif. Par conséquent, il n'y a que l'adresse IP distante (c'est-à-dire l'adresse IP client) et le port distant (client) dans les 4. -tuple de la connexion TCP côté serveur) est variable, donc la connexion TCP maximale est le nombre d'IP client × le nombre de ports client pour IPV4, quels que soient des facteurs tels que la classification de l'adresse IP et le logiciel Linux, le maximum. le nombre de connexions TCP est d'environ 2 puissance 32 (nombre d'IP) × 2 puissance 16 (nombre de ports) Limite de connexion TCP Linux , c'est-à-dire que le nombre maximum de connexions TCP sur un seul côté serveur est d'environ 2 à la puissance 48.

Combien de connexions TCP simultanées peuvent exister sur un tel serveur unique

Ce qui est indiqué ci-dessus est le nombre maximum théorique de connexions pour une seule machine. Dans les environnements réels, il est limité par les ressources de la machine, les systèmes d'exploitation, etc., notamment côté serveur, et son nombre maximum de connexions TCP simultanées est loin d'être le cas. d’atteindre la limite supérieure théorique. Les principales raisons de limiter le nombre de connexions sous Unix/Linux sont la mémoire vidéo et le nombre de descripteurs de fichiers autorisés (chaque connexion TCP occupe une certaine quantité de mémoire vidéo, et chaque socket est un descripteur de fichier. De plus, les ports inférieurs à 1024). sont généralement des ports réservés. Dans la configuration par défaut du noyau 2.6, après test, chaque socket occupe entre 15 et 20 Ko. Les paramètres qui affectent la mémoire occupée par un socket incluent : rmem_maxwmem_maxtcp_rmemtcp_wmemtcp_memgrepskbuff/proc/slabinfo Côté serveur, en réduisant la mémoire vidéo et en modifiant le nombre maximum de descripteurs de fichiers et autres paramètres, ce n'est pas un problème pour le nombre maximum de simultanés. Les connexions TCP sur une seule machine dépassent les 100 000. La société américaine UrbanAirship Dans l'environnement de production, 500 000 utilisateurs simultanés ont été atteints. Dans les applications pratiques, pour les applications réseau à grande échelle, la question C10K doit également être prise en compte.

linux tcp连接数限制_限制连接数量_限制连接数与限制网速的效果

Expliquons les deux sens communs des restrictions de gestion de fichiers et des restrictions de port

Bon sens 1 : Restrictions relatives à la gestion des fichiers

Les collègues qui écrivent des programmes serveur réseau sous Linux doivent savoir que chaque connexion TCP occupe un descripteur de fichier. Une fois ce descripteur de fichier épuisé, l'erreur qui nous est renvoyée lorsqu'une nouvelle connexion est établie est "Socket/File:Can 'topensemanyfiles'.

À ce stade, vous devez comprendre la limite du système d'exploitation concernant le nombre maximum de fichiers pouvant être ouverts.

linux tcp连接数限制_限制连接数与限制网速的效果_限制连接数量

Limitation du processus

L'exécution de ulimit-n génère 1024, indiquant qu'un processus ne peut ouvrir que jusqu'à 1024 fichiers, donc si vous utilisez cette configuration par défaut, vous pouvez exécuter simultanément des milliers de connexions TCP au maximum.

Modifications temporaires : ulimit-n1000000, et ces modifications temporaires ne sont valables que pour l'environnement d'utilisation actuel de l'utilisateur actuellement connecté et deviendront invalides après le redémarrage du système ou la déconnexion de l'utilisateur.

Modifications qui deviennent invalides après le redémarrage (mais je l'ai testé sous CentOS6.5 et n'ai trouvé aucune invalidité après le redémarrage) : Modifiez le fichier /etc/security/limits.conf, et le contenu modifié est

linux tcp连接数限制_限制连接数与限制网速的效果_限制连接数量

*softnofile1000000

*hardnofile1000000

Modifications permanentes : modifiez /etc/rc.local et ajoutez le contenu suivant après

ulimit-SHn1000000

Restrictions mondiales

L'exécution de cat/proc/sys/fs/file-nr génère 93440592026, qui sont : 1. Le nombre de descripteurs de fichiers alloués, 2. Le nombre de descripteurs de fichiers alloués mais inutilisés, 3. Le nombre maximum de descripteurs de fichiers. Mais dans la version kernel2.6, la valeur du deuxième élément est toujours 0. Ce n'est pas une erreur. Cela signifie en fait que tous les descripteurs de fichiers alloués ont été utilisés sans aucun gaspillage.

Nous pouvons changer cette valeur en une valeur plus grande et utiliser les privilèges root pour modifier le fichier /etc/sysctl.conf :

fs.file-max=1000000

限制连接数与限制网速的效果_linux tcp连接数限制_限制连接数量

net.ipv4.ip_conntrack_max=1000000

filter.ip_conntrack_max=1000000

Connaissance commune 2 : La plage de numéros de port est-elle limitée ?

Les bannières bas de gamme du système d'exploitation inférieures à 1024 sont réservées par le système et 1024-65535 sont utilisées par les utilisateurs. Étant donné que chaque connexion TCP occupe un numéro de port, nous pouvons avoir jusqu'à plus de 60 000 connexions simultanées. Je pense qu’il y a beaucoup d’étudiants qui ont ces idées fausses, n’est-ce pas ? (J'ai toujours ressenti cela dans le passé)

Analysons-le

Comment marquer une connexion TCP : Le système utilise un 4-tuple pour marquer de manière unique une connexion TCP : {localip, localport, remoteip, remoteport}. Eh bien, reprenons l'explication de accept dans le chapitre 4 de « Programmation réseau UNIX : Volume 1 » pour jeter un œil aux éléments conceptuels. Le deuxième paramètre cliaddr représente l'adresse IP et le numéro de port du client. En tant que serveur, nous n'utilisons ce port que lors de la liaison, ce qui montre que le numéro de port 65535 ne constitue pas une limite sur le degré de concurrence.

Nombre maximum de connexions TCP au serveur : Le serveur est généralement fixé sur un port local et écoute, en attendant la demande de connexion du client. Sans tenir compte de la réutilisation des adresses (l'option SO_REUSEADDR d'Unix), bien qu'il existe plusieurs adresses IP côté serveur, le port d'écoute local est également exclusif. Par conséquent, il n'y a que l'adresse IP distante (c'est-à-dire l'adresse IP client) et le port distant (client) dans les 4. -tuple de la connexion TCP côté serveur) est variable, donc la connexion TCP maximale est le nombre d'adresses IP client × le nombre de ports clients pour IPV4, quelles que soient les incitations telles que la classification des adresses IPLimite du nombre de connexions TCP Linux. , le nombre maximum de connexions TCP est d'environ 2 fois 32 fois Puissance (nombre d'IPs) × 2 élevé à la 16ème puissance (nombre de ports), soit le nombre maximum de connexions TCP sur une seule machine côté serveur est d'environ 2 élevé à la puissance 48.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn