"A tradução de endereço de porta (PAT) resolve conflitos que surgem quando vários hosts usam o mesmo número de porta de origem para estabelecer diferentes conexões externas ao mesmo tempo. O PAT pode então atribuir à conexão um número de porta de umconjunto de portas disponíveis, inserindo este número de porta no campo da porta de origem."
https://en.wikipedia.org/wiki/Network_address_translation
E se tivermos dezenas de servidores altamente escaláveis que aceitam milhares de solicitações? A exaustão da porta parece um limite muito básico (64k) que alcançaremos facilmente.
Como a indústria lida com esses cenários?
Responder1
No final das contas, o NAT realmente se resume a uma tabela de pesquisa no dispositivo NAT contendo os mapeamentos de quais conexões vão para onde. Essas entradas de tabela, entretanto, são criadas em umpor sessãobase.
Ex. Se eu tiver um anfitrião em10.10.10.10, querendo se comunicar com um servidor na internet em8.8.8.8, através do meu gateway de internet cujo IP público é1.1.1.1, quando essa comunicação acontecer, meu gateway de Internet poderá criar um par de entradas parecidas com estas:
Fonte | Esporte | Destino | Porto | Ações |
---|---|---|---|---|
10.10.10.10 | 20.000 | 8.8.8.8 | 80 | SNAT 10.10.10.10:20000 --> 1.1.1.1:40000 |
8.8.8.8 | 80 | 1.1.1.1 | 40.000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20000 |
Embora possa parecer que1.1.1.1:40000agora está ocupado para esta sessão, deixando ~63999 portas, isso não é exatamente verdade. Como essas entradas são feitas por sessão, seria perfeitamente razoável que ocorressem comunicações subsequentes e construíssemos a tabela da seguinte forma:
Fonte | Esporte | Destino | Porto | Ações |
---|---|---|---|---|
10.10.10.10 | 20.000 | 8.8.8.8 | 80 | SNAT 10.10.10.10:20000 --> 1.1.1.1:40000 |
8.8.8.8 | 80 | 1.1.1.1 | 40.000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20000 |
10.10.10.10 | 20001 | 8.8.8.8 | 81 | SNAT 10.10.10.10:20001 --> 1.1.1.1:40000 |
8.8.8.8 | 81 | 1.1.1.1 | 40.000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20001 |
10.10.10.10 | 20002 | 8.8.4.4 | 80 | SNAT 10.10.10.10:20002 --> 1.1.1.1:40000 |
8.8.4.4 | 80 | 1.1.1.1 | 40.000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20002 |
10.10.10.10 | 20003 | 8.8.4.4 | 81 | SNAT 10.10.10.10:20003 --> 1.1.1.1:40000 |
8.8.4.4 | 81 | 1.1.1.1 | 40.000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20003 |
Portanto, na interface pública (que normalmente é onde você estaria preocupado com o esgotamento do NAT), podemos ver que existem efetivamente 4 sessões:
1.1.1.1:40000 --> 8.8.8.8:80
1.1.1.1:40000 --> 8.8.8.8:81
1.1.1.1:40000 --> 8.8.4.4:80
1.1.1.1:40000 --> 8.8.4.4:81
mas essas 4 sessões não estão consumindo totalmente 4 portas, e o dispositivo NAT sabe exatamente para onde o tráfego pertencente a qualquer uma dessas 4 sessões deve ser roteado.
Portanto, embora possa parecer que há um limite de porta de 64k, na verdade é mais parecido com 64k por soquete de destino (com algumas ressalvas). Não é inesgotável, mas certamente é mais escalável do que 64k fixos.