Como o NAT compartilha um endereço IPv4 público entre vários endereços IPv4 privados [fechado]

10

Eu acho que é uma pergunta muito clássica, mas, embora eu tenha alguma experiência, não tenho mais vocabulário suficiente para pesquisar e entender corretamente na Web.

Digamos que eu tenho uma rede doméstica com 192.168.0.1 (IP.1) e 192.168.0.2 (IP.2) e estamos jogando com o Counter Strike, atingindo exatamente o mesmo servidor externo.

Como meu roteador doméstico sabe qual pacote vai para IP.1? Costumo ler coisas com endereços NAT e xxx.xxx/y. ** Onde está escrita a parte / y na pilha TCP / IP?

Precisamos absolutamente de NAT para isso? O que entendi no artigo da Wikipedia é que o NAT é feito para otimizar endereços IP, quando alguns computadores são desligados. Também permite conectar 5 dispositivos com apenas 1 IP público?

Nicolas Zozol
fonte
Um para muitos deve responder às suas perguntas. Além disso, as questões de redes domésticas e de educação básica não são as mais adequadas para este site.
Craig Constantine

Respostas:

14

(Para o seguinte, ignorarei as pesquisas de DNS ou a ação da camada dois, pois essa não é a parte relevante para a história do NAT.)

Qualquer conexão TCP é composta por quatro partes:

<source IP> <source port> <destination IP> <destination port>

Em resumo: o IP de destino é usado para obter o pacote na máquina correta, a porta de destino é usada para obter o pacote nessa máquina no programa / sessão correto O IP de origem é usado para saber para onde enviar respostas. O mesmo vale para a porta de origem. Quando uma resposta é enviada, a origem e o destino são simplesmente trocados.

Vamos começar com dois computadores sem NAT:

  • O computador tem IP 1.1.1.1
  • O servidor da web tem IP 3.3.3.3
  • A porta padrão para HTTP é 80

Quando um computador solicita uma página da Web, ele primeiro seleciona um número de porta aleatório não utilizado do intervalo aleatório (1024-65535). Vamos escolher 2345. Em seguida, ocorrerá a seguinte sequência: O computador envia seu pacote com: IP de 1.1.1.1origem 2345, porta de origem , IP de 3.3.3.3destino, porta de destino 80. Os pacotes chegam ao servidor da web, ele vê seu próprio IP e porta 80, então sabe que isso é uma solicitação para uma página da web. O servidor da Web envia a página da Web de volta em pacotes com IP de 3.3.3.3origem, porta de origem 80, IP de 1.1.1.1destino, porta de destino 2345. O computador recebe esses pacotes e sabe qual foi a página solicitada por causa do número da porta 2345.

Essas combinações de portas geralmente são escritas da seguinte maneira: 1.1.1.1:2345e 3.3.3.3:80.

Agora, o número de computadores na Internet supera em muito o número de endereços IPv4 disponíveis. Para preservar o espaço de endereço, foi introduzido um conjunto de intervalos de endereços privados, que podem ser usados ​​livremente para o compartilhamento de endereços. Estes rangese são referidos como RFC1918 e são os seguintes:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

Esses endereços não estão nas tabelas de roteamento da Internet, portanto, se você enviar um pacote com um destino nesses intervalos na espinha dorsal da Internet, eles simplesmente serão descartados. Isso ocorre porque milhões de pessoas usam os mesmos endereços. Esses endereços precisam ser traduzidos para algo útil para a internet. É aqui que entra a Tradução de endereços de rede:

Nós temos dois computadores:

  • A: 192.168.0.1e B:192.168.0.2
  • O gateway deles tem um IP público de 1.1.1.1.
  • Mantemos o mesmo servidor da web.
  • Ambos os computadores desejam a mesma página da Web do mesmo servidor.

Primeiro, os dois computadores selecionam uma porta aleatória: digamos: 192.168.0.1:2345e 192.168.0.2:5432.

Computador A envia seu pacote com origem 192.168.0.1:2345e destino 3.3.3.3:80. O gateway converte esse pacote no 1.1.1.1:2345destino de origem 3.3.3.3:80e lembra que todas as respostas a essa combinação vão para 192.168.0.1. Portanto, quando receber uma resposta com origem 3.3.3.3:80e destino 1.1.1.1:2345, ela será traduzida para origem 3.3.3.3:80e destino 192.168.0.1:2345e enviará o pacote.

O computador B envia seu pacote com origem 192.168.0.2:5432e destino 3.3.3.3:80. O gateway converte esse pacote no 1.1.1.1:5432destino de origem 3.3.3.3:80e lembra que todas as respostas a essa combinação vão para 192.168.0.2. Portanto, quando receber uma resposta com origem 3.3.3.3:80e destino 1.1.1.1:5432, ela será traduzida para origem 3.3.3.3:80e destino 192.168.0.2:5432e enviará o pacote.

Se os dois computadores selecionarem o mesmo número da porta de origem, o gateway simplesmente escolherá outro número de porta de origem aleatória gratuita e lembre-se de traduzir também o número da porta. Às vezes, isso é chamado de PAT (Port Address Translation). Este é basicamente um subconjunto do NAT.

Existem várias implementações para isso tudo. O gateway pode simplesmente lembrar "Computador X usou a porta de origem Y" e encaminhar qualquer coisa com a porta Y para o computador X. Ele pode se lembrar que o Computador X usou a porta de origem Y e o destino Z "e encaminhar apenas qualquer coisa da porta Z para a porta Y de volta para computador X. Ou existe a opção de lembrar toda a tupla e enviar apenas tráfego para o computador X que corresponda a todo o IP e porta de origem / destino.

JelmerS
fonte
Obrigado. Eu pensei que qualquer cliente enviaria com sua porta 80 para outra porta 80. Acho que muitos não especialistas acreditam no mesmo.
Nicolas Zozol