Internet: architettura e protocolli/NAT
Il NAT è un modo per connettere ad Internet più host utilizzando un unico indirizzo IP. A ogni host viene assegnato un indirizzo privato, e tutti gli host sono collegati a un router che ha invece un indirizzo pubblico.
Il router modifica a livello 3 ogni pacchetto che vi transita, sia in invio sia in ricezione:
- invio verso l'esterno: il router converte l'indirizzo IP sorgente, privato, nell'indirizzo pubblico, e memorizza nella NAT translation table la coppia indirizzo IP sorgente privato e indirizzo IP di destinazione;
- ricezione dall'esterno: il router cerca nella NAT translation table l'indirizzo IP sorgente del pacchetto per trovare quale host interno aveva contattato quella destinazione, e quindi converte l'indirizzo IP di destinazione del pacchetto nell'indirizzo interno privato.
Per consentire a più host interni di contattare la stessa destinazione, il router può implementare il PAT: gli host aprono le connessioni alla destinazione su porte TCP/UDP diverse, e la NAT translation table memorizza anche la coppia di porte, in modo che alla ricezione di pacchetti il router possa distinguere tra i vari host in base alla porta utilizzata. Un riconoscimento basato su indirizzo MAC non permetterebbe a un host di aprire più connessioni TCP/UDP verso la stessa destinazione.
NAT traversal
modificaIn presenza di NAT alcune applicazioni possono presentare delle problematiche legate alla limitata raggiungibilità dall'esterno:
- port forwarding (usato per le applicazioni P2P): tutto il traffico che giunge a una certa porta viene inviato (forwarding) a un indirizzo IP privato configurato staticamente;
- relaying (usato da Skype): il client esterno si connette a un relay server di proprietà Skype, che a sua volta invia tutto il traffico al client dentro il NAT → l'utente non deve configurare manualmente la porta sul router.