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.
Respostas:
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.com
que 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.com
e 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.com
porta80
), ele coloca uma nova porta de origem (como12345
).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)fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte