J'ai appris qu'une connexion TCP est identifiée par le tuple (IP source, port source, ip de destination, port de destination). Théoriquement, il devrait donc être possible d'avoir un client de l'hôte1: port1 connecté au serveur1: port1 et en même temps un autre client (fonctionnant sur l'hôte1) de l'hôte1: port1 au serveur2: port1.
J'ai testé un peu en Java, et jusqu'à présent cela semble possible.
Cependant, j'ai lu plusieurs fois que le port source doit être unique pour l'adresse de l'hôte, ce qui signifierait essentiellement qu'il existe une limite stricte d'au plus 65536 connexions TCP sortantes simultanées. Est-ce vrai?
Mise à jour: voici mon code Java. Cela semble fonctionner, et netstat -t montre clairement deux connexions sortantes actives depuis le port 9990 (une vers 9997, une vers 9998). Au moins sur un Linux moderne, cela semble possible?
Socket s1 = new Socket();
s1.setReuseAddress(true);
SocketAddress saremote = new InetSocketAddress("localhost",9999);
SocketAddress salocal = new InetSocketAddress("localhost",9990);
s1.bind(salocal);
s1.connect(saremote);
Socket s2 = new Socket();
s2.setReuseAddress(true);
SocketAddress saremote2 = new InetSocketAddress("localhost",9998);
SocketAddress salocal2 = new InetSocketAddress("localhost",9990);
s2.bind(salocal2);
s2.connect(saremote2);
Et la sortie netstat -t (tronquée):
tcp6 0 0 localhost:9990 localhost:9998 CONNECTED
tcp6 0 0 localhost:9990 localhost:9999 CONNECTED
Réponses:
Ce n'est pas une exigence TCP. En ce qui concerne TCP, seule la combinaison IP source, port source, IP de destination et port de destination doit être unique. Cependant, dans la pratique, la plupart des API TCP ne fournissent aucun moyen de créer plusieurs connexions avec le même port source, sauf si elles ont des adresses IP source différentes.
la source
C'est le maximum en pratique, c'est généralement plus bas. Par exemple, Linux utilise le
net.ipv4.ip_local_port
paramètre kernel pour définir les ports utilisés pour les connexions sortantes. C'est généralement quelque chose commeVous pouvez augmenter le nombre disponible avec sysctl par exemple
ou vous pouvez éditer /etc/sysctl.conf avec les mêmes informations
Tous les exemples que j'ai trouvés montrent que la valeur minimale est de 1024 également.
la source
En plus de la réponse d'Iain (ci-dessus), il se peut que seuls 10 000 ports soient autorisés pour les connexions sortantes par votre noyau, en théorie, vous êtes au moins limité à un ensemble de XX, XXX ports par adresse IP sur l'adaptateur. Étant donné que 127.1 n'est pas disponible pour le monde extérieur, étant sur le réseau local, pour chaque autre adresse IP ( externe ), vous avez un ensemble de ports sortants dans votre plage de ports 65K.
Donc la limite sortante est vraiment:
Pour que cela fonctionne, vous devez lire la réponse à ce fil .
la source
Oui. C'est vrai.
Les ports sont à lier et les applications avec le réseau.
Vous ne pouvez pas avoir plus de 65553 applications connectées par TCP et 65535 connectées par UDP sur le même hôte. Les systèmes d'exploitation géraient typiquement les ports et en attribuaient un pour chaque application qui se connecte au réseau.
Si vous avez deux applications listées sur le même port lorsqu'un package réseau arrive, l'ordinateur ne peut pas savoir quelle application va fournir les données. Par exemple, si vous avez Messenger et Skype sur le même lié au même port, votre message de messagerie apparaîtra dans skype et vice versa :)
la source
Bien qu'un système puisse avoir une limite sur le nombre de connexions TCP ouvertes, il n'a normalement aucune restriction concernant les numéros de port utilisés. Une bonne implémentation TCP doit cependant empêcher d'utiliser deux fois la même paire de sockets. (socket = adresse IP + port). Un port est cependant affecté à un processus pour empêcher le vol de connexions, et la méthode habituelle est de demander un port libre pour un port d'écoute ou pour un port sortant. Cela empêche les sockets sortants en double et donc les connexions en double. À défaut d'utiliser cette méthode, l'application elle-même doit empêcher la création de connexions en double.
la source