o cliente TCP pode usar a mesma porta para conectar-se a diferentes servidores TCP remotos?

1

Eu estou querendo saber se o cliente TCP pode usar a mesma porta para conectar a diferentes servidores TCP remotos ou não?

Na programação de rede, existem duas funções: sendto e send . Quando usamos send , não precisamos especificar o destino. Isso parece significar que um soquete tcp conectado só pode ser relacionado a um (src ip, porta src, dst ip, dst port) 4-tupla.

posso fazer algo como:

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

por exemplo, é possível que o proxy http fique sem portas e tenha que reutilizar as portas?

    
por misteryes 27.05.2013 / 12:35

3 respostas

1

Para responder a essa pergunta, talvez seja necessário diferenciar entre TCP, o protocolo independente de API e BSD Sockets, a API mais conhecida e amplamente adotada pela qual os aplicativos acessam os recursos das pilhas TCP de seus sistemas operacionais.

TCP, o protocolo, como você já observou, considera cada 4 tuplas (src ip, porta src, dst ip, dst port) como uma conexão separada. Altere qualquer um dos itens dessa 4-tupla e é uma conexão totalmente separada. Então, sim, TCP o protocolo pode manipular várias conexões de um único endereço IP de origem e porta de origem.

Se há ou não uma maneira fácil de acessar essa funcionalidade da venerável API do BSD Sockets, pode ser uma questão diferente.

    
por 23.01.2017 / 01:43
0

Para meu conhecimento, sim, eles podem.

Depende das conexões do aplicativo (neste exemplo, digamos http, que usa a porta 80) reutilizarem as portas acima de 1024. Todas as portas de 0 a 1024 são reservadas para algum uso específico. Qualquer coisa acima de 1024 é um jogo justo para qualquer aplicativo usar.

Portanto, ao carregar uma página da Web, você inicia com uma solicitação HTTP (Porta 80), mas todas as conexões, arquivos e imagens são todos solicitados simultaneamente, o PC local selecionará portas aleatórias não usadas para conectar para o servidor da Web na porta 80.

A segurança do grc.com agora tem uma boa explicação sobre o TCP e como ele funciona aqui: link - TCP Parte 1 - Conectando-se

Tenho certeza de que outros especialistas terão seu método de explicar as coisas, mas isso é o que posso encontrar por enquanto.

Também, curiosamente, há um site chamado link que cria ilustrações / vídeos sobre security now episodes , e eles têm 2 vídeos de ilustração sobre como funciona a Internet que pode ser útil para aprender (se você achar que o podcast é muito prolixo, e gráfico insuficiente)

Espero que isso ajude.

    
por 27.05.2013 / 13:07
0

O TCP, até onde eu sei, não pode alternar portas enquanto a conexão está em andamento. O cliente precisaria fechar ou abandonar essa conexão e, em seguida, iniciar uma nova se quisesse usar uma porta de origem diferente em seu final.

Não há nada que impeça um aplicativo de implementar algo nesse fluxo TCP que instrua o cliente a iniciar outra conexão em uma nova porta. FTP meio que faz isso com o PASV se estou lembrando corretamente. Mas isso não é uma característica do próprio TCP.

Acredito que a maioria dos sistemas operacionais permite configurar o intervalo de portas de saída válido para conexões TCP e, sim, você pode ficar sem eles (provavelmente a menos que seu intervalo seja muito pequeno) e sim, eles são reutilizados. Leia isto: link

    
por 27.05.2013 / 14:05