TCP Sessions e IP Changes

3

O que acontece com uma sessão TCP quando o IP de um cliente é alterado?

Eu fiz um teste simples de ter o netcat escutando em uma porta e conectando a essa porta a partir de uma máquina cliente. Em seguida, mudei o IP do cliente enquanto a sessão nc estava aberta e enviei alguns dados, nenhum dado foi recebido pelo servidor depois de alterar o IP.

  1. Eu sei que eles são camadas diferentes mas o TCP usa IPs para parte de como distingue as sessões?
  2. Meu exemplo não funciona por causa de como o aplicativo lida com isso, ou isso não está funcionando por causa de algo acontecendo Camadas TCP / IP / Ethernet?
  3. Isso depende da implementação do sistema operacional? (Eu estou mais interessado no Linux no momento)
por Kyle Brandt 03.09.2009 / 15:01

6 respostas

9

Meu entendimento é que um soquete TCP consiste no número da porta IP +, portanto, alterar o IP interrompe essa conexão. O nc não tem como saber se o IP foi alterado, por isso continua enviando dados para o IP original até que a sessão expire.

Veja o RFC 793 (Protocolo de Controle da Transmissão), especificamente a seção 2.7:

2.7. Estabelecimento de conexão e limpeza

Para identificar os fluxos de dados separados que um TCP pode manipular, o TCP fornece um identificador de porta. Como os identificadores de porta são selecionados independentemente por cada TCP, eles podem não ser exclusivos. Para fornecer endereços exclusivos dentro de cada TCP, concatenamos um endereço de Internet que identifica o TCP com um identificador de porta para criar um soquete que será exclusivo em todas as redes conectadas juntas.

Sugiro usar o Wireshark ou outro sniffer de pacote para assistir ao tráfego e ver em ação.

    
por 03.09.2009 / 15:13
2

A sessão vai morrer. Os soquetes TCP são dst port, dst ip, porta src, src ip. Se alguma dessas mudanças, a conexão deve ser descartada (pelo menos, de acordo com Stevens).

EDIT: Isso vale para qualquer implementação compatível com RFC. RFC 793, seção 2.7

    
por 03.09.2009 / 15:19
2

As respostas anteriores informam que as conexões TCP não podem ser mantidas ativas quando o endereço IP é alterado. Isso foi correto em 2009, quando essas respostas foram escritas.

No entanto, em janeiro de 2013, foi publicado o RFC 6824 , que apresenta uma maneira de manter as conexões TCP ativas quando o endereço IP é alterado . Em junho de 2014, ainda não é amplamente suportado. Mais notavelmente, a implementação de referência existe como um patch para o Linux, e o iOS7 suporta o MPTCP por padrão. A Wikipedia lista um total de cinco implementações .

    
por 12.06.2014 / 11:19
1

As sessões TCP são identificadas pelo endereço IP e pelo número da porta nos dois lados da conexão. Alterar o endereço IP de um lado quebraria essa sessão.

    
por 03.09.2009 / 15:23
1

A combinação (endereço de origem, porta de origem, endereço de destino, porta de destino) é chamada de par de soquetes . É usado pela pilha TCP para identificar a conexão. Uma vez estabelecido, o TCP não tem como atualizar nada disso.

SCTP permite que os endpoints alterem seus endereços em tempo real, mas ele não é amplamente implementado (ainda não, pelo menos).

    
por 03.09.2009 / 18:01
1

Outros responderam do ponto de vista da conexão sendo identificada pelo par IP + Port. Deixe-me falar um pouco sobre como funciona na estrutura em camadas.

TCP é uma camada que fornece a 'ilusão' de um fluxo confiável sobre uma camada de pacote não confiável (IP). Para isso, é preciso ter em conta várias variáveis para gerenciar o fluxo e também fornecer os parâmetros relevantes para a camada abaixo.

Assim, quando você solicita ao TCP para abrir um fluxo, você dá a IP + Porta do destino. Ele mantém esse número IP, e cada vez que tem que transferir algo, monta um pacote IP e diz à camada IP para enviá-lo para a máquina pretendida, identificada apenas pelo número IP original.

Quando você altera o número IP de uma máquina, a camada TCP da outra pessoa não tem nenhum meio de saber o que aconteceu. Ele só vê que qualquer pacote IP enviado para o número IP original não é mais respondido (talvez receba uma mensagem ICMP informando que não há máquina com esse número IP). Além disso, não recebe mais pacotes com esse número IP. Obviamente, a conexão será cancelada após algum tempo limite.

Ainda pior, pode começar a obter alguns pacotes não relacionados de uma origem diferente (o novo número de IP), mas esses assumem que uma conexão já está em vigor! Naturalmente, a única resposta que a máquina pode receber (se é que é) é um pacote RST para que cesse e desista imediatamente.

    
por 03.09.2009 / 19:03