Salta al contenuto
Note per Studenti Livello di rete e indirizzamento IP

Livello di rete e indirizzamento IP

In questa pagina 7
In questa pagina 8

Che cosa fa il livello di rete

Il livello di rete (network layer) sta sopra il livello di collegamento (Modello ISO-OSI e pila TCP-IPUna comunicazione tra due calcolatori è un problema troppo vario (segnali, errori, accesso al mezzo, instradamento, controllo di flusso, rappresentazione dei dati) per un solo protocollo, quindi si divide in strati (layer). Il modello ISO/OSI ha 7 livelli (fisico, collegamento, rete, trasporto, sessione, presentazione, applicazione); la pila TCP/IP riunisce gli ultimi tre in un solo livello applicazione, quindi ne ha 5. Ogni livello offre un servizio a quello sopra e parla solo con il livello pari dell'altro nodo tramite PDU; scendendo si aggiunge un'intestazione (PCI): incapsulamento. Indirizzi: MAC (collegamento, locale), IP (rete, globale).Modello ISO-OSI e pila TCP-IP →) e sotto il livello di trasporto: riceve i servizi dal collegamento dati e li offre al trasporto. Il suo compito è la consegna da host a host (host-to-host) dei datagrammi, attraverso tanti collegamenti diversi: per questo il suo protocollo gira in ogni router, non solo negli host finali. (Il livello di trasporto, invece, vive solo negli host: Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →.)

Un'analogia che aiuta: un viaggio da Padova a New York. La modalità di trasporto (treno, aereo, nave) corrisponde al livello di collegamento; l'agenzia di viaggio, che decide quali tappe fare, al routing; il singolo cambio a ogni aeroporto, al forwarding.

I servizi del livello di rete sono tre:

  1. Incapsulamento (framing). L'host mittente riceve il segmento dal trasporto, aggiunge un'intestazione (la PCI, protocol control information) con gli indirizzi di rete di sorgente e destinazione e altre informazioni, e consegna il datagramma al livello di collegamento. L'host destinatario fa l'operazione inversa e consegna il carico utile (payload) al trasporto. I router intermedi non possono decapsulare né cambiare gli indirizzi sorgente e destinazione: li leggono soltanto, per decidere dove inoltrare il pacchetto.
  2. Instradamento (routing). Esistono molti percorsi possibili tra sorgente e destinazione; il livello di rete deve trovare il migliore. Lo fa con i protocolli di instradamento (routing protocols), che coordinano e mantengono le tabelle usate quando arriva un pacchetto: Algoritmi di instradamento - link state e distance vectorL'instradamento (routing) trova il percorso di costo minimo in un grafo pesato in cui i router sono nodi e le reti tra due router sono archi. Link state: ogni router diffonde con un flooding i pacchetti LSP sui propri collegamenti, ricostruisce tutto il grafo e applica Dijkstra (nodi con stato (distanza, permanente o temporaneo)). Distance vector: ogni router conosce solo i vicini e scambia con loro il proprio vettore delle distanze, aggiornato con Bellman-Ford $D_{A,w}=\min{D_{A,w},,D_{A,Y}+d_{Y,w}}$; converge in al più $n-1$ giri ma può soffrire del conteggio all'infinito (limite a 16, hold down, aggiornamenti immediati, split horizon con poison reverse). Path vector: ogni annuncio porta l'intero cammino, si sceglie per politica e non per costo, e i cicli si scoprono trovando sé stessi nel cammino. Dijkstra è corretto se i costi sono non negativi (invariante: un nodo permanente ha già la distanza vera); Bellman-Ford è corretto perché dopo $k$ giri conosce i cammini minimi con al più $k+1$ archi.Algoritmi di instradamento - link state e distance vector →.
  3. Inoltro (forwarding). Quando un pacchetto arriva a un'interfaccia di ingresso del router, il router guarda un campo dell'intestazione (di solito l'indirizzo di destinazione), consulta la forwarding table e trova il numero dell'interfaccia di uscita: Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →.

Altri servizi che in teoria spetterebbero al livello di rete (controllo degli errori, del flusso, della congestione, qualità del servizio, sicurezza) in Internet sono lasciati ai livelli superiori, per mantenere semplice il livello di rete. L'unica eccezione è la sicurezza, realizzata da un sottolivello virtuale aggiuntivo detto IPSec.

I protocolli del livello di rete

Il livello di rete di Internet si può pensare come un protocollo principale e tre ausiliari:

protocollo compito
IPv4 (Internet Protocol) impacchettamento, inoltro e consegna dei pacchetti: Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →
ICMPv4 (Internet Control Message Protocol) aiuta IP a gestire alcuni errori della consegna: Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →
IGMP (Internet Group Management Protocol) aiuta IP a gestire il multicast
ARP (Address Resolution Protocol) collega rete e collegamento: traduce un indirizzo IP in un indirizzo MAC: Protocollo ARPUn host ha tre «nomi»: nome DNS, indirizzo IP (rete) e indirizzo MAC (collegamento). Per spedire un datagramma IP in un frame serve il MAC del prossimo nodo, che si ottiene da quel nodo con ARP: richiesta in broadcast (MAC destinazione FF:FF:FF:FF:FF:FF, contiene IP e MAC del mittente e l'IP cercato) e risposta unicast con il MAC richiesto, memorizzata nella cache ARP. ARP risolve sempre il prossimo salto (host di destinazione o router), non la destinazione finale. Un broadcast non esce dalla sottorete: il proxy ARP del router risponde con il proprio MAC.Protocollo ARP →

Perché servono i router: l'interconnessione di reti

L'idea di internetworking nasce dal bisogno di interconnettere reti di calcolatori, anche molto diverse tra loro, per condividere informazioni e risorse di calcolo. Servono dispositivi (i router) e reti di comunicazione: un router parla con i calcolatori della rete a cui è collegato e con gli altri router. Un datagramma passa quindi di rete in rete, e a ogni router si decide il collegamento di uscita (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).

Tre modi per indicare lo stesso host

Lo stesso computer ha tre identificatori, uno per livello:

  • nome dell'host (livello applicazione): giordani.dei.unipd.it;
  • indirizzo Internet (IP) (livello di rete): 147.162.97.17;
  • indirizzo MAC (livello di collegamento): 0:0:c:6:13:4a.

Il passaggio dal nome all'IP lo fa il DNS (livello applicazione); quello dall'IP al MAC lo fa ARP.

L'indirizzo IPv4

Definizione (indirizzo IPv4). È un numero di 32 bit che identifica la connessione di un dispositivo a Internet (non il dispositivo: un router con tre interfacce ha tre indirizzi). È univoco (un indirizzo individua una sola connessione) e universale (lo schema è accettato da qualunque host). Si scrive in notazione decimale puntata (dotted-decimal): i 32 bit sono divisi in 4 byte e ogni byte è scritto come numero tra 0 e 255.

Esempio. 10000011 10101111 00010101 0000000110000011\ 10101111\ 00010101\ 00000001 è 131.175.21.1131.175.21.1. Ogni byte si converte in decimalesommando le potenze di 2 (128, 64, 32, 16, 8, 4, 2, 1) delle posizioni in cui il bit vale 1Basi di numerazione e conversioni - binario, ottale ed esadecimale →: 100000112=128+2+1=13110000011_2=128+2+1=131, 101011112=128+32+8+4+2+1=17510101111_2=128+32+8+4+2+1=175, 000101012=16+4+1=2100010101_2=16+4+1=21, 000000012=100000001_2=1.

Con 32 bit ci sono 232=4 294 967 2962^{32}=4\,294\,967\,296 indirizzi: ogni bit può valere 0 o 1 e i bit sono indipendenti, quindi le configurazioni sono 2⋅2⋯22\cdot2\cdots2 (3232 volte). In generale con hh bit si contano 2h2^h valori, e viceversa servono h=log⁡2Nh=\log_2 N bit per distinguere NN valori (Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →): è la relazione che si usa in tutto il subnetting.

Struttura gerarchica: prefisso e suffisso

Un indirizzo è gerarchico, come un indirizzo postale (via, numero civico) o un numero di telefono (prefisso internazionale, prefisso di zona, numero): si legge da sinistra a destra e la parte iniziale individua il gruppo.

Definizione (prefisso e suffisso). I primi nn bit formano il prefisso, detto NetID (identifica la rete); i restanti 32−n32-n bit formano il suffisso, detto HostID (identifica l'host dentro la rete). Nodi nella stessa rete hanno lo stesso NetID e HostID diversi.

Esempio. Con n=16n=16, in 131.175.12.8131.175.12.8 il NetID è 131.175131.175 e l'HostID è 12.812.8.

Se un edificio ha più ingressi su strade diverse, ha più indirizzi: allo stesso modo un router con più interfacce ha più indirizzi IP, uno per ogni rete a cui è collegato.

Indirizzamento con classi (classful, obsoleto)

Agli inizi di Internet il prefisso aveva lunghezza fissa, con tre valori possibili (n=8,16,24n=8,16,24), e lo spazio degli indirizzi era diviso in cinque classi. Il vantaggio: dato un indirizzo si riconosce subito la classe e quindi la lunghezza del prefisso, senza altre informazioni (basta guardare i primi bit).

classe primi bit primo byte prefisso nn numero di reti host per rete
A 0 0 – 127 8 27=1282^7=128 (126 utilizzabili) 224−2=16 777 2142^{24}-2=16\,777\,214
B 10 128 – 191 16 214=16 3842^{14}=16\,384 216−2=65 5342^{16}-2=65\,534
C 110 192 – 223 24 221=2 097 1522^{21}=2\,097\,152 28−2=2542^{8}-2=254
D 1110 224 – 239 non applicabile (multicast)
E 1111 240 – 255 non applicabile (riservata)

Le classi occupano porzioni diverse dello spazio: A il 50%, B il 25%, C il 12,5%, D e E il 6,25% ciascuna.

Grafico interattivo: Spazio degli indirizzi IPv4 diviso per classi (percentuale)

Perché è obsoleto: esaurimento degli indirizzi. Una classe A può essere assegnata a pochissime organizzazioni (126 nel mondo), ma ciascuna dovrebbe avere una sola rete vista dal resto del mondo con 16 777 21616\,777\,216 nodi: quasi tutti gli indirizzi restano inutilizzati. La classe B (organizzazioni di medie dimensioni) ha lo stesso difetto in scala minore. La classe C ha il difetto opposto: 254 host sono troppo pochi per molte organizzazioni. Gli indirizzi andavano quindi esaurendosi senza essere usati davvero.

Intervalli delle classi A, B, C: da 0.0.0.00.0.0.0 a 127.255.255.255127.255.255.255; da 128.0.0.0128.0.0.0 a 191.255.255.255191.255.255.255; da 192.0.0.0192.0.0.0 a 223.255.255.255223.255.255.255.

Indirizzi speciali

Definizione (indirizzo di rete). Si ottiene mettendo a 0 tutti i bit dell'HostID. Identifica la rete intera e si usa solo nelle tabelle di instradamento: non si assegna a nessun host.

Esempio. 131.175.12.8131.175.12.8 (classe B): indirizzo di rete 131.175.0.0131.175.0.0. Per 193.17.31.37193.17.31.37 (classe C): 193.17.31.0193.17.31.0.

Definizione (broadcast diretto, direct broadcast address). Si ottiene mettendo a 1 tutti i bit dell'HostID. Un pacchetto con questo destinatario raggiunge tutti i nodi della rete con quel NetID. Può essere generato da fuori della rete, ma non può uscirne.

Esempio. 131.175.12.8131.175.12.8 con n=16n=16: broadcast 131.175.255.255131.175.255.255. Per 193.17.31.37193.17.31.37: 193.17.31.255193.17.31.255.

Altri indirizzi speciali:

Indirizzamento senza classi (classless)

Con la crescita di Internet serviva uno spazio di indirizzi più grande. La soluzione a lungo termine è IPv6 (indirizzi di 16 byte); le soluzioni a breve termine mantengono IPv4:

Le dimensioni della rete sono inversamente proporzionali alla lunghezza del prefisso: più è lungo il prefisso, più piccola la rete. L'indirizzamento con classi è un caso particolare di quello senza classi (una classe A è un indirizzo senza classi con n=8n=8).

Un indirizzo senza classi non dice da solo a quale blocco appartiene: serve la lunghezza del prefisso, che si può dare in due modi.

Notazione CIDR (classless interdomain routing)

Si scrive la lunghezza nn dopo una barra, in coda all'indirizzo: a.b.c.d/na.b.c.d/n.

Formula (blocco CIDR). Dato a.b.c.d/na.b.c.d/n: N=232−n,indirizzo di rete=primi n bit invariati e gli altri 32−n a 0,broadcast=primi n bit invariati e gli altri a 1.N=2^{32-n},\qquad \text{indirizzo di rete}=\text{primi }n\text{ bit invariati e gli altri }32-n\text{ a }0,\qquad \text{broadcast}=\text{primi }n\text{ bit invariati e gli altri a }1. Gli host utilizzabili sono N−2N-2 (si tolgono rete e broadcast).

Esempio. 167.199.170.82/27167.199.170.82/27: N=25=32N=2^5=32 indirizzi (3030 host). Il byte significativo è l'ultimo, 82=01010010282=01010010_2; con 27 bit di prefisso si tengono i primi 3 bit di questo byte (010010) e gli altri 5 si azzerano: 010000002=6401000000_2=64. Rete 167.199.170.64/27167.199.170.64/27; broadcast: 010111112=9501011111_2=95, cioè 167.199.170.95167.199.170.95.

Lo stesso indirizzo può stare in blocchi diversi a seconda di nn. Per 230.8.24.56/n230.8.24.56/n:

nn indirizzo di rete intervallo del blocco
16 230.8.0.0230.8.0.0 230.8.0.0230.8.0.0 – 230.8.255.255230.8.255.255
20 230.8.16.0230.8.16.0 230.8.16.0230.8.16.0 – 230.8.31.255230.8.31.255
26 230.8.24.0230.8.24.0 230.8.24.0230.8.24.0 – 230.8.24.63230.8.24.63
27 230.8.24.32230.8.24.32 230.8.24.32230.8.24.32 – 230.8.24.63230.8.24.63
29 230.8.24.56230.8.24.56 230.8.24.56230.8.24.56 – 230.8.24.63230.8.24.63
31 230.8.24.56230.8.24.56 230.8.24.56230.8.24.56 – 230.8.24.57230.8.24.57

L'indirizzo di rete è importante perché è quello che si usa per instradare un pacchetto verso la sua rete di destinazione. Quando un pacchetto arriva a un router da un host qualsiasi, il router deve sapere a quale rete va mandato (cioè da quale interfaccia farlo uscire): ricava l'indirizzo di rete della destinazione e lo cerca nella propria tabella di inoltro (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).

Netmask

Definizione (netmask). È un numero di 32 bit in cui i primi nn bit (quelli del NetID) valgono 1 e i restanti 32−n32-n (quelli dell'HostID) valgono 0. Per n=27n=27: 11111111.11111111.11111111.11100000=255.255.255.22411111111.11111111.11111111.11100000=255.255.255.224.

La maschera serve ai programmi per estrarre le informazioni del blocco con tre operazioni bit a bit (NOT, AND, OR; sono le operazioni dell'algebra di BooleAND vale 1 solo se entrambi i bit valgono 1, OR vale 1 se almeno un bit vale 1, NOT scambia 0 e 1Algebra di Boole e porte logiche → applicate a ciascuna coppia di bit nella stessa posizione). Perché funzionano: AND con un bit della maschera a 1 lascia passare il bit dell'indirizzo, AND con 0 lo azzera; quindi indirizzo AND maschera\text{indirizzo AND maschera} conserva il NetID e azzera l'HostID, cioè dà l'indirizzo di rete. Analogamente OR con 1 forza il bit a 1 e OR con 0 lo lascia com'è, e NOT(maschera) ha 1 proprio nelle posizioni dell'HostID: l'OR mette a 1 l'HostID e dà il broadcast. Infine, se l'HostID ha h=32−nh=32-n bit, NOT(maschera) è formato da hh uni, che valgono 2h−1+⋯+2+1=2h−12^{h-1}+\dots+2+1=2^h-1 (somma dei termini di una progressione geometricaLe serie di cui si conosce il carattere e da usare come termine di paragone: geometrica (converge a 1/(1-q) se |q|<1), telescopiche (somma b_1 - lim b_n, come Mengoli), armonica generalizzata (1/n^alpha converge se e solo se alpha>1).Serie notevoli - geometrica, telescopica, armonica →): aggiungendo 1 si ottiene 2h=N2^h=N.

Formula (operazioni con la maschera). N=NOT(maschera)+1,rete=indirizzo AND maschera,broadcast=indirizzo OR NOT(maschera).N=\text{NOT}(\text{maschera})+1,\qquad \text{rete}=\text{indirizzo}\ \text{AND}\ \text{maschera},\qquad \text{broadcast}=\text{indirizzo}\ \text{OR}\ \text{NOT}(\text{maschera}).

Esempio. 167.199.170.82167.199.170.82 con maschera 255.255.255.224255.255.255.224. Sull'ultimo byte: 82=0101001082=01010010, maschera 1110000011100000. AND: 01000000=6401000000=64, quindi rete 167.199.170.64167.199.170.64. NOT(maschera) =00011111=31=00011111=31, quindi N=31+1=32N=31+1=32; OR: 01010010 OR 00011111=01011111=9501010010\ \text{OR}\ 00011111=01011111=95, broadcast 167.199.170.95167.199.170.95. È lo stesso risultato del metodo precedente.

Tabella utile dei valori di un byte della maschera (i bit a 1 vanno sempre contigui, da sinistra):

byte decimale binario bit a 1
255 11111111 8
254 11111110 7
252 11111100 6
248 11111000 5
240 11110000 4
224 11100000 3
192 11000000 2
128 10000000 1
0 00000000 0

Proprietà (un indirizzo appartiene a una rete se...). Un indirizzo XX appartiene alla rete di indirizzo RR e maschera MM se e solo se X AND M=RX\ \text{AND}\ M=R.

Esempio. Rete 205.16.32.0205.16.32.0 con maschera 255.255.248.0255.255.248.0 (/21/21). Il byte interessante è il terzo, con maschera 248=11111000248=11111000. Per 205.16.42.56205.16.42.56: 42=0010101042=00101010, AND 11111000=00101000=4011111000=00101000=40, quindi 205.16.40.0≠205.16.32.0205.16.40.0\neq205.16.32.0: non appartiene. Per 205.16.37.44205.16.37.44: 37=0010010137=00100101, AND 11111000=00100000=3211111000=00100000=32, quindi 205.16.32.0205.16.32.0: appartiene. Il blocco 205.16.32.0/21205.16.32.0/21 ha 211=20482^{11}=2048 indirizzi e va da 205.16.32.0205.16.32.0 a 205.16.39.255205.16.39.255.

Regole di assegnazione dei blocchi

L'ICANN (Internet Corporation for Assigned Names and Numbers) assegna blocchi di indirizzi ai provider (ISP). Perché il CIDR funzioni valgono tre regole:

  1. il numero MM di indirizzi richiesti deve essere una potenza di 2 (se non lo è si arrotonda per eccesso alla potenza di 2 successiva);
  2. la lunghezza del prefisso del blocco è n=32−log⁡2Mn=32-\log_2M;
  3. il numero di indirizzi è una potenza di 2, quindi l'indirizzo di rete del blocco ha un suffisso di log⁡2M\log_2M zeri: il primo indirizzo deve essere un multiplo di MM (allineamento). Il motivo: gli indirizzi del blocco devono condividere tutti i primi nn bit e differire solo nei log⁡2M\log_2M bit finali, che vanno da tutti 0 (primo indirizzo) a tutti 1 (ultimo); un numero che termina con hh zeri in binario è multiplo di 2h2^h.

Esempio (mille indirizzi). Un ISP chiede 1000 indirizzi: ne ottiene 1024=2101024=2^{10}. I bit di host sono log⁡21024=10\log_2 1024=10, quindi il prefisso è n=32−10=22n=32-10=22 (attenzione: nelle slide del corso il valore 10 è confuso con il prefisso). Un blocco valido è 18.14.12.0/2218.14.12.0/22, perché il terzo byte 12=0000110012=00001100 ha gli ultimi 2 bit a zero (l'indirizzo di rete è allineato: 1212 è multiplo di 4).

Esempio (3000 host). 3000→4096=2123000\to4096=2^{12}, bit di host 1212, n=32−12=20n=32-12=20. Un blocco valido è 18.14.0.0/2018.14.0.0/20.

Esercizi tipo d'esame

Sulla carta, dato un indirizzo con la sua lunghezza (o maschera), si chiede di trovare: indirizzo di rete (primo del blocco), netmask, broadcast diretto (ultimo del blocco) e numero massimo di host (N−2N-2).

Esempio. 190.87.140.202/29190.87.140.202/29. Ultimo byte 202=11001010202=11001010; la maschera ha 5 bit a 1 nell'ultimo byte: 11001000=20011001000=200. Rete 190.87.140.200190.87.140.200, N=23=8N=2^3=8, host 66, broadcast 200+7=207200+7=207, quindi 190.87.140.207190.87.140.207 (la distanza tra il primo e l'ultimo indirizzo è N−1=7N-1=7). Netmask: 255.255.255.248255.255.255.248.

Attenzione: quando un indirizzo è davvero "di rete"

Dire che 192.168.10.0192.168.10.0 è un indirizzo di rete dipende dalla lunghezza:

  • 192.168.10.0/24192.168.10.0/24: l'HostID è l'ultimo byte, tutto a 0: sì, è un indirizzo di rete (il primo indirizzo assegnabile è 192.168.10.1192.168.10.1);
  • 192.168.10.0/16192.168.10.0/16: l'HostID sono gli ultimi due byte 10.010.0, non tutti a 0: no, l'indirizzo di rete è 192.168.0.0/16192.168.0.0/16;
  • 192.168.10.128/28192.168.10.128/28: i 4 bit di HostID sono gli ultimi 4 del byte 128=10000000128=10000000: tutti a 0: sì (primo indirizzo assegnabile 192.168.10.129192.168.10.129).

Esempi collegati: gli esercizi Esercizio - notazione decimale puntata, classi e blocchi, Esercizio - rete di appartenenza di un indirizzo e Esercizio - inizio di un blocco e blocco di un indirizzo CIDR.

Versione ripasso

Livello di rete

Indirizzo IPv4

  • Definizione: 32 bit che identificano la connessione (un router con tre interfacce ha tre indirizzi); univoco e universale; 232=4 294 967 2962^{32}=4\,294\,967\,296 indirizzi. Notazione decimale puntata: 4 byte da 0 a 255. Esempio: 10000011 10101111 00010101 00000001=131.175.21.110000011\ 10101111\ 00010101\ 00000001=131.175.21.1 (128+2+1128+2+1; 128+32+8+4+2+1128+32+8+4+2+1; 16+4+116+4+1; 11).
  • Prefisso (NetID, nn bit) e suffisso (HostID, 32−n32-n bit): stessa rete, stesso NetID. Esempio n=16n=16, 131.175.12.8131.175.12.8: NetID 131.175131.175, HostID 12.812.8.

Classi (obsolete)

classe primi bit primo byte nn reti host per rete
A 0 0 – 127 8 272^7 (126 utilizzabili) 224−2=16 777 2142^{24}-2=16\,777\,214
B 10 128 – 191 16 214=16 3842^{14}=16\,384 216−2=65 5342^{16}-2=65\,534
C 110 192 – 223 24 221=2 097 1522^{21}=2\,097\,152 28−2=2542^8-2=254
D 1110 224 – 239 multicast
E 1111 240 – 255 riservata

Quote di spazio: A 50%, B 25%, C 12,5%, D e E 6,25% ciascuna. Obsolete per esaurimento: A troppo grande (quasi tutti gli indirizzi inutilizzati), C troppo piccola (254 host).

Indirizzi speciali

Senza classi (CIDR)

Prefisso da 0 a 32 ovunque; lunghezza maggiore = rete più piccola. Si può spezzare (subnetting) o aggregare (supernetting): Subnetting e supernettingIl subnetting divide un blocco di indirizzi in sottoblocchi più piccoli allungando la maschera ($n_{\text{sub}}=n_{\text{rete}}+s$, con $2^s$ sottoreti); il supernetting (aggregazione CIDR) fa l'opposto, accorciando il prefisso per unire blocchi contigui in uno più grande. Regole di progetto: ogni sottorete ha un numero di indirizzi potenza di 2 ($M=2^k\ge$ host richiesti $+2$), prefisso $n=32-k$, indirizzo iniziale multiplo di $M$; si assegnano prima le sottoreti più grandi. Per aggregare $2^j$ blocchi di prefisso $n$ servono blocchi contigui il cui primo indirizzo sia multiplo della dimensione dell'aggregato, e il nuovo prefisso è $n-j$.Subnetting e supernetting →.

Formula (blocco a.b.c.d/na.b.c.d/n). N=232−nN=2^{32-n}; rete = primi nn bit invariati, resto a 0; broadcast = resto a 1; host utilizzabili N−2N-2.

Netmask

nn uni seguiti da 32−n32-n zeri. Es. /27/27: 255.255.255.224255.255.255.224.

Formula. N=NOT(M)+1N=\text{NOT}(M)+1; rete =IP AND M=\text{IP AND }M; broadcast =IP OR NOT(M)=\text{IP OR NOT}(M). XX appartiene alla rete RR con maschera MM se e solo se X AND M=RX\ \text{AND}\ M=R.

  • Byte di maschera: 255255 (8 uni), 254254 (7), 252252 (6), 248248 (5), 240240 (4), 224224 (3), 192192 (2), 128128 (1), 00.
  • Esempio 167.199.170.82167.199.170.82, M=255.255.255.224M=255.255.255.224: 01010010 AND 11100000=01000000=6401010010\ \text{AND}\ 11100000=01000000=64; NOT(M)=31(M)=31, N=32N=32; OR =01011111=95=01011111=95.
  • Appartenenza: rete 205.16.32.0205.16.32.0, M=255.255.248.0M=255.255.248.0 (/21/21, 20482048 indirizzi, fino a 205.16.39.255205.16.39.255). 205.16.42.56205.16.42.56: 42=0010101042=00101010, AND 11111000=4011111000=40, quindi 205.16.40.0≠205.16.32.0205.16.40.0\neq205.16.32.0, non appartiene. 205.16.37.44205.16.37.44: 37=00100101→3237=00100101\to32, appartiene.

Assegnazione dei blocchi

L'ICANN assegna blocchi agli ISP. Regole: MM indirizzi potenza di 2 (arrotondare per eccesso); n=32−log⁡2Mn=32-\log_2M; indirizzo di rete multiplo di MM (allineamento).

  • 1000 indirizzi →1024=210→n=22\to1024=2^{10}\to n=22, blocco valido 18.14.12.0/2218.14.12.0/22 (1212 multiplo di 4).
  • 3000 host →4096=212→n=20\to4096=2^{12}\to n=20, blocco valido 18.14.0.0/2018.14.0.0/20.

Esercizio tipo

190.87.140.202/29190.87.140.202/29: 202=11001010202=11001010, maschera sull'ultimo byte 11001000=20011001000=200; rete 190.87.140.200190.87.140.200, N=8N=8, host 66, broadcast 200+7=207200+7=207, netmask 255.255.255.248255.255.255.248.

Quando un indirizzo è "di rete": 192.168.10.0/24192.168.10.0/24 sì; 192.168.10.0/16192.168.10.0/16 no (rete 192.168.0.0/16192.168.0.0/16); 192.168.10.128/28192.168.10.128/28 sì (Esercizio - rete di appartenenza di un indirizzo, Esercizio - inizio di un blocco e blocco di un indirizzo CIDR, Esercizio - notazione decimale puntata, classi e blocchi).

Errori tipici: dire "rete" per un indirizzo che finisce con 0 senza guardare nn; scrivere 10 (bit di host) invece di 2222 come prefisso per 1024 indirizzi; dimenticare di togliere rete e broadcast (N−2N-2).

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata