Come funziona la sottorete IPv4?


439

Questa è una domanda canonica sulle sottoreti IPv4.

Relazionato:

Come funziona la sottorete e come lo fai a mano o in testa? Qualcuno può spiegare sia concettualmente che con diversi esempi? Server Fault riceve molte domande sui compiti da casa della subnet, quindi potremmo usare una risposta per indicarle su Server Fault stesso.

  • Se ho una rete, come posso capire come suddividerla?
  • Se mi viene assegnata una maschera di rete, come faccio a sapere quale sia l'intervallo di rete?
  • A volte c'è una barra seguita da un numero, che cos'è quel numero?
  • A volte c'è una maschera di sottorete, ma anche una maschera jolly, sembrano la stessa cosa ma sono diverse?
  • Qualcuno ha menzionato qualcosa sul conoscere binario per questo?

Questa risposta in due parti spiega tutto ciò che volevi sapere sul calcolo dell'indirizzo IPv4 e altro ancora.
Ron Maupin,

Risposte:


648

Esistono subnet IP per consentire ai router di scegliere destinazioni appropriate per i pacchetti. È possibile utilizzare le subnet IP per spezzare reti più grandi per motivi logici (firewall, ecc.) O necessità fisiche (domini di trasmissione più piccoli, ecc.).

In poche parole, tuttavia, i router IP utilizzano le sottoreti IP per prendere decisioni di routing. Comprendi come funzionano queste decisioni e puoi capire come pianificare le subnet IP.

Contando fino a 1

Se sei già fluente nella notazione binaria (base 2) puoi saltare questa sezione.

Per quelli di voi che sono rimasti: vergognatevi di non essere fluenti nella notazione binaria!

Sì, potrebbe essere un po 'duro. È davvero molto semplice imparare a contare in binario e imparare scorciatoie per convertire binario in decimale e viceversa. Dovresti davvero sapere come farlo.

Il conteggio in binario è così semplice perché devi solo sapere come contare fino a 1!

Pensa al "contachilometri" di un'auto, tranne per il fatto che a differenza di un contachilometri tradizionale ogni cifra può contare solo fino a 1 da 0. Quando l'auto è fresca dalla fabbrica, il contachilometri indica "00000000".

Quando hai guidato il tuo primo miglio, il contachilometri indica "00000001". Fin qui tutto bene.

Quando hai guidato il tuo secondo miglio la prima cifra del contachilometri torna a "0" (poiché il suo valore massimo è "1") e la seconda cifra del contachilometri si sposta su "1", facendo leggere il contachilometri " 00000010" . Questo sembra il numero 10 in notazione decimale, ma in realtà è 2 (il numero di miglia che hai guidato fino ad ora) in notazione binaria.

Quando hai guidato il terzo miglio, il contachilometri indica "00000011", poiché la prima cifra del contachilometri ruota di nuovo. Il numero "11", in notazione binaria, è uguale al numero decimale 3.

Alla fine, quando hai guidato il tuo quarto miglio entrambe le cifre (che stavano leggendo "1" alla fine del terzo miglio) ritornano alla posizione zero e la terza cifra rotola su alla posizione "1", dandoci " 00000100" . Questa è la rappresentazione binaria del numero decimale 4.

Puoi memorizzare tutto ciò se vuoi, ma devi solo capire come il piccolo contachilometri "rotola" quando il numero che conta aumenta. È esattamente lo stesso di un tradizionale contachilometri decimale, tranne per il fatto che ogni cifra può essere solo "0" o "1" sul nostro "contachilometri binario" fittizio.

Per convertire un numero decimale in binario è possibile far avanzare il contachilometri, tick per tick, contando ad alta voce fino a quando non lo si è rotolato un numero di volte uguale al numero decimale che si desidera convertire in binario. Qualunque cosa venga visualizzata sul contachilometri dopo tutto quel calcolo e rotolamento sarebbe la rappresentazione binaria del numero decimale che hai contato fino a.

Dal momento che capisci come il contachilometri scorre in avanti, capirai anche come rotola all'indietro. Per convertire un numero binario visualizzato sul contachilometri in decimale, è possibile riportare indietro il contachilometri di un segno alla volta, contando ad alta voce fino a quando il contachilometri non legge "00000000". Quando tutto il conteggio e il rotolamento sono terminati, l'ultimo numero che dici ad alta voce sarà la rappresentazione decimale del numero binario con cui ha iniziato il contachilometri.

La conversione di valori tra binari e decimali in questo modo sarebbe molto noiosa. Potresti farlo, ma non sarebbe molto efficiente. È più facile imparare un piccolo algoritmo per farlo più velocemente.

Una rapida nota: ogni cifra in un numero binario è nota come "bit". Questa è "b" da "binario" e "esso" da "cifra". Un bit è una cifra binaria.

La conversione di un numero binario come, ad esempio, "1101011" in decimale è un processo semplice con un piccolo algoritmo a portata di mano.

Inizia contando il numero di bit nel numero binario. In questo caso, ci sono 7. Crea 7 divisioni su un foglio di carta (nella tua mente, in un file di testo, ecc.) E inizia a riempirle da destra a sinistra. Nello slot più a destra, inserisci il numero "1", perché inizieremo sempre con "1". Nello slot successivo a sinistra inserire il doppio del valore nello slot a destra (quindi, "2" in quello successivo, "4" in quello successivo) e continuare fino a quando tutti gli slot sono pieni. (Finirai per memorizzare questi numeri, che sono i poteri di 2, mentre lo fai sempre di più. Sto bene fino a 131.072 nella mia testa ma di solito ho bisogno di una calcolatrice o di un foglio dopo quello).

Quindi, dovresti avere quanto segue sul tuo foglio nelle tue piccole fessure.

 64    |    32    |    16    |    8    |    4    |    2    |    1    |

Trascrivi i bit dal numero binario sotto gli slot, in questo modo:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
  1          1          0         1         0         1         1

Ora aggiungi alcuni simboli e calcola la risposta al problema:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
       +          +          +         +         +         +         =

Facendo tutta la matematica, dovresti trovare:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
 64    +    32    +     0    +    8    +    0    +    2    +    1    =   107

Capito. "1101011" in decimale è 107. Sono solo semplici passaggi e facile matematica.

La conversione da decimale a binario è altrettanto semplice ed è lo stesso algoritmo di base, eseguito al contrario.

Supponiamo di voler convertire il numero 218 in binario. Iniziando a destra di un foglio di carta, scrivi il numero "1". A sinistra, raddoppia quel valore (quindi, "2") e continua a muoverti verso la sinistra del foglio raddoppiando l'ultimo valore. Se il numero che si sta per scrivere è maggiore del numero da convertire, interrompere la scrittura. altrimenti, continua a raddoppiare il numero precedente e scrivere. (Convertire un numero elevato, come 34.157.216.092, in binario usando questo algoritmo può essere un po 'noioso ma è certamente possibile.)

Quindi, dovresti avere sul tuo foglio:

 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |

Hai smesso di scrivere numeri a 128 perché il raddoppio di 128, che ti darebbe 256, sarebbe grande rispetto al numero da convertire (218).

A partire dal numero più a sinistra, scrivi "218" sopra di esso (128) e chiediti: "218 è maggiore o uguale a 128?" Se la risposta è sì, gratta un "1" sotto "128". Sopra "64", scrivi il risultato di 218 meno 128 (90).

Guardando "64", chiediti: "90 è maggiore o uguale a 64?" Lo è, quindi dovresti scrivere un "1" sotto "64", quindi sottrarre 64 da 90 e scrivere sopra "32" (26).

Quando arrivi a "32", tuttavia, scopri che 32 non è maggiore o uguale a 26. In questo caso, scrivi uno "0" sotto "32", copia il numero (26) da sopra 32 "a sopra" 16 "e poi continua a porsi la stessa domanda con il resto dei numeri.

Quando hai finito, dovresti avere:

 218         90         26         26        10         2         2         0
 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |
   1          1          0          1         1         0         1         0

I numeri in alto sono solo note usate nel calcolo e non significano molto per noi. In fondo, tuttavia, viene visualizzato un numero binario "11011010". Abbastanza sicuro, 218, convertito in binario, è "11011010".

Seguendo queste semplicissime procedure è possibile convertire i binari in decimali e viceversa senza calcolatrice. La matematica è molto semplice e le regole possono essere memorizzate con un po 'di pratica.

Suddivisione degli indirizzi

Pensa al routing IP come alla consegna della pizza.

Quando ti viene chiesto di consegnare una pizza in "123 Main Street", è molto chiaro a te, come essere umano, che vuoi andare nell'edificio numerato "123" sulla strada chiamata "Main Street". È facile sapere che devi andare al blocco di 100 di Main Street perché il numero dell'edificio è compreso tra 100 e 199 e la maggior parte degli isolati sono numerati in centinaia. "Sai" come dividere l'indirizzo.

I router forniscono pacchetti, non pizza. Il loro lavoro è lo stesso di un pizzaiolo: portare il carico (pacchetti) il più vicino possibile alla destinazione. Un router è collegato a due o più sottoreti IP (per essere assolutamente utile). Un router deve esaminare gli indirizzi IP di destinazione dei pacchetti e suddividere tali indirizzi di destinazione nei loro componenti "nome strada" e "numero edificio", proprio come il driver della pizza, per prendere decisioni sulla consegna.

Ogni computer (o "host") su una rete IP è configurato con un indirizzo IP e una subnet mask univoci. Tale indirizzo IP può essere suddiviso in un componente "numero edificio" (come "123" nell'esempio sopra) chiamato "ID host" e un componente "nome strada" (come "Main Street" nell'esempio sopra) chiamato "ID di rete". Per i nostri occhi umani, è facile vedere dove si trovano il numero dell'edificio e il nome della via in "123 Main Street", ma è più difficile vedere quella divisione in "10.13.216.41 con una subnet mask di 255.255.192.0".

I router IP "sanno" come suddividere gli indirizzi IP in queste parti componenti per prendere decisioni di routing. Poiché la comprensione di come i pacchetti IP vengono instradati dipende dalla comprensione di questo processo, dobbiamo anche sapere come suddividere gli indirizzi IP. Fortunatamente, estrarre l'ID host e l'ID di rete da un indirizzo IP e una subnet mask è in realtà abbastanza semplice.

Inizia scrivendo l'indirizzo IP in binario (usa una calcolatrice se non hai ancora imparato a farlo nella tua testa, ma prendi nota di come imparare a farlo-- è davvero molto facile e impressiona il sesso opposto a parti):

      10.      13.     216.      41
00001010.00001101.11011000.00101001

Scrivi anche la subnet mask in binario:

     255.     255.     192.       0
11111111.11111111.11000000.00000000

Scritti fianco a fianco, puoi vedere che il punto nella maschera di sottorete in cui "stop" di "1" si allinea "a un punto dell'indirizzo IP. Questo è il punto in cui l'ID di rete e l'ID host si dividono. Quindi, in questo caso:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

I router utilizzano la subnet mask per "mascherare" i bit coperti da 1 nell'indirizzo IP (sostituendo i bit che non sono "mascherati" con 0) per estrarre l'ID di rete:

      10.      13.     192.       0
00001010.00001101.11000000.00000000 - Network ID

Allo stesso modo, usando la subnet mask per "mascherare" i bit coperti da 0 nell'indirizzo IP (sostituendo i bit che non sono "mascherati" con 0 di nuovo) un router può estrarre l'ID host:

       0.       0.      24.      41
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Per i nostri occhi umani non è facile vedere la "rottura" tra l'ID di rete e l'ID host come lo è tra il "numero di costruzione" e il "nome della via" negli indirizzi fisici durante la consegna della pizza, ma l'effetto finale è il stesso.

Ora che puoi dividere gli indirizzi IP e le maschere di sottorete in ID host e ID di rete, puoi indirizzare l'IP proprio come fa un router.

Più terminologia

Vedrai le subnet mask scritte su Internet e nel resto di questa risposta come (IP / numero). Questa notazione è nota come notazione "Classless Inter-Domain Routing" (CIDR). "255.255.255.0" è composto da 24 bit di 1 all'inizio, ed è più veloce scriverlo come "/ 24" che come "255.255.255.0". Per convertire un numero CIDR (come "/ 16") in una subnet mask decimale puntata, basta scrivere quel numero di 1, dividerlo in gruppi di 8 bit e convertirlo in decimale. (Un "/ 16" è "255.255.0.0", per esempio.)

Ai vecchi tempi, le maschere di sottorete non erano specificate, ma piuttosto venivano derivate guardando alcuni bit dell'indirizzo IP. Un indirizzo IP che inizia con 0 - 127, ad esempio, aveva una subnet mask implicita di 255.0.0.0 (chiamata indirizzo IP di "classe A").

Queste sottorete implicite non vengono utilizzate oggi e non raccomando di conoscerle più a meno che tu non abbia la sfortuna di gestire apparecchiature molto vecchie o vecchi protocolli (come RIPv1) che non supportano l'indirizzamento IP senza classi. Non parlerò più di queste "classi" di indirizzi perché è inapplicabile oggi e può essere fonte di confusione.

Alcuni dispositivi usano una notazione chiamata "maschere jolly". Una "maschera jolly" non è altro che una maschera di sottorete con tutti gli 0 dove ci sarebbero 1 e 1 dove ci sarebbero 0. La "maschera jolly" di a / 26 è:

 11111111.11111111.11111111.11000000 - /26 subnet mask
 00000000.00000000.00000000.00111111 - /26 "wildcard mask"

In genere vengono visualizzate "maschere jolly" utilizzate per abbinare gli ID host negli elenchi di controllo di accesso o nelle regole del firewall. Non ne discuteremo più qui.

Come funziona un router

Come ho detto prima, i router IP hanno un lavoro simile a quello di un autista di consegna di pizza in quanto devono portare il loro carico (pacchetti) a destinazione. Quando viene presentato con un pacchetto associato all'indirizzo 192.168.10.2, un router IP deve determinare quale delle sue interfacce di rete avvicinerà il pacchetto alla destinazione.

Diciamo che sei un router IP e hai interfacce collegate a te numerate:

  • Ethernet0 - 192.168.20.1, maschera di sottorete / 24
  • Ethernet1 - 192.168.10.1, maschera di sottorete / 24

Se ricevi un pacchetto da consegnare con un indirizzo di destinazione "192.168.10.2", è abbastanza facile dire (con i tuoi occhi umani) che il pacchetto dovrebbe essere inviato all'interfaccia Ethernet1, perché l'indirizzo dell'interfaccia Ethernet1 corrisponde alla destinazione del pacchetto indirizzo. Tutti i computer collegati all'interfaccia Ethernet1 avranno indirizzi IP che iniziano con "192.168.10.", Poiché l'ID di rete dell'indirizzo IP assegnato all'interfaccia Ethernet1 è "192.168.10.0".

Per un router, questo processo di selezione del percorso viene eseguito creando una tabella di routing e consultando la tabella ogni volta che viene consegnato un pacchetto. Una tabella di routing contiene ID di rete e nomi dell'interfaccia di destinazione. Sai già come ottenere un ID di rete da un indirizzo IP e una subnet mask, quindi sei sulla buona strada per costruire una tabella di routing. Ecco la nostra tabella di routing per questo router:

  • ID di rete: 192.168.20.0 (11000000.10101000.00010100.00000000) - Maschera di sottorete a 24 bit - Interfaccia Ethernet0
  • ID di rete: 192.168.10.0 (11000000.10101000.00001010.00000000) - Maschera di sottorete a 24 bit - Interfaccia Ethernet1

Per il nostro pacchetto in entrata associato a "192.168.10.2", dobbiamo solo convertire l'indirizzo di quel pacchetto in binario (come umani - il router lo ottiene come binario dal filo per cominciare) e tentare di abbinarlo a ciascun indirizzo nel nostro instradamento tabella (fino al numero di bit nella maschera di sottorete) fino a quando non abbiniamo una voce.

  • Destinazione pacchetto in entrata: 11000000.10101000.00001010.00000010

Confrontandolo con le voci nella nostra tabella di routing:

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00010100.00000000 - Interface Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00001010.00000000 - Interface Ethernet1, 24 bit subnet mask
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

La voce per Ethernet0 corrisponde perfettamente ai primi 19 bit, ma poi interrompe la corrispondenza. Ciò significa che non è l'interfaccia di destinazione corretta. Si può vedere che l'interfaccia Ethernet1 corrisponde a 24 bit dell'indirizzo di destinazione. Ah ah! Il pacchetto è associato all'interfaccia Ethernet1.

In un router reale, la tabella di routing viene ordinata in modo tale che le maschere di sottorete più lunghe vengano verificate per prime le corrispondenze (ovvero i percorsi più specifici) e numericamente in modo tale che non appena viene trovata una corrispondenza, il pacchetto può essere instradato e non sono necessari ulteriori tentativi di abbinamento (il che significa che 192.168.10.0 sarebbe elencato per primo e 192.168.20.0 non sarebbe mai stato verificato). Qui, lo stiamo semplificando un po '. Strutture e algoritmi di dati elaborati rendono router IP più veloci, ma semplici algoritmi produrranno gli stessi risultati.

Percorsi statici

Fino a questo punto, abbiamo parlato del nostro ipotetico router come di reti direttamente connesse ad esso. Ovviamente non è così che funziona il mondo. Nell'analogia della guida della pizza, a volte l'autista non è autorizzato a entrare nell'edificio oltre alla reception e deve consegnare la pizza a qualcun altro per la consegna al destinatario finale (sospendi l'incredulità e sopporta con me mentre Allungo la mia analogia, per favore).

Cominciamo chiamando il nostro router dagli esempi precedenti "Router A". Conosci già la tabella di routing di RouterA come:

  • ID di rete: 192.168.20.0 (11000000.10101000.00010100.00000000) - maschera di sottorete / 24 - Router di interfaccia A-Ethernet0
  • ID di rete: 192.168.10.0 (11000000.10101000.00001010.00000000) - maschera di sottorete / 24 - Router di interfaccia A-Ethernet1

Supponiamo che ci sia un altro router, "Router B", con gli indirizzi IP 192.168.10.254/24 e 192.168.30.1/24 assegnati alle sue interfacce Ethernet0 ed Ethernet1. Ha la seguente tabella di routing:

  • ID di rete: 192.168.10.0 (11000000.10101000.00001010.00000000) - maschera di sottorete / 24 - Router di interfaccia B-Ethernet0
  • ID di rete: 192.168.30.0 (11000000.10101000.00011110.00000000) - subnet mask / 24 - Router di interfaccia B-Ethernet1

Nella bella arte ASCII, la rete si presenta così:

               Interface                      Interface
               Ethernet1                      Ethernet1
               192.168.10.1/24                192.168.30.254/24
     __________  V                  __________  V
    |          | V                 |          | V
----| ROUTER A |------- /// -------| ROUTER B |----
  ^ |__________|                 ^ |__________|
  ^                              ^
Interface                      Interface
Ethernet0                      Ethernet0
192.168.20.1/24                192.168.10.254/24

Si può vedere che il router B sa come "raggiungere" una rete, 192.168.30.0/24, di cui il router A non sa nulla.

Supponiamo che un PC con l'indirizzo IP 192.168.20.13 collegato alla rete connessa all'interfaccia Ethernet0 del router A invii un pacchetto al router A per la consegna. Il nostro ipotetico pacchetto è destinato all'indirizzo IP 192.168.30.46, che è un dispositivo collegato alla rete connessa all'interfaccia Ethernet1 del router B.

Con la tabella di routing mostrata sopra, nessuna voce nella tabella di routing del router A corrisponde alla destinazione 192.168.30.46, quindi il router A restituirà il pacchetto al PC di invio con il messaggio "Rete di destinazione irraggiungibile".

Per rendere il router A "consapevole" dell'esistenza della rete 192.168.30.0/24, aggiungere la seguente voce alla tabella di routing sul router A:

  • ID di rete: 192.168.30.0 (11000000.10101000.00011110.00000000) - maschera di sottorete / 24 - Accessibile tramite 192.168.10.254

In questo modo, il router A ha una voce della tabella di routing che corrisponde alla destinazione 192.168.30.46 del nostro pacchetto di esempio. Questa voce della tabella di routing dice effettivamente "Se ottieni un pacchetto associato a 192.168.30.0/24, invialo a 192.168.10.254 perché sa come gestirlo." Questa è l'analoga azione "consegnare la pizza alla reception" che ho citato in precedenza: passare il pacchetto a qualcun altro che sa come avvicinarlo alla sua destinazione.

L'aggiunta di una voce a una tabella di routing "a mano" è nota come aggiunta di una "route statica".

Se il router B desidera consegnare i pacchetti alla rete 255.255.255.0 della maschera di sottorete 192.168.20.0, avrà bisogno anche di una voce nella sua tabella di routing:

  • ID di rete: 192.168.20.0 (11000000.10101000.00010100.00000000) - subnet mask / 24 - Accessibile tramite: 192.168.10.1 (indirizzo IP del router A nella rete 192.168.10.0)

Ciò creerebbe un percorso per la consegna tra la rete 192.168.30.0/24 e la rete 192.168.20.0/24 attraverso la rete 192.168.10.0/24 tra questi router.

Volete sempre essere sicuri che i router su entrambi i lati di tale "rete interstiziale" abbiano una voce della tabella di routing per la rete "remota". Se il router B nel nostro esempio non avesse una voce della tabella di routing per la rete "lontana" 192.168.20.0/24 collegata al router A, il nostro ipotetico pacchetto dal PC a 192.168.20.13 arriverebbe al dispositivo di destinazione a 192.168.30.46, ma qualsiasi risposta che 192.168.30.46 ha tentato di rispedire sarebbe restituita dal router B come "Rete di destinazione irraggiungibile". La comunicazione a senso unico non è generalmente auspicabile. Assicurati sempre di pensare al traffico che scorre in entrambe le direzioni quando pensi alla comunicazione nelle reti di computer.

È possibile ottenere un sacco di chilometraggio da percorsi statici. I protocolli di routing dinamico come EIGRP, RIP, ecc., Non sono altro che un modo per i router di scambiarsi informazioni di routing tra loro che, di fatto, potrebbero essere configurati con route statiche. Un grande vantaggio dell'uso dei protocolli di routing dinamico su route statiche, tuttavia, è che i protocolli di routing dinamici possono modificare dinamicamente la tabella di routing in base alle condizioni della rete (utilizzo della larghezza di banda, un'interfaccia "discendente", ecc.) E, come tale, utilizzando una dinamica il protocollo di routing può comportare una configurazione che "instrada" errori o colli di bottiglia nell'infrastruttura di rete. ( Tuttavia, i protocolli di routing dinamico sono in qualche modo fuori dallo scopo di questa risposta.)

Non puoi arrivarci da qui

Nel caso del nostro esempio Router A, cosa succede quando arriva un pacchetto associato a "172.16.31.92"?

Guardando il router Una tabella di routing, né l'interfaccia di destinazione né la route statica corrispondono ai primi 24 bit di 172.18.31.92 (ovvero 10101100.00010000.00011111.01011100, BTW).

Come già sappiamo, il router A restituirebbe il pacchetto al mittente tramite un messaggio "Rete di destinazione non raggiungibile".

Supponiamo che ci sia un altro router (router C) seduto all'indirizzo "192.168.20.254". Il router C ha una connessione a Internet!

                              Interface                      Interface                      Interface
                              Ethernet1                      Ethernet1                      Ethernet1
                              192.168.20.254/24              192.168.10.1/24                192.168.30.254/24
                    __________  V                  __________  V                  __________  V
((  heap o  ))     |          | V                 |          | V                 |          | V
(( internet )) ----| ROUTER C |------- /// -------| ROUTER A |------- /// -------| ROUTER B |----
((   w00t!  ))   ^ |__________|                 ^ |__________|                 ^ |__________|
                 ^                              ^                              ^
               Interface                      Interface                      Interface
               Ethernet0                      Ethernet0                      Ethernet0
               10.35.1.1/30                   192.168.20.1/24                192.168.10.254/24

Sarebbe bello se il router A potesse instradare i pacchetti che non corrispondono a nessuna interfaccia locale fino al router C in modo tale che il router C possa inviarli su Internet. Immettere il percorso "gateway predefinito".

Aggiungi una voce alla fine della nostra tabella di routing in questo modo:

  • ID di rete: 0.0.0.0 (00000000.00000000.00000000.00000000) - subnet mask / 0 - Router di destinazione: 192.168.20.254

Quando proviamo a far corrispondere "172.16.31.92" a ciascuna voce della tabella di routing, finiamo per colpire questa nuova voce. All'inizio è un po 'sconcertante. Stiamo cercando di abbinare zero bit dell'indirizzo di destinazione con ... aspetta ... cosa? Zero bit corrispondenti? Quindi non stiamo cercando una partita. Questa voce della tabella di routing dice, in sostanza, "Se arrivi qui, anziché rinunciare alla consegna, invia il pacchetto al router a 192.168.20.254 e lascialo gestire".

192.168.20.254 è una destinazione abbiamo FACCIAMO sappiamo come fornire un pacchetto a. Di fronte a un pacchetto associato a una destinazione per la quale non abbiamo una voce di tabella di routing specifica, questa voce "gateway predefinito" corrisponderà sempre (poiché corrisponde a zero bit dell'indirizzo di destinazione) e ci fornisce un "ultimo ricorso" che possiamo inviare i pacchetti per la consegna. A volte sentirai il gateway predefinito chiamato "gateway dell'ultima risorsa".

Affinché una route gateway predefinita sia efficace, deve fare riferimento a un router raggiungibile utilizzando le altre voci nella tabella di routing. Se si tenta di specificare un gateway predefinito di 192.168.50.254 nel router A, ad esempio, la consegna a tale gateway predefinito non riuscirà. 192.168.50.254 non è un indirizzo che il router A sa come consegnare i pacchetti all'utilizzo di una qualsiasi delle altre rotte nella sua tabella di routing, quindi un tale indirizzo sarebbe inefficace come gateway predefinito. Ciò può essere indicato in modo conciso: il gateway predefinito deve essere impostato su un indirizzo già raggiungibile utilizzando un'altra route nella tabella di routing.

I router reali in genere memorizzano il gateway predefinito come ultima route nella loro tabella di routing in modo che corrisponda ai pacchetti dopo che non sono riusciti a corrispondere a tutte le altre voci nella tabella.

Pianificazione urbana e routing IP

La suddivisione di una sottorete IP in sottoreti IP più piccole è come una pianificazione urbana. Nella pianificazione urbana, la zonizzazione viene utilizzata per adattarsi alle caratteristiche naturali del paesaggio (fiumi, laghi, ecc.), Per influenzare i flussi di traffico tra le diverse parti della città e per separare diversi tipi di uso del suolo (industriale, residenziale, ecc.) . La subnet IP è davvero la stessa.

Esistono tre motivi principali per cui si dovrebbe subnet una rete:

  • È possibile che si desideri comunicare attraverso diversi mezzi di comunicazione diversi. Se si dispone di una connessione WAN T1 tra due edifici, i router IP potrebbero essere posizionati alle estremità di queste connessioni per facilitare la comunicazione attraverso il T1. Le reti su ciascuna estremità (e possibilmente la rete "interstiziale" sul T1 stesso) sarebbero assegnate a sottoreti IP univoche in modo che i router possano prendere decisioni su quale traffico dovrebbe essere inviato attraverso la linea T1.

  • In una rete Ethernet, è possibile utilizzare la subnet per limitare la quantità di traffico di trasmissione in una determinata porzione della rete. I protocolli a livello di applicazione utilizzano la capacità di trasmissione di Ethernet per scopi molto utili. Man mano che sempre più host vengono raggruppati nella stessa rete Ethernet, tuttavia, la percentuale di traffico broadcast sul filo (o aereo, in Ethernet wireless) può aumentare fino a creare problemi per la consegna del traffico non broadcast. (Ai vecchi tempi, il traffico di trasmissione poteva sopraffare la CPU degli host costringendoli a esaminare ciascun pacchetto di trasmissione. Oggi è meno probabile.) Il traffico eccessivo su Ethernet commutata può anche presentarsi sotto forma di "allagamento di frame verso destinazioni sconosciute". Questa condizione è causata dal fatto che uno switch Ethernet non è in grado di tenere traccia di tutte le destinazioni sulla rete ed è il motivo per cui le reti Ethernet commutate non possono scalare su un numero infinito di host. L'effetto dell'inondazione di frame verso destinazioni sconosciute è simile all'effetto dell'eccesso di traffico di trasmissione, ai fini della subnet.

  • Potresti voler "sorvegliare" i tipi di traffico che scorre tra diversi gruppi di host. Forse disponi di dispositivi server di stampa e desideri che solo i computer server di accodamento stampa autorizzati inviino loro lavori. Limitando il traffico a cui è consentito il flusso verso la subnet del dispositivo del server di stampa, gli utenti non possono configurare i propri PC in modo che comunichino direttamente con i dispositivi del server di stampa per bypassare l'account di stampa. È possibile inserire tutti i dispositivi del server di stampa in una sottorete e creare una regola nel router o nel firewall collegato a quella sottorete per controllare l'elenco degli host autorizzati a inviare traffico ai dispositivi del server di stampa. (Sia i router che i firewall possono in genere prendere decisioni su come o se consegnare un pacchetto in base agli indirizzi di origine e destinazione del pacchetto. I firewall sono in genere una sottospecie di router con una personalità ossessiva. Possono essere molto, molto preoccupati per il payload dei pacchetti, mentre i router in genere ignorano i payload e consegnano semplicemente i pacchetti.)

Nella pianificazione di una città, puoi pianificare il modo in cui le strade si intersecano tra loro e puoi utilizzare strade a senso unico, a senso unico e vicoli ciechi per influenzare i flussi di traffico. Potresti volere che Main Street sia lunga 30 isolati, con ogni blocco che può contenere fino a 99 edifici ciascuno. È abbastanza facile pianificare la tua numerazione stradale in modo tale che ogni blocco in Main Street abbia una gamma di numeri di strada che aumentano di 100 per ogni blocco. È molto facile sapere quale dovrebbe essere il "numero iniziale" in ogni blocco successivo.

Nella pianificazione delle sottoreti IP, ti preoccupi di costruire il giusto numero di sottoreti (strade) con il giusto numero di ID host disponibili (numeri di edificio) e di utilizzare i router per connettere le sottoreti tra loro (incroci). Le regole sugli indirizzi di origine e destinazione consentiti specificati nei router possono controllare ulteriormente il flusso del traffico. I firewall possono agire come poliziotti ossessivi.

Ai fini di questa risposta, la costruzione delle nostre sottoreti è la nostra unica grande preoccupazione. Invece di lavorare in decimale, come faresti con la pianificazione urbana, lavori in binario per descrivere i limiti di ciascuna sottorete.

Continua su: Come funziona la subnet IPv4?

(Sì ... abbiamo raggiunto la dimensione massima di una risposta (30000 caratteri).)


13
@Joseph: è una lezione che ho tenuto troppe volte per il mio bene. > smile <Esaminerò la tua sezione binaria. Sto detestando di insegnare la matematica (che è davvero ciò che è la comprensione del binario - contando nella base 2) perché non sono molto bravo in questo.
Evan Anderson,

2
Il mio unico problema con la rottura della risposta è che bisogna capire perché esiste la sottorete (routing IP) prima di poter capire come spezzare efficacemente una rete IP in sottoreti. Non ho mai trovato un buon modo per discutere un argomento in modo isolato dall'altro. (Davvero, progettare una rete IP con VLSM è naturale e "ha senso" dopo aver compreso il routing IP ...)
Evan Anderson

28
Non romperlo.
Joseph Kern,

3
+1 per il post più completo mai visto su serverfault
Scott Lundberg,

3
Eseguito l'upgrade se non altro per la metafora del contachilometri. Ora so come spiegare come funziona il binario alle persone.
phuzion,

142

Continua da: Come funziona la subnet IPv4?

L'ISP fornisce all'intervallo l'ID di rete 192.168.40.0/24 (11000000.10101000.00101000.00000000). Sai che ti piacerebbe usare un dispositivo firewall / router per limitare la comunicazione tra le diverse parti della tua rete (server, computer client, apparecchiature di rete) e, come tale, ti piacerebbe spezzare queste varie parti della tua rete nelle sottoreti IP (tra cui il dispositivo firewall / router può quindi instradare).

Hai:

  • 12 computer server, ma potresti ottenere fino al 50% in più
  • 9 interruttori
  • 97 computer client, ma potresti ottenerne di più

Qual è un buon modo per scomporre 192.168.40.0/24 in questi pezzi?

Pensando con potenze pari a due e lavorando con il maggior numero di dispositivi possibili, puoi trovare:

  • 18 computer server: la potenza successiva maggiore di due è 32
  • 9 interruttori: la successiva potenza maggiore di due è 16
  • 97 computer client: la potenza successiva maggiore di due è 128

In una determinata sottorete IP, ci sono due indirizzi riservati che non possono essere usati come indirizzi IP del dispositivo validi: l'indirizzo con tutti gli zeri nella parte ID host e l'indirizzo con tutti quelli nella parte ID host. Pertanto, per una determinata sottorete IP, il numero di indirizzi host disponibili è due rispetto alla potenza della quantità di 32 meno il numero di bit nella maschera di sottorete, meno 2. Quindi, nel caso di 192.168.40.0/24 abbiamo può vedere che la subnet mask ha 24 bit. Ciò lascia 8 bit disponibili per gli ID host. Sappiamo che da 2 all'ottava potenza è 256, il che significa che 256 possibili combinazioni di bit si inseriscono in uno slot largo 8 bit. Poiché le combinazioni "11111111" e "00000000" di quegli 8 bit non sono consentite per gli ID host, ciò ci lascia con 254 possibili host che possono essere assegnati nella rete 192.168.40.0/24.

Di quei 254 host, sembra che possiamo adattare i computer client, gli switch e i computer server in quello spazio, giusto? Proviamo.

Hai 8 bit di subnet mask con cui "giocare" (i restanti 8 bit dell'indirizzo IP 192.168.40.0/24 non coperti dalla subnet mask fornita dal tuo ISP). Dobbiamo trovare un modo per usare quegli 8 bit per creare un numero di ID di rete univoci che possano ospitare i dispositivi sopra.

Inizia con la più grande rete: i computer client. Sai che la prossima potenza maggiore di due rispetto al numero di dispositivi possibili è 128. Il numero 128, in binario, è "10000000". Fortunatamente per noi, si adatta allo slot a 8 bit che abbiamo libero (in caso contrario, ciò indicherebbe che la nostra sottorete di partenza è troppo piccola per ospitare tutti i nostri dispositivi).

Prendiamo il nostro ID di rete, come fornito dal nostro ISP, e aggiungiamo un singolo bit di subnet mask, suddividendolo in due reti:

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.00000000 - Old subnet mask (/24)

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

Guardalo finché non ha senso. Abbiamo aumentato la subnet mask di un bit di lunghezza, facendo sì che l'ID di rete copra un bit che sarebbe stato utilizzato per l'ID host. Poiché quel bit può essere zero o uno, abbiamo effettivamente diviso la nostra rete 192.168.40.0 in due reti. Il primo indirizzo IP valido nella rete 192.168.40.0/25 sarà il primo ID host con un "1" nel bit più a destra:

11000000.10101000.00101000.00000001 - 192.168.40.1 - First valid host in the 192.168.40.0/25 network

Il primo host valido nella rete 192.168.40.128 sarà, allo stesso modo, il primo ID host con un "1" nel bit più a destra:

11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/25 network

L'ultimo host valido in ciascuna rete sarà l'ID host con ogni bit tranne il bit più a destra impostato su "1":

11000000.10101000.00101000.01111110 - 192.168.40.126 - Last valid host in the 192.168.40.0/25 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.128/25 network

Quindi, in questo modo, abbiamo creato una rete abbastanza grande da contenere i nostri computer client e una seconda rete che possiamo quindi applicare lo stesso principio per suddividere in reti ancora più piccole. Facciamo una nota:

  • Computer client - 192.168.40.0/25 - IP validi: 192.168.40.1 - 192.168.40.126

Ora, per abbattere la seconda rete per i nostri server e switch, facciamo la stessa cosa.

Abbiamo 12 computer server, ma potremmo acquistarne altri 6. Pianifichiamo 18, che ci lascia la successiva potenza massima di 2 come 32. In binario, 32 è "100000", che è lungo 6 bit. Sono rimasti 7 bit di subnet mask in 192.168.40.128/25, quindi abbiamo abbastanza bit per continuare a "giocare". L'aggiunta di un altro bit di subnet mask ci dà altre due reti:

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - Old subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/26 network
11000000.10101000.00101000.10111110 - 192.168.40.190 - Last valid host in the 192.168.40.128/26 network

11000000.10101000.00101000.11000000 - 192.168.40.192 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.11000001 - 192.168.40.193 - First valid host in the 192.168.40.192/26 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.192/26 network

Quindi, ora abbiamo suddiviso 192.168.40.128/25 in altre due reti, ognuna delle quali ha 26 bit di subnet mask, o un totale di 62 possibili ID host - 2 ^ (32 - 26) - 2.

Ciò significa che entrambe queste reti hanno abbastanza indirizzi per i nostri server e switch! Facciamo appunti:

  • Server - 192.168.40.128/26 - IP validi: 192.168.40.129 - 192.168.40.190
  • Switch - 192.168.40.192/26 - IP validi: 192.168.40.193 - 192.168.40.254

Questa tecnica è chiamata subnet masking a lunghezza variabile (VLSM) e, se applicata correttamente, fa sì che i "router core" abbiano tabelle di routing più piccole (attraverso un processo chiamato "riepilogo del percorso"). Nel caso del nostro ISP in questo esempio, possono essere totalmente inconsapevoli di come abbiamo subneted 192.168.40.0/24. Se il loro router ha un pacchetto associato a 192.168.40.206 (uno dei nostri switch), devono solo sapere di passarlo al nostro router (poiché 192.168.40.206 corrisponde all'ID di rete e alla maschera di sottorete 192.168.40.0/24 nella tabella di routing del loro router ) e il nostro router lo porterà a destinazione. Ciò mantiene le rotte della nostra sottorete fuori dalle loro tabelle di routing. (Sto semplificando qui, ma hai l'idea.)

Puoi pianificare reti di dimensioni molto grandi geograficamente allo stesso modo. Fintanto che fai la giusta "pianificazione urbana" in anticipo (anticipando il numero di host in ciascuna sottorete con una certa precisione e un occhio al futuro) puoi creare una grande gerarchia di routing che, nei router principali, "riassume "a un numero molto piccolo di rotte. Come abbiamo visto sopra, più rotte si trovano nella tabella di routing di un router, più lentamente esegue il suo lavoro. Progettare una rete IP con VLSM e mantenere piccole le tabelle di routing è una buona cosa (tm).

L'irrealismo degli esempi

Il mondo immaginario in questa risposta è, ovviamente, immaginario. In genere è possibile creare subnet su una moderna Ethernet commutata con più host di 254 (in base al profilo del traffico). Come è stato sottolineato nei commenti, l'utilizzo di / 24 reti tra router non è coerente con Real Life (tm). È un esempio carino, ma è uno spreco di spazio degli indirizzi. In genere, viene utilizzata una rete a / 30 o a / 31 (consultare http://www.faqs.org/rfcs/rfc3021.html per i dettagli su come funzionano gli / 31 - che vanno oltre lo scopo di questa risposta) su collegamenti strettamente punto-punto tra due router.


Piccolo errore: il codice subito dopo "L'ultimo host valido ..." torna a chiamarlo "il primo host valido". Presumo che dovrebbe ancora dire "ultimo".
JoeCool1986

@ JoeCool1986 - Buona cattura.
Evan Anderson,

2
Voterò questa risposta per assicurarmi che due risposte siano mantenute in ordine.
l46kok,

Nella parte in cui si creano due subnet da 192.168.40.128 e si crea un ID di rete 192.168.40.192, da dove provengono i 192?
user6607,

@ user6607 Le sottoreti vengono contate all'indietro (senza spazi vuoti). Ad esempio la prima sottorete 0è rappresentata come 00000000. La seconda sottorete è 128così 10000000e la terza sottorete 192è rappresentata come 11000000, ecc. Continuate a contare all'indietro per trovare nuove sottoreti.
Joseph Kern,

76

Sotto-reti

La sottorete non è difficile ma può essere intimidatoria. Quindi iniziamo con il passaggio più semplice possibile. Imparare a contare in binario.

Binario

Binario è un sistema di conteggio base 2. Composto da solo due numeri (1 e 0). Il conteggio procede in questo modo.

1 = 001 ( 0 + 0 + 1 = 1)
2 = 010 ( 0 + 2 + 0 = 2)
3 = 011 ( 0 + 2 + 1 = 3)
4 = 100 ( 4 + 0 + 0 = 4)
5 = 101 ( 4 + 0 + 1 = 5)

Quindi, se immagini che ogni 1 è un segnaposto per un valore (tutti i valori binari sono potenze di due)

1     1     1     1     1 = 31
16  + 8  +  4  +  2  +  1 = 31

Quindi ... 100000 = 32. E 10000000 = 128. E 11111111 = 255.

Quando dico "Ho una subnet mask di 255.255.255.0", intendo davvero "Ho una subnet mask di 11111111.11111111.11111111.00000000". Usiamo le sottoreti come abbreviazione.

I punti nell'indirizzo, separano ogni 8 cifre binarie (un ottetto). Questo è il motivo per cui IPv4 è noto come spazio di indirizzi a 32 bit (8 * 4).

Perché sottorete?

Gli indirizzi IPv4 (192.168.1.1) sono scarsi. La sottorete ci offre un modo per aumentare la quantità di reti (o host) disponibili. Questo per motivi amministrativi e tecnici.

Ogni indirizzo IP è suddiviso in due parti separate, la rete e l'host. Per impostazione predefinita, un indirizzo di classe C (192.168.1.1) utilizza i primi 3 ottetti (192.168.1) per la parte di rete dell'indirizzo. e il 4 ° ottetto (.1) come porzione host.

Per impostazione predefinita, un indirizzo IP e una subnet mask per un indirizzo di classe C si presentano così

IP     192.168.1.1 
Subnet 255.255.255.0

In binario come questo

IP     11000000.10101000.00000001.00000001
Subnet 11111111.11111111.11111111.00000000

Guarda di nuovo l'esempio binario. Notate come ho detto che i primi tre ottetti sono usati per la rete? Notate come la porzione di rete è tutta? Questo è tutto il sottorete. Espandiamoci.

Dato che ho un singolo ottetto per la mia porzione di host (nell'esempio sopra). Posso avere SOLO 256 host (256 è il valore massimo di un ottetto, contando da 0). Ma c'è un altro piccolo trucco: è necessario sottrarre 2 indirizzi host da quelli disponibili (attualmente 256). Il primo indirizzo nell'intervallo sarà per la rete (192.168.1.0) e l'ultimo indirizzo nell'intervallo sarà la trasmissione (192.168.1.255). Quindi hai davvero 254 indirizzi disponibili per gli host in una rete.

Un caso di studio

Diciamo che ti ho dato il seguente pezzo di carta.

Create 4 networks with 192.168.1.0/24.

Diamo un'occhiata a questo. Il / 24 si chiama notazione CIDR. Invece di fare riferimento a 255.255.255.0 facciamo solo riferimento ai bit necessari per la rete. In questo caso abbiamo bisogno di 24 bit (3 * 8) da un indirizzo a 32 bit. Scrivendolo in binario

11111111.11111111.11111111.00000000 = 255.255.255.0
8bits   + 8bits  + 8bits  + 0bits   = 24bits

Quindi sappiamo che dobbiamo capire quante sottoreti abbiamo bisogno. Sembra che 4. Dato che abbiamo bisogno di creare più reti (al momento ne abbiamo solo una), facciamo girare alcuni bit

11111111.11111111.11111111.00000000 = 255.255.255.0   = 1 Network OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 Networks OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 Networks (remember powers of 2!) OR /26

Ora che abbiamo deciso su un / 26 iniziamo ad allocare host. Un po 'di matematica semplice:

32(bits) - 26(bits) = 6(bits) for host addresses.

Abbiamo 6 bit da allocare in ogni rete per gli host. Ricordando che dobbiamo sottrarre 2 per ogni rete.

h = host bits    
2^h - 2 = hosts available

2^6 - 2 = 62 hosts 

Finally we have 62 hosts in 4 networks, 192.168.1.0/26

Ora dobbiamo capire dove vanno gli host. Torna al binario!

11111111.11111111.11111111.00,000000 [the comma is the new network/hosts division]

Begin to calculate:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [First IP = Network Adress]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [First Host IP]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Second Host IP]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Third Host IP]

And so on ... until ...

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Sixty Second Host IP]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.01,000000 = 192.168.1.64 [First IP = Network Address]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [First Host IP]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Second Host IP]

And so on ... until ...

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Sixty Second Host IP]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.10,000000 = 192.168.1.128 [First IP = Network Address]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [First Host IP]

Etc ...

In questo modo è possibile calcolare l'intera sottorete.

Wild Cards Una wild card mask è una subnet mask invertita.

11111111.11111111.11111111.11000000 = 255.255.255.192 [Subnet]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Wild Card]

Ulteriore

Google per i termini "super-netting" e "VLSM (subnet mask a lunghezza variabile)", per argomenti più avanzati.

Vedo ora che ho impiegato troppo tempo a rispondere ... sospiro


1
"Dato che ho un singolo ottetto per la mia porzione di host (nell'esempio sopra). Posso avere SOLO mai 255 host (255 è il valore massimo di un ottetto). Ma c'è un altro piccolo trucco: devi sottrarre 2 indirizzi host tra quelli disponibili (attualmente 255). Il primo indirizzo nell'intervallo sarà per la rete (192.168.1.0) e l'ultimo indirizzo nell'intervallo sarà la trasmissione (192.168.1.255). Quindi hai davvero 253 indirizzi disponibili per host in una rete. "... Questo non è corretto.
joeqwerty,

1
Esistono 256 valori possibili per l'ottetto: da 0 a 255, per un totale di 256. 256 -2 (indirizzi di rete e di trasmissione) = 254 possibili indirizzi host.
joeqwerty,

Ops. Grazie! :-) A parte uno, non ho idea di come ho gestito quella particolare impresa.
Joseph Kern,

1
-1 Mi dispiace, ma non ci sono state "Classi" dalla RFC 1519 nel 1993, nessuno dovrebbe parlarne al di fuori di un contesto storico. Sono confusi e causano molte idee sbagliate.
Chris S

Chris probabilmente hai ragione, ma le lezioni venivano ancora insegnate nei primi anni 2000 nei corsi CCNA e nella maggior parte dei corsi universitari.
Joseph Kern,

34

Una breve lezione di storia: originariamente, gli indirizzi IPv4 unicast erano divisi in 3 classi, ciascuna con una lunghezza di maschera "predefinita" associata (chiamata maschera di sottorete classful)

  • Classe A: qualsiasi cosa nell'intervallo 1.0.0.0 -> 127.255.255.255. Classica subnet mask di 255.0.0.0 (/ 8 nella notazione CIDR)
  • Classe B: qualsiasi cosa nell'intervallo 128.0.0.0 -> 191.255.255.255. Subnet mask di classe 255.255.0.0 (/ 16 nella notazione CIDR)
  • Classe C: qualsiasi cosa nell'intervallo 192.0.0.0 -> 223.255.255.255. Subnet mask di classe 255.255.255.0 (/ 24 in notazione CIDR)

L'idea era che alle organizzazioni di dimensioni diverse potesse essere assegnata una diversa classe di indirizzi IP, per fare un uso efficiente dello spazio degli indirizzi IP.

Tuttavia, con la crescita delle reti IP, divenne chiaro che questo approccio aveva i suoi problemi. Per nominarne solo tre:

In un mondo di classe, tutte le sottoreti dovevano avere una maschera di / 8, / 16 o / 24. Ciò significava che la sottorete più piccola che poteva essere configurata era una / 24, che consentiva di riservare 254 indirizzi host (rispettivamente .0 e .255 come indirizzi di rete e di trasmissione). Ciò è stato tremendamente dispendioso, in particolare sui collegamenti punto-punto con solo due router collegati.

Anche dopo che questa restrizione è stata attenuata, i protocolli di routing precedenti (ad es. RIPv1 ) non pubblicizzavano la lunghezza della maschera associata a un prefisso IP. In assenza di una maschera specifica, utilizzerebbe la maschera di un'interfaccia direttamente connessa nella stessa rete di classe o tornerebbe a utilizzare la maschera di classe. Ad esempio, se si desidera utilizzare la rete 172.16.0.0 per i collegamenti tra router con / 30 maschere, tutte le sottoreti da 172.16.0.0 a 172.16.255.255 dovrebbero avere una maschera / 30 (16384 sottoreti, ciascuna con 2 IP utilizzabili ).

Le tabelle di routing dei router Internet hanno iniziato a occupare sempre più memoria; questo era / è noto come "esplosione della tabella di routing". Se un provider avesse 16 reti contigue / 24, ad esempio, avrebbe bisogno di pubblicizzare tutti i 16 prefissi, piuttosto che un singolo riepilogo che coprisse l'intero intervallo.

Due perfezionamenti correlati ci hanno permesso di andare oltre i limiti sopra indicati.

  1. Maschere di sottorete a lunghezza variabile (VLSM)
  2. CIDR (instradamento interdominio senza classi)

VLSM si riferisce alla capacità di un protocollo di routing di supportare diverse subnet mask all'interno della stessa rete di classe. Per esempio:

192.168.1.0/24

Potrebbe essere suddiviso in:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

Ciò ha consentito un uso molto più efficiente dello spazio degli indirizzi; le sottoreti potrebbero essere dimensionate correttamente per il numero di host / router che verrebbero collegati ad esse.

CIDR prende VLSM e lo estende dall'altra parte; oltre a suddividere una singola rete di classe in sottoreti più piccole, CIDR consente l'aggregazione di più reti di classe in un unico riepilogo. Ad esempio, le seguenti reti di classe B (/ 16):

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

Può essere aggregato / riassunto con un singolo prefisso:

172.16.0.0/14

In termini di subnet: una subnet mask è lunga 32 bit. La lunghezza della maschera indica quanti bit identificano la porzione di rete dell'indirizzo. Per esempio:

10.1.1.0/24
  • La subnet mask di classe è / 8
  • La maschera di sottorete attuale è / 24
  • 16 bit (24-8) sono stati "presi in prestito" per l'uso della sottorete.

Ciò significa che, supponendo che l'intera rete 10.0.0.0/8 sia subnet in / 24s, ci saranno 65536 (2 ^ 16) subnet all'interno di questo intervallo. (Ciò presuppone che la piattaforma in uso supporti i numeri di sottorete 0 e 255. Vedere IP subnet-zero di Cisco).

Restano 8 bit nella "porzione host" dell'indirizzo. Ciò significa che ci sono 256 indirizzi IP disponibili (2 ^ 8), di cui 2 riservati (10.1.1.0 è l'indirizzo di rete, 10.1.1.255 è l'indirizzo di trasmissione diretto alla sottorete). Ciò lascia 254 indirizzi IP utilizzabili su questa sottorete. ((2 ^ 8) - 2)


4
In realtà c'erano 5 classi.
dbasnett,

5
Vero, ma dobbiamo davvero entrare nell'indirizzamento multicast e riservato di classe E per una domanda di "introduzione alla sottorete"? :)
Murali Suriar,

2
Hai portato la storia in una domanda introduttiva ... Poi l'hai lasciata incompleta. Non sono sicuro che sia peggio.
Chris S

7

Intervalli di rete: le reti sono sempre indicate da 2 numeri: uno per determinare la rete e un altro per determinare quale computer (o host) si trova su quella rete. Poiché ogni indirizzo di nertwork è lungo 32 bit, entrambi i numeri devono adattarsi a questi 32 bit.

La numerazione della rete è importante, in quanto ICANN distribuisce quando si richiede un intervallo IP di rete. Se non ce l'avessimo, nessuno sarebbe in grado di dire la differenza tra la mia rete e AT & Ts. Quindi, sebbene questi numeri debbano essere univoci, nessun altro vuole assegnare numeri agli host che si trovano sulla mia rete. Da qui la divisione: la prima parte è gestita dalle persone della rete, la seconda parte è tutta mia da dare a qualunque macchina io voglia.

Il numero di rete non è fissato su un certo numero di bit - ad esempio, se avessi solo 200 macchine per gestirmi, sarei perfettamente soddisfatto di un numero di rete che utilizzava 24 bit, lasciandomi con solo 8 bit per me - che è sufficiente per un massimo di 255 host. Poiché il numero di rete utilizza 24 bit, possiamo averne molti, il che significa che molte persone possono avere le proprie reti.

In passato questa era definita rete di classe C. (la classe B utilizzava 16 bit per il numero di rete e la classe A utilizzava 8 bit, quindi esistono solo alcune reti di classe A esistenti).

Oggi questa convenzione di denominazione è passata di moda. È stato sostituito con il concetto chiamato CIDR. CIDR inserisce esplicitamente il numero di bit per i tuoi host dopo la barra. Quindi il mio esempio sopra (la classe C) ora viene chiamato CIDR / 24.

Questo ci dà un po 'più di flessibilità, prima che se avessi 300 host da gestire, avrei bisogno di una rete di classe B! Ora posso ottenere un CIDR / 23, quindi ho 9 bit per me e 23 bit per il numero di rete. ICANN potrebbe non avere questo tipo di reti fuori, ma se ne ho una interna o sto noleggiando una rete parziale da un ISP, questo rende più semplice la gestione, specialmente perché a tutti i loro clienti può essere assegnato un / 29 (lasciandomi. 3 bit o un massimo di 8 macchine) che consente a più persone di avere la propria porzione degli indirizzi IP disponibili. Fino a quando non avremo IPv6, questo è abbastanza importante.


Tuttavia ... mentre so che un CIDR / 24 è l'equivalente della vecchia rete di Classe C, e un / 16 è di classe B e un / 8 è una classe A ... Sono ancora sconcertato nel tentativo di calcolare un / 22 in la mia testa. Fortunatamente ci sono strumenti che fanno questo per me :)

Tuttavia - se sai che un / 24 è 8 bit per gli host (e 24 bit per la rete), allora so che un / 23 mi dà un bit in più che raddoppia il numero di host.


-1 Siamo spiacenti, ma menzionare classi al di fuori di un riferimento "storico" è inappropriato in questi giorni. Non "sono passati di moda", sono stati ufficialmente deprecati dalla RFC 1519 nel 1993. Sono confusi come tutti gli altri e causano un sacco di idee sbagliate.
Chris S

Alcune implementazioni dei protocolli di routing dinamico riassumono lungo i confini di classe, quindi è ancora utile conoscerli.
Ben,

5

Porrò e risponderò ad alcune domande correlate lungo la strada:

  • Perché vedi 255.255.255.0così spesso?
  • Perché 192.168.0.1?
  • Perché 127.0.0.1?

Perché numeri così strani: 255, 192, 168, 127?


8 + 8 + 8 + decimale puntato a 8 bit

Gli indirizzi Internet come 194.60.38.10 usano la notazione decimale puntata per dividere 32 bit in 8 + 8 + 8 + 8 bit. Il punto-decimale significa convertire ogni numero in binario, quindi riempirlo con il tasto sinistro con 0's.

Ad esempio .60.→ 60 = 32 + 16 + 8 + 4 → 111100.00111100..

Quindi 194.60.38.10 è punteggiato-decimale per l'indirizzo 4 × 8 = 32 bit 11000010.00111100.00100110.00001010, da 38 → 100110, 10 → 1010e così via. 194 richiede tutti e 8 i bit; il resto è imbottito.

imbottito

Una volta che pensi a 255, 192 e 127 in binario a 8 bit, puoi capire più facilmente perché determinati numeri decimali sono così comuni:

  • 255 = 11111111
  • 192 = 11000000
  • 127 = _1111111
  • 128 = 10000000

Questi numeri decimali rappresentano blocchi visivamente convenienti a 8 bit come ■■■■■■■■, ■ □□□□□□□ e □ ■■■■■■■. Quindi non hai mai visto 256 = 2⁹ a causa del limite di 8 bit e 127 = 128−1 = 2⁸ − 1 è il capovolgimento di una potenza di due — e le potenze di due sono 10………00000in binario.

  • 168 = 10101000

Maschere di sottorete: ciò che è mio è mio + Ciò che è tuo è tuo

Le subnet mask quindi suddividono ciascun indirizzo Internet a 32 bit in un ID di rete e un ID host. Mentre gli indirizzi Internet possono avere qualsiasi combinazione di 1 e 0, le maschere di sottorete iniziano con solo 1 e terminano con solo 0.

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ subnet

L'oscuramento dei primi 8 + 8 + 8 = 24 bit e la riduzione degli ultimi 8 bit è un modo per dividere l'IP ■■ □□□□ ■ □ | □□ ■■■■ □□ | □□ ■ □□ ■ ■ □ | □□□□ ■ □ ■ □ in due pezzi:

■■□□□□■□|□□■■■■□□|□□■□□■■□          network
                             □□□□■□■□ host

Se il proprietario della sottorete (ad esempio OmniCorp ) desiderasse più IP interni, potrebbe acquistare più (diciamo 8 + 8 = 16 bit) del lato destro della rete, in questo modo:

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ subnet
■■□□□□■□ □□■■■■□□                    network
                   □□■□□■■□ □□□□■□■□ host

Chiaramente c'è un compromesso nello spazio degli indirizzi delle opzioni a 32 bit = 2³² = 4.294.967.296: se acquisti più ID di rete (lato sinistro) la tua rete interna ha più ID host (lato destro) da assegnare.

Le persone a buon mercato hanno quindi una maschera di sottorete di

255.255.255.0 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□.

Anche le persone più economiche hanno

255.255.255.128 = ■■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | ■ □□□□□□□

o 255.255.255.192 = ■■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | ■■ □□□□□□.

Secondo il folklore, in realtà non era Roger Miller, ma un modesto amministratore di sistema con una maschera 255.255.255.254 che originariamente scrisse King of the Road , sostituendo "Non ho una sottorete di grandi dimensioni" con "Non ho sigarette ”.

Fumo le sigarette fino al sedere

(Perché le maschere degli umili sono piene di numeri così alti? Perché, come il narratore di Miller, le maschere di sottorete contano tutte le cose che non hai.)


Cosa significa la barra finale dopo un IP? (ad es. 194.60.38.10/24)

Poiché le maschere di sottorete (che dividono i "loro" dai "nostri") iniziano sempre con quelle 1, e dal momento che odiamo sommare i poteri di due anche più di quanto odiamo immaginare i poteri di due in primo luogo, qualcuno ha inventato CIDR (la barra dopo un IP).

194.60.38.10/24 significa "la maschera secondaria ne ha 24, quindi il resto sono zero", quindi

■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□ con 8 + 8 + 8 bit appartenenti a “loro” e 8 bit appartenendo a "noi".

Invertire l'inno del vagabondo sopra,

  • /31 è il cantautore
  • /24è di classe media ( 255.255.255.0= ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□
  • /16 è ricco ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□ | □□□□□□□□□
  • /8 è super ricco ■■■■■■■■ | □□□□□□□□ | □□□□□□□□□ | □□□□□□□□
  • /1o /0sarebbe la IANA o qualcosa del genere.





† Utilizzare bc -l; obase=10; 60ad esempio.


Quale rapporto con la risposta fanno le foto in esso? È solo per concentrarsi sulla risposta? :)
simhumileco,

4

Mentre quanto sopra è corretto (scusate, TL; DR), il calcolo delle sottoreti causa ancora molto dolore a molti amministratori di rete. Esiste in realtà un modo molto semplice per fare il calcolo della sottorete, puoi farlo nella tua testa e c'è poco da memorizzare. Per la maggior parte delle applicazioni, non è nemmeno necessario comprendere la rappresentazione binaria, sebbene sia utile per una completa comprensione della sottorete. Qui parlerò solo di IPv4; IPv6 non rientra nell'ambito di questa discussione.

Ricorda questo:

Ci sono tre cose chiave da ricordare: tutte le sottoreti si basano su potenze di due e ci sono due numeri chiave: 256 e 32. Ne parleremo più avanti.

Innanzitutto, diamo un'occhiata a una tabella contenente poteri di 2:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256

Calcolare potenze di 2 è facile: ogni aumento intero nella potenza raddoppia il risultato. 1 + 1 = 2, 2 + 2 = 4, 4 + 4 = 8, 8 + 8 = 16 e così via. Il numero totale di indirizzi in una sottorete deve essere sempre una potenza di 2 .

Poiché ogni ottetto di una sottorete IPv4 arriva fino a 256, 256 è un numero molto importante e costituisce la base per il resto della matematica.

Dimensionamento della sottorete

Inizieremo con una semplice domanda: "quanti indirizzi in una sottorete se la maschera è 255.255.255.248?" Per ora ignoreremo i primi tre ottetti e guarderemo gli ultimi. Ecco come è semplice: sottrai 248 da 256. 256 meno 248 è uguale a 8. Sono disponibili 8 indirizzi (inclusi gli indirizzi di rete e di trasmissione). Il contrario funziona anche: "se voglio avere una sottorete con 16 indirizzi, quale sarà la maschera di sottorete?" 256 meno 16 è uguale a 240. La maschera di sottorete sarà 255.255.255.248.

Ora, se vogliamo espandere oltre 256 indirizzi (storicamente, una "classe C"), diventa solo un po 'più complicato: se il nostro ultimo ottetto è 0 e il nostro terzo ottetto è, diciamo, 240, (255.255.240.0), allora facciamo la matematica sul terzo ottetto e scopriamo che ci sarebbero 16 indirizzi. Quindi moltiplichiamo 16 per 256 (il numero di indirizzi nell'ultimo ottetto) per ottenere 4.096. Se entrambi gli ultimi due ottetti sono 0, (es. 255.240.0.0), prendiamo il risultato della sottrazione dal secondo ottetto (diciamo che è di nuovo 16), moltiplica ma 256 (indirizzi nel terzo ottetto), moltiplica ancora per 256 (indirizzi nell'ultimo ottetto) per ottenere 1.048.576 indirizzi. Facile come quello! (OK, quindi il contrario è un po 'più difficile. Se vogliamo una sottorete con 1.048.576 indirizzi, dovremo dividere quel numero per 256 un paio di volte per ottenere un numero che possiamo sottrarre da 256.)

Indirizzo di rete

Ora che sappiamo come calcolare la maschera di sottorete, come possiamo capire qual è l'indirizzo di rete? È facile: è sempre un multiplo del numero di indirizzi nella nostra sottorete. Quindi se abbiamo 16 indirizzi nella nostra sottorete, i possibili indirizzi di rete saranno 0, 16, 32, 48, 64 e così via fino a 240. (Notare che 0 è un multiplo valido di qualsiasi numero, poiché qualsiasi numero moltiplicato per 0 è uguale a 0.)

E, naturalmente, l'indirizzo di trasmissione sarà l'ultimo indirizzo nell'ambito. Quindi, se abbiamo 16 indirizzi nella nostra sottorete e abbiamo scelto un indirizzo di rete di 10.3.54.64, l'indirizzo di trasmissione sarà (64 + 16-1 = 79) 10.3.54.79.

Notazione CIDR

Che ne dici della notazione CIDR? Come tradurlo da e verso una subnet mask in stile IPv4?

Ricordi i nostri poteri di due? Bene, ora abbiamo un altro numero chiave da ricordare oltre a 256: 32. Ricorda, la notazione CIDR descrive il numero di bit significativi nell'indirizzo IPv4 e ci sono 32 bit in un indirizzo IPv4, 8 per ogni ottetto. Quindi se abbiamo una subnet mask di 255.255.255.240, sono 16 indirizzi. Se guardiamo la nostra tabella "potenze di 2" sopra, vediamo che 16 è due alla quarta potenza (2 ^ 4). Quindi sottraggiamo quel numero di potenza - 4 - da 32 e otteniamo 28. La nostra notazione CIDR per una subnet mask di 255.255.255.240, la nostra notazione CIDR è / 28.

E se ci viene dato un CIDR di / 28, sottraggiamo che (28) da 32 per ottenere 4; aumentare 2 a quella (4a) potenza (2 ^ 4) per ottenere 16; quindi sottrarre quel (16) da 256 per ottenere 240; o 255.255.255.240.


grazie Ma sono ancora confuso su come il pc usa la subnet mask. Quando un'applicazione su un PC vuole inviare dati, li incapsula in un pacchetto. La subnet mask determina come viene incapsulato un pacchetto? Ad esempio, se il PC volesse inviare un pacchetto sulla rete locale, userebbe un frame ethernet en.wikipedia.org/wiki/Ethernet_frame e se volesse al di fuori della rete userebbe un pacchetto tcp en.wikipedia.org/wiki / ... ?
aquagremlin,

Fondamentalmente, non so come un PC determina dove inviare i suoi dati. La rete Ethernet è come un bus, va ovunque. Distribuire un pacchetto attraverso il jack ethernet di un PC è un evento generico, quindi il pacchetto stesso deve determinare chi gli risponde. Un pacchetto destinato a essere raccolto da un dispositivo locale (switch o altro PC sulla lan) deve apparire diverso da un pacchetto che verrà prelevato da un router.
aquagremlin,

Questo accade su un livello inferiore a TCP. Ogni dispositivo ha un indirizzo hardware (MAC) associato a un indirizzo IP nella tabella ARP di ciascun dispositivo. Questo è costruito attraverso la scoperta. Quando un pacchetto è destinato a un host sulla rete locale, è taggato con il MAC per il dispositivo di destinazione. Quando un pacchetto è destinato a un host remoto, viene etichettato con il MAC per il router sulla rete locale. Mentre passa attraverso il router, il MAC viene rimosso e quindi taggato con il MAC del router hop successivo. La sottorete definisce semplicemente l'ambito della rete locale. (Questa è la semplice versione <500 caratteri.)
Jonathan J

2

Sento anche che ci dovrebbe essere almeno una menzione dei NAT, perché sono usati così comunemente nelle reti moderne al posto delle sottoreti, a causa dell'esaurimento degli indirizzi IPv4, tra le altre cose. (Inoltre, quando ho appreso per la prima volta delle sottoreti, ero molto confuso su come la sottorete si collega alle reti create dai router WiFi).

NAT (traduzione di indirizzi di rete) è una tecnica (comunemente) utilizzata per creare reti private mappando uno spazio di indirizzi (IP: Porta) a un altro. Principalmente, viene utilizzato per creare una rete privata di più IP privati ​​dietro un indirizzo pubblico, ad esempio nei router Wifi, da organizzazioni (come un'università o una società), o talvolta dagli ISP.

La traduzione effettiva dell'indirizzo viene eseguita in modo trasparente nei nodi compatibili con NAT, generalmente router. Può essere di molte forme, cono pieno, indirizzo limitato, porta limitata ecc. O una combinazione di questi, che determina come possono essere avviate le connessioni attraverso il nodo.

I dettagli completi possono essere trovati su Wikipedia , ma ad esempio si consideri un router Wifi con 2 dispositivi collegati ad esso. L'IP pubblico del router è 10.9.20.21/24, e l'IP dei dispositivi (IP privati) lo sono A: 192.168.0.2, B: 192.168.0.3e quello del router è R: 192.168.0.1. Pertanto, se si Adesidera connettersi al server S: 10.9.24.5/24(che in realtà si trova su una sottorete diversa, scrivere qui il router):

  1. A invia un pacchetto IP a R(che sarebbe il gateway predefinito) con l'IP di origine 192.168.0.2, la porta src (diciamo) 14567e l'IP di destinazione: 10.9.24.5(sebbene la porta sia effettivamente parte dell'intestazione TCP).
  2. Il router (che è compatibile con NAT) associa la porta 14567al dispositivo Ae cambia l'origine del pacchetto IP su 10.9.20.21(che è l'IP pubblico del router). Ciò è in contrasto con la sottorete descritta sopra, in cui i pacchetti IP non vengono in realtà mai modificati .
  3. Sriceve la serie di pacchetti TCP (con src IP:, 10.9.20.21src Port:) 14567e invia pacchetti di risposta con quei valori nei campi di destinazione.
  4. Rcontrolla la porta di destinazione, che è 14567e inoltra il pacchetto a A.
  5. A riceve il pacchetto di risposta.

Nella situazione precedente, se si Btenta di aprire una connessione sulla stessa porta di origine ( 14567), verrà mappata su una porta diversa da R(e la porta nel pacchetto in uscita viene modificata) prima di inviarla a S. Cioè, ci sarebbe anche la traduzione delle porte anziché solo IP.

Due cose da notare qui:

  1. A causa della traduzione di questo indirizzo, spesso non è possibile avviare una connessione ai dispositivi nella rete privata senza utilizzare alcune tecniche speciali.
  2. La restrizione sulle connessioni TCP totali dallo stesso dispositivo a un server (65536 = 2 ^ 16) ora si applica collettivamente a tutti i dispositivi dietro il NAT, nella forma NAT usata sopra.
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.