Je me demande si le client TCP peut utiliser le même port pour se connecter à différents serveurs TCP distants ou non?
En programmation réseau, il y a deux fonctions: sendto
et send
. Quand nous utilisons send
nous n'avons pas besoin de spécifier la destination. Cela semble signifier qu'une prise TCP connectée ne peut être associée qu'à une seule (src ip, port src, dst ip, port dst) 4-tuple.
puis-je faire quelque chose comme:
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_addr.s_addr=inet_addr(local_ip);
cliaddr.sin_port=htons(32000);
bind(listenfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
connect(sockfd, (struct sockaddr *)&servaddr1, sizeof(servaddr1));
connect(sockfd, (struct sockaddr *)&servaddr2, sizeof(servaddr2));
sendto(sockfd, buf, len, 0, (struct sockaddr *)&servaddr1, socklen);
sendto(sockfd, buf, len, 0, (struct sockaddr *)&servaddr2, socklen);
Par exemple, est-il possible que le proxy http manque de ports et doive les réutiliser?
networking
tcp
misteryes
la source
la source
Réponses:
Pour répondre à cette question, il peut être nécessaire de différencier TCP, le protocole indépendant de l'API, et BSD Sockets, l'API le plus connu et le plus largement adopté, grâce auquel les applications accèdent aux fonctionnalités des piles TCP de leur système d'exploitation.
TCP, le protocole, comme vous l'avez déjà noté, considère chaque tuple à 4 (adresse IP src, port src, adresse IP dst, port dst) comme une connexion distincte. Modifiez n'importe lequel des éléments de ce tuple à quatre et vous obtenez une connexion totalement distincte. Donc, oui, le protocole TCP peut gérer plusieurs connexions à partir d’une adresse IP et d’un port source uniques.
La question de savoir s'il existe un moyen simple d'accéder à cette fonctionnalité à partir de la vénérable API BSD Sockets est peut-être différente.
la source
À ma connaissance, oui, ils le peuvent.
Dépend de l'application (dans cet exemple, disons http qui utilise le port 80), les connexions réutilisent les ports supérieurs à 1024. Tous les ports de 0 à 1024 sont réservés pour un usage spécifique. Tout ce qui est supérieur à 1024 convient à toutes les applications.
Ainsi, lors du chargement d'une page Web, vous commencez par une requête HTTP (port 80), mais toutes les connexions entrantes, tous les fichiers et toutes les images sont demandés simultanément, votre PC local choisit un port aléatoire inutilisé pour se connecter au Web. serveur sur le port 80.
La sécurité de grc.com a maintenant une bonne explication sur TCP et son fonctionnement ici: https://www.grc.com/sn/past/2011.htm - Partie 1 TCP - Se connecter
Je suis sûr que d'autres experts auront leur méthode pour expliquer les choses, mais c'est celle que je peux trouver pour le moment.
Aussi assez intéressant, il existe un site Web appelé http://www.askmisterwizard.com/ qui ont créé des illustrations / vidéos sur sécurité maintenant épisodes , et ils ont 2 vidéos d'illustrations sur le fonctionnement d'Internet qu'il peut être utile d'apprendre (si vous trouvez le podcast trop verbeux et pas assez graphique)
J'espère que cela t'aides.
la source
Autant que je sache, TCP ne peut pas changer de port pendant que la connexion est en cours. Le client doit fermer ou abandonner cette connexion, puis en créer une nouvelle s'il souhaite utiliser un autre port source à sa fin.
Rien n'empêche une application d'implémenter quelque chose dans ce flux TCP qui indique au client de démarrer une autre connexion sur un nouveau port. C'est ce que fait FTP avec PASV si je me souviens bien. Mais ce n'est pas une caractéristique de TCP lui-même.
Je pense que la plupart des systèmes d'exploitation vous permettent de configurer la plage de ports sortants valide pour les connexions TCP. Oui, vous pouvez en manquer (il est peu probable que votre plage soit très petite) et oui, elles sont réutilisées. Lis ça: http://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html
la source