In che modo NAT condivide un indirizzo IPv4 pubblico su più indirizzi IPv4 privati ​​[chiuso]


10

Penso che sia una domanda molto classica, ma, pensando di avere un po 'di background, non ho più abbastanza vocabolario per cercare e capire correttamente nel Web.

Diciamo che ho una rete domestica con 192.168.0.1 (IP.1) e 192.168.0.2 (IP.2) e stiamo entrambi giocando a Counter Strike colpendo esattamente lo stesso server esterno.

Come fa il mio router di casa a sapere quale pacchetto andrà a IP.1? Leggo spesso cose con NAT e indirizzi xxx.xxx/y. ** Dove è scritta la parte / y nello stack TCP / IP?

Abbiamo bisogno di assolutamente NAT per questo? Quello che ho capito dall'articolo di Wikipedia è che NAT è realizzato per ottimizzare gli indirizzi IP, quando alcuni computer sono spenti. Permette anche di connettere 5 dispositivi con 1 solo IP pubblico?


Uno a molti dovrebbe rispondere alle tue domande. Inoltre, le domande sulla rete domestica e sull'istruzione di livello base non sono la soluzione migliore per questo sito.
Craig Constantine,

Risposte:


14

(Per quanto segue ignorerò qualsiasi ricerca DNS o azione di livello due, poiché questa non è la parte rilevante per la storia NAT.)

Qualsiasi connessione TCP è una tupla di quattro parti:

<source IP> <source port> <destination IP> <destination port>

In breve: l'IP di destinazione viene utilizzato per ottenere il pacchetto sulla macchina corretta, la porta di destinazione viene utilizzata per ottenere il pacchetto su quella macchina nel programma / sessione corretto L'IP di origine viene utilizzato per sapere dove inviare eventuali risposte. Lo stesso vale per la porta di origine. Quando viene inviata una risposta, l'origine e la destinazione vengono semplicemente scambiate.

Cominciamo con due computer senza NAT:

  • Il computer ha IP 1.1.1.1
  • Il server web ha IP 3.3.3.3
  • La porta standard per HTTP è 80

Quando un computer richiede una pagina Web, seleziona prima un numero di porta casuale inutilizzato dall'intervallo casuale (1024-65535). Scegliamo 2345. Quindi si verificherà la seguente sequenza: Il computer invia il pacchetto con: IP di 1.1.1.1origine 2345, porta di origine , IP di 3.3.3.3destinazione, porta di destinazione 80. I pacchetti arrivano al server web, vede il proprio IP e la propria porta 80, quindi sa che questa è una richiesta per una pagina web. Il server web quindi invia nuovamente la pagina Web in pacchetti con IP di 3.3.3.3origine, porta di origine 80, IP di 1.1.1.1destinazione, porta di destinazione 2345. Il computer riceve questi pacchetti e sa quale pagina Web richiesta era, a causa del numero di porta 2345.

Queste combinazioni di porte sono spesso scritte come tali: 1.1.1.1:2345e 3.3.3.3:80.

Ora, il numero di computer su Internet supera di gran lunga il numero di indirizzi IPv4 disponibili. Per preservare lo spazio degli indirizzi, è stata introdotta una serie di intervalli di indirizzi privati, che possono essere liberamente utilizzati per la condivisione degli indirizzi. Questi rangese sono chiamati RFC1918 e sono i seguenti:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

Questi indirizzi non si trovano da nessuna parte nelle tabelle di routing di Internet, quindi se invii un pacchetto con una destinazione in questi intervalli sul backbone di Internet, verranno semplicemente eliminati. Questo perché milioni di persone usano gli stessi indirizzi. Questi indirizzi devono essere tradotti in qualcosa di utile per Internet. È qui che arriva la traduzione dell'indirizzo di rete:

Abbiamo due computer:

  • A: 192.168.0.1e B:192.168.0.2
  • Il loro gateway ha un IP pubblico di 1.1.1.1.
  • Manteniamo lo stesso server web.
  • Entrambi i computer desiderano la stessa pagina Web dallo stesso server.

Prima entrambi i computer selezionano una porta casuale: diciamo: 192.168.0.1:2345e 192.168.0.2:5432.

Computer A invia un pacchetto con origine 192.168.0.1:2345e destinazione 3.3.3.3:80. Il gateway traduce questo pacchetto nella 1.1.1.1:2345destinazione di origine 3.3.3.3:80e ricorda che le risposte a questa combinazione vanno a 192.168.0.1. Pertanto, quando riceve una risposta con origine 3.3.3.3:80e destinazione 1.1.1.1:2345, la tradurrà in origine 3.3.3.3:80e destinazione 192.168.0.1:2345e invierà il pacchetto.

Il computer B invia il suo pacchetto con origine 192.168.0.2:5432e destinazione 3.3.3.3:80. Il gateway traduce questo pacchetto nella 1.1.1.1:5432destinazione di origine 3.3.3.3:80e ricorda che le risposte a questa combinazione vanno a 192.168.0.2. Pertanto, quando riceve una risposta con origine 3.3.3.3:80e destinazione 1.1.1.1:5432, la tradurrà in origine 3.3.3.3:80e destinazione 192.168.0.2:5432e invierà il pacchetto.

Se entrambi i computer selezionano lo stesso numero di porta di origine, il gateway selezionerà semplicemente un altro numero di porta di origine casuale gratuito e ricorderà di tradurre anche il numero di porta. Questo a volte viene indicato come PAT (Port Address Translation). Questo è fondamentalmente un sottoinsieme di NAT.

Ci sono diverse implementazioni per tutto questo. Il gateway potrebbe semplicemente ricordare "Computer X ha utilizzato la porta di origine Y" e inoltrare qualsiasi cosa con la porta Y al computer X. Potrebbe ricordare che il Computer X ha utilizzato la porta di origine Y e la destinazione Z "e inoltrare qualsiasi cosa dalla porta Z alla porta Y di nuovo a computer X. Oppure esiste l'opzione che ricorda l'intera tupla e invia solo traffico al computer X che corrisponde all'intero ip e porta di origine / destinazione.


Grazie. Ho pensato che qualsiasi client avrebbe inviato con la sua porta 80 a un'altra porta 80. Penso che molti non specialisti credano allo stesso modo.
Nicolas Zozol,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.