A implementação de NAT varia. Mesmo os 3 tipos de NAT nem sempre são como você descreveu. O NAT estático pode ter IP + porta estática. Ou seja, IP privado / Port mapeia para IP público / porta. E você pode ter diferentes Private IP / Port mapeados para o mesmo IP público, mas porta diferente. (Existem, na verdade, mais de 3 tipos de NAT, mas essa é uma discussão diferente)
Dito isso, vamos continuar com o seu exemplo. Diga NAT estático de 192.168.1.2 => 25.4.233.34
.
A implementação de NAT normalmente tem uma tabela de tradução de NAT para procurar o pacote de entrada, que tem um IP de origem do host da Internet e o IP de destino de um dos IPs públicos do NAT. Essa tabela de conversão é atualizada sempre que uma nova tradução ocorre e também é eliminada de tempos em tempos.
Se houver uma correspondência de tupla completa (que significa IP / porta de origem, IP / porta de destino, protocolo IP), o NAT usará a correspondência para traduzir. Também pode ser uma correspondência parcial (você pode pensar que a entrada NAT estática tem uma entrada parcial usando um caractere curinga para porta). Diga, o pacote recebido é TCP 213.3.2.4:33442 -> 25.4.233.34:80
Se houver uma correspondência ( 24.4.233.34
), ela usará a tradução estática para mapear o IP de destino de entrada ( 24.4.233.34
) para o IP privado ( 192.168.1.2
) em seu NAT estático. No caso da entrada NAT estática, o NAT só precisa traduzir o IP de destino e as portas passam sem modificações. E o host 192.168.1.2
distribuirá o pacote para a base do aplicativo na porta de destino. isto é, a aplicação na porta TCP 80 receberá o pacote.