Esiste un malinteso generale tra NAT (Network address translation) e PAT (Port Address Translation), che è quello che usiamo principalmente nei nostri router domestici.
NAT
Supponiamo di avere una rete con la seguente topologia:
Private_Network <-------> Router <-------> Internet
L'interfaccia del router collegato a Private_Network ha un indirizzo IP privato , ovvero uno che non è univoco in The_Internet . D'altra parte, nel caso di NAT , il router ha più interfacce collegate a Internet . Ogni interfaccia ha un indirizzo IP univoco in The_Internet . Ora supponiamo che Host_A e Host_B siano nella rete privata e che entrambi vogliano accedere a Website_X in The_Internet contemporaneamente. Gli IP e le porte di Host_AIl pacchetto sarà:
IP di origine: IP privato di Host_A
Porta di origine: una porta su Host_A
IP di destinazione: Sito_X pubblico / unico IP
Destinazione Porta: una porta in cui il server di Website_X è in ascolto
e allo stesso modo per un pacchetto proveniente da Host_B .
Se l'IP di origine rimane invariato, Website_X risponderà a un indirizzo IP che è privato, cioè non univoco, e quindi il pacchetto non sarà mai in grado di trovare la via del ritorno. Per risolvere questo problema, il router verifica se non viene utilizzato uno dei suoi indirizzi IP univoci collegati a Internet . In tal caso, esegue la seguente mappatura:
Host_A 's private IP ======= Router's_unique_IP_K
e ora il pacchetto che è partito da Host_A andando a Website_X e ora sta lasciando l'interfaccia del router connesso a The_Internet avrà il modulo:
IP di origine: Router's_unique_IP_K
Porta di origine: una porta su Host_A
IP di destinazione: IP pubblico / unico
Porta di destinazione IP di Website_X
: una porta su cui il server di Website_X è in ascolto
Quindi puoi capire che esiste un'associazione one-to-one da IP privati a IP pubblici. Pertanto, quando un pacchetto arriva da Website_X al router , questa associazione viene verificata e l'indirizzo IP di destinazione viene riportato a quello privato e consegnato con successo all'host giusto.
Come puoi vedere, questo metodo è abbastanza semplice, ma presenta un grosso svantaggio: ogni host privato deve avere un indirizzo IP univoco riservato, che è costoso, quindi scegliamo di avere meno indirizzi IP univoci rispetto agli host nella rete privata. Pertanto, se tutti gli host privati tentano di accedere a The_Internet contemporaneamente, solo un sottoinsieme di essi, uguale al numero di indirizzi IP pubblici disponibili che il routerha, avrà accesso e il resto verrà negato.
Per contrastare ciò abbiamo creato PAT .
PAT
PAT è ciò che utilizza la stragrande maggioranza dei nostri router domestici. La limitazione di base è che il router ha un unico indirizzo IP univoco con cui si connette a The_Internet , ma vogliamo comunque consentire a più host dalla rete privata di accedere a The_Internet contemporaneamente.
Il modo in cui lo facciamo è "simile" al modo in cui NAT lo fa con una differenza fondamentale: invece del router che detiene un pool di indirizzi IP, contiene un pool di numeri di porta. Più precisamente, un pacchetto che arriva al router da Host_A in Private_Network destinato a Website_X inThe_Internet avrà il seguente formato:
IP di origine: IP privato di Host_A
Porta di origine: una porta su Host_A
IP di destinazione: Sito_X pubblico / unico IP
Destinazione Porta: una porta in cui il server di Website_X è in ascolto
Ora il router eseguirà due attività:
- Cambia l'IP di origine in IP pubblico univoco del router AND
- Cambia la porta di origine in una porta da un pool che il router gestisce e non è già utilizzato, ad esempio Port_Z
e ora il pacchetto che è partito da Host_A andando a Website_X e ora sta lasciando l'interfaccia del router connesso a The_Internet avrà il modulo:
IP di origine: Router's_unique_IP_K
Porta di origine: Port_Z
IP di destinazione: Website_X 's pubblico / IP univoco
Porta Destinazione: port A dove Website_X ' del server s sta ascoltando
e il router manterrà il seguente mapping:
L' IP privato di Host_A E una porta su Host_A ======= Porta_Z
Perché funziona?
Ora quando un pacchetto ritorna, il router controlla semplicemente il numero di porta di destinazione e cambia l'indirizzo IP di destinazione e il numero di porta di destinazione in base alla mappatura pre-menzionata e il pacchetto viene consegnato correttamente.
Cosa succede se eseguo più applicazioni sullo stesso host?
Applicazioni diverse avranno porte diverse, per definizione, quindi verranno mappate su una porta diversa dal router .
Cosa succede se più host tentano di accedere a The_Internet contemporaneamente e utilizzano tutti la stessa applicazione?
Diversi host avranno indirizzi IP privati diversi, per definizione, quindi verranno mappati su una porta diversa dal router .
PAT si sta pericolosamente bilanciando in uno spazio grigio di livello incrociato. I numeri di porta fanno parte del protocollo di trasporto mentre i router possono operare fino al protocollo Internet. Quindi tecnicamente parlando è qualcosa che non è consentito dai protocolli. Pertanto ci sono, almeno teoricamente, potenziali pericoli: il pool di porte è limitato. Pertanto, se la mia rete privata è composta da 1000 host e ognuno esegue port_pool / 10 applicazioni, la tabella di mappatura sul router esaurirà le voci disponibili e l'accesso alle applicazioni verrà negato.
Questa risposta ha superato di gran lunga la lunghezza prevista, ma spero sia stata utile.