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