Internet: architettura e protocolli/NAT

Indice del libro

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 modifica

In 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.