Como os pacotes de resposta IP alcançam seu destino dentro de uma LAN privada? [duplicado]

26

Esta é uma pequena questão teórica que me confunde há muito tempo.

Basicamente, se estamos dentro de uma LAN privada e queremos que os pacotes recebidos atinjam, por exemplo, um servidor HTTP localizado em uma das máquinas, encaminhamos as portas para que os pacotes recebidos atinjam exatamente esse computador.

Agora, estou bastante confuso sobre como os pacotes de 'resposta' atingem seu destino dentro de uma LAN, quando abrimos uma página da Web. Não consigo encontrar realmente nenhuma informação útil sobre esse tópico.

Espero que alguém possa me dar algumas pistas ou me vincular a algumas informações que possam explicar isso. Obrigado.

EDIT: Eu acho que devo esclarecer. Um exemplo do que estou perguntando seria algo como isto:
1. Um computador dentro de uma LAN com um único IP externo tenta carregar uma página da Web de um servidor da Web fora desta LAN (Basicamente na Internet)
2 O servidor da web responde e envia a página da web de volta para o computador.

O que me confunde nesse momento é: como o roteador sabe qual computador enviar os dados recebidos (dado que o roteador está conectado a uma LAN com vários computadores) sem o encaminhamento de porta anterior.

InsomniaArray
fonte
Acabei de assistir um vídeo agradável sobre o tema: Network Address Translation - Computerphile
Der Hochstapler

Respostas:

56

Mesmo que a questão tenha sido totalmente abordada. Eu sinto que esse processo deve ser melhor descrito passo a passo.

Neste exemplo, estou em uma LAN privada conectada à Internet através de um roteador. Como nossa rede compartilha um único endereço IP público, usamos o NAT.

Então, quando eu solicito a página superuser.comque irá gerar muitos pacotes IP. Vamos olhar para um único.


Origem do pacote IP : 192.168.1.12(meu IP)
Destino: 64.34.119.12(superuser.com)

Agora, meu sistema provavelmente está configurado de maneira semelhante à que está em questão. Eu tenho meu próprio endereço IP ( 192.168.1.12), uma máscara de sub-rede ( 255.255.255.0) e um gateway padrão ( 192.168.1.1). Agora, como o meu campo Destino no meu pacote IP aponta para uma rede diferente da minha, ele é enviado ao meu gateway padrão (e não ao computador diretamente).

Mas como o pacote pode chegar ao gateway padrão, se o Destino apontar para outro lugar completamente?

Ethernet

Isso é fácil, porque usamos o endereçamento do protocolo Ethernet para isso. Acabamos de definir o endereço IP de destino no pacote IP e o endereço MAC do gateway padrão como destino no quadro Ethernet .

Agora isso garantirá que nosso gateway padrão obtenha o pacote superuser.com. Yay!

Agora, o gateway possui nosso pacote e pode enviá-lo no caminho certo. Mas, para garantir que ela receba a resposta, primeiro é necessário substituir o endereço de origem do pacote (caso contrário superuser.com, tentaria enviar a resposta para alguns dispositivos (possivelmente) inexistentes pelo meu endereço IP na rede deles. muito bom.)
Portanto, meu roteador colocará seu endereço IP público no campo Origem :


Origem do pacote IP : 92.69.127.243(meu IP público)
Destino: 64.34.119.12(superuser.com)

Agora esse mesmo jogo continua com todos os roteadores do mundo até o pacote finalmente chegar superuser.come uma resposta ser gerada.

A resposta

Resposta
Fonte do pacote IP : 64.34.119.12(superuser.com)
Destino: 92.69.127.243(meu IP público)

Ok, a resposta chegou ao meu roteador, e agora? Como meu roteador agora sabe enviar a resposta 192.168.1.12?

TCP

Bem, isso realmente funciona porque analisamos apenas as partes IP e Ethernet da comunicação. O que faz isso funcionar é a parte do TCP.

Você provavelmente sabe que os servidores web geralmente rodam na porta 80. IP não tem noção de portas . Isso vem do TCP . No TCP, temos (como no IP) uma porta de origem e destino .

Meu pacote TCP para superuser.com
Origem: 192.168.1.12(meu IP)
Porta de origem: 11111(a porta criada pelo meu computador)
Destino: 64.34.119.12(superuser.com)
Porta de destino:80

Quando seu roteador envia esse pacote inicial (endereçado à superuser.comporta 80), ele coloca uma nova porta de origem (como 12345).
E esta é a parte importante! Ele vai se lembrar dessa substituição!

Pacote TCP do meu roteador para superuser.com
Origem: 92.69.127.243(meu IP público)
Porta de origem: 12345(a porta que meu roteador compôs)
Destino: 64.34.119.12(superuser.com)
Porta de destino:80

Portanto, o pacote de resposta recebido pelo roteador se parece com o seguinte:
Resposta TCP Packet de superuser.com
Fonte: 64.34.119.12(superuser.com)
Porta de origem: 80
Destino: 92.69.127.243(meu IP público)
Porta de destino: 12345(a porta que meu roteador compunha)

Então agora ele recebe esse pacote e vê que é para uma porta que anteriormente lembrava ter sido atribuída às operações NAT para o endereço IP 192.168.1.12(meu endereço IP).

Resposta TCP Packet do meu roteador
Origem: 64.34.119.12(superuser.com)
Porta de origem: 80
Destino: 192.168.1.12(meu IP)
Porta de destino: 11111(a porta criada pelo meu computador)

Der Hochstapler
fonte
1
Eu editei sua resposta, ela não mostrava claramente o que estava acontecendo com os números de porta. Eu adicionei mais exemplos nas etapas intermediárias e quais os números de porta em que cada etapa.
Scott Chamberlain
1
@OliverSalzburg Eu estava procurando a mesma pergunta respondida e sua explicação me ajudou a lembrar, apenas uma pergunta rápida sobre isso. Pensando em quanto tempo o roteador manteria esse mapeamento reverso (porta de origem) parece que ficaria sem espaço se continuasse fazendo isso para tantas solicitações, ele os descarregaria com muita regularidade?
Ahmed
@ Ahmed: a quantidade de memória para acompanhar essas informações é limitada. Existem 65536 números de porta possíveis, eles são armazenados em 2 bytes. Portanto, lembrar-se de um endereço IP (4 bytes) para cada porta somaria 65536 x 4 bytes = 262144 bytes = 256 kB. No entanto, as especificidades são implementadas no roteador, isso não é muita memória.
Der Hochstapler
@ Oliver Ótima resposta, exatamente o que eu estava procurando! Eu tenho algumas perguntas - (1) "o mesmo jogo continua com todos os roteadores do mundo" - é preciso? Certamente o campo de origem não continuaria sendo substituído a cada etapa? (2) O roteador lembra as portas abertas a longo prazo ou as elimina regularmente para solicitações que não respondem? (3) Isso significa que um hacker pode passar os pacotes pelo firewall do seu roteador com um ataque intermediário: espionando os pacotes TCP de saída e, em seguida, visando a porta TCP aberta do roteador com um IP de origem falsificado que corresponda ao seu destino?
Jon Bentley
1
Como uma resposta de ping ICMP volta para um computador na LAN? Tem algo semelhante à porta para TCP? E quanto a outros protocolos?
Jean
11

Tradução de endereços de rede . Resumidamente, quando o roteador do gateway da LAN privada substitui o endereço de origem da LAN privada por seu próprio endereço público, ele modifica o pacote de alguma maneira, como atribuir um número de porta exclusivo e sem sentido local, que mapeia de volta ao nó da LAN de origem e à solicitação de saída . Ele se lembra desse mapeamento de porta, portanto, quando uma resposta retorna ao IP público / porta exclusiva #, ele (o roteador) sabe como mapear novamente essa para o nó de origem. É também assim que você pode executar várias guias, navegadores ou instâncias do navegador e as respostas a cada solicitação do navegador retornam ao navegador e à guia corretos.

JRobert
fonte
2
JRobert: E os protocolos IP (por exemplo, ICMP), exceto TCP ou UDP, que não possuem um número de porta?
Uri
0

Quando um pacote inicial chega à interface externa do roteador, ele altera o endereço IP de destino do pacote conforme a configuração de encaminhamento de porta e transmite o pacote modificado na interface interna do roteador (após o ARP usual, se necessário)

O pacote chega ao servidor da web e ainda possui um endereço IP de origem externo que será usado como endereço de destino para qualquer resposta. O servidor endereça os pacotes de resposta de saída da maneira usual com um endereço IP de destino igual ao endereço IP de origem da solicitação. Como o endereço IP do solicitante é externo, o pacote é endereçado, na camada MAC, à interface interna do roteador.

Observe que existem destinos diferentes em cada camada de rede.

RedGrittyBrick
fonte
0

O encaminhamento de porta geralmente é feito em um roteador ou dispositivo adjacente a ele. Quando um dispositivo em uma LAN envia tráfego para outro dispositivo na mesma LAN, o roteador não está envolvido. O tráfego nem sequer toca nele. Suas regras de encaminhamento de porta não terão efeito no tráfego de LAN para LAN.

A Ethernet foi projetada com uma topologia de "barramento" em que cada computador estava fisicamente conectado ao mesmo meio. Enquanto os switches modernos otimizam o fluxo de tráfego, aprendendo o endereço MAC na outra extremidade da porta e replicando o tráfego de acordo, a topologia do "barramento" ainda permanece. Qualquer coisa conectada a um switch padrão pode "diretamente" alcançar qualquer outra coisa (supondo que esteja dentro da mesma sub-rede) sem ter que "passar" por um dispositivo intermediário, como um roteador.

Você pode ficar confuso se o dispositivo ao qual você está conectando todos os computadores tiver várias portas Ethernet "LAN" e depois uma única porta "WAN". Esses tipos de dispositivos são na verdade um roteador e um switch no mesmo chassi.

Portanto, dentro da sua LAN, se o servidor HTTP tiver o endereço 192.168.1.55, para alcançá-lo dentro da LAN, você precisará digitar " http://192.168.1.55 " na barra de endereços do navegador. O roteador nunca o vê. Para alcançá-lo fora da sua LAN, você precisará digitar o seu IP externo, por exemplo, " http://256.99.88.77 : {a porta que você enviou aqui}" ou o que quer que seja. Isso atinge seu roteador, a função NAT do roteador funciona nele e, em seguida, o roteador envia para 192.168.1.55.

LawrenceC
fonte
0

Simplesmente, quando um computador dentro da LAN privada inicia uma conexão de saída, o gateway NAT gera automaticamente um mapeamento de porta para ele. Eles são quase os mesmos que os mapeamentos de portas que você inseriu manualmente antes: {porta pública, endereço privado, porta privada} e são usados ​​da mesma maneira. A maior diferença com os mapeamentos dinâmicos é que o gateway NAT geralmente precisa atribuir arbitrariamente as portas públicas para os mapeamentos, quando o número de porta esperado já está em uso.

Spiff
fonte