vuoi
o PayPal
tutte le volte che vuoi
Questo porta a NetID poco ottimizzate per il reale numero di host che necessitano
gestire e allo spreco di numerosi indirizzi; al tempo stesso, però, permetteva una
gestione semplificata del routing grazie al fatto che bastava che un router esaminasse
in primi bit del primo byte per determinare il NetID di un indirizzo, ovviando così al
bisogno di riportare la netmask nelle tabelle di routing e nei messaggi.
In genere, una rete IP rappresenta un insieme di interfacce fisicamente interconnesse
(attraverso switch e hub) e, perché questa possa comunicare con altre reti, è
solitamente presente almeno un router; è importante notare come ogni host possa
avere più interfacce di rete (dual homing) e come ognuna di esse debba appartenere a
reti IP diverse.
Esistono blocchi di indirizzi, detti indirizzi privati, utilizzabili da chiunque all’interno di
una rete locale; questi sono divisi in tre blocchi:
Da 10.0.0.0 a 10.255.255.255
Da 172.16.0.0 a 172.31.255.255
Da 192.168.0.0 a 192.168.255.255
Un pacchetto contenente come destinazione un indirizzo privato non verrà mai
inoltrato da un router verso una sua interfaccia pubblica.
Vi sono poi degli indirizzi speciali:
Indirizzo di broadcast diretto: il campo HostID viene posto tutto a 1 e ha la
funzione di mandare un messaggio di broadcast nella rete indicata nel campo
NetID (il broadcast viene eseguito solo dal router della rete di destinazione,
mentre quelli di transito lo trattano come un normale pacchetto)
Indirizzo di broadcast limitato: è composto da soli 1 e assume il significato di un
indirizzo di broadcast nella stessa rete di chi invia il pacchetto, il quale non può
oltrepassare il router di indirizzo 255.255.255.255 (usato nel campo
destinazione). Il router stesso della rete lo inoltra ai livelli superiori.
Indirizzo di rete: il campo HostID viene posto tutto a 0 e ha la funzione di
indicare la rete il cui indirizzo è contenuto nel campo NetID (utilizzato solo nelle
tabelle di instradamento)
Indirizzo di un host: il campo NetID viene posto tutto a 0 e l’indirizzo
rappresenta l’host il cui indirizzo è contenuto nel campo di host sulla stessa rete
del mittente (unicast limitato)
Indirizzo del mittente: tutto l’indirizzo viene posto a zero e questo rappresenta il
mittente stesso del pacchetto (usato nel campo sorgente quando, ad esempio, il
mittente non conosce il proprio indirizzo IP)
Indirizzo di loopback: il primo byte viene posto a 127 e tutti gli altri vengono
lasciati generici (generalmente posti a 0) per permettere a un host di mandare
un pacchetto a sé stesso (ad esempio durante eventuali test delle funzionalità
di rete).
L’assegnamento degli indirizzi IP avviene per mezzo della IANA – Internet Assegned
Numbers Authority – la quale coordina l’assegnazione degli indirizzi su base mondiale
ai RIR – Regional Internet Registries; questi, cinque in tutto il mondo, ricevono in
genere gruppi di indirizzi /8 che provvedono successivamente ad assegnare ai Local
Internet Registries (ISP o istituzioni che, a loro volta, possono assegnare prefissi di rete
ai propri clienti).
Nota: attualmente tutti gli indirizzi IPv4 sono esauriti e, per queste, si sta passando
all’adozione dello standard IPv6.
Subnetting
Per ovviare alle problematiche di gestione e di performance in una rete IP
particolarmente estesa, si può suddividere la stessa in più sottoreti (subnet) ognuna
corrispondente a una rete fisica e separata per mezzo di un router. Ciò è possibile
aggiungendo in seguito al NetID una SubnetID, che va di fatto ad estendere il prefisso
di rete, e riportando la netmask come successione dei bit delle due:
Nel caso in cui non sia sufficiente utilizzare il subnetting classico, si può ricorrere
all’utilizzo del VLSM – Variable Length Subnet Mask; questo approccio consiste
nell’applicare due netmask in cascata, in modo da suddividere una subnet in
un’ulteriore subnet.
Inoltro dei pacchetti
Nel trasferimento di pacchetti tra due host, l’IP si serve delle capacità di inoltro delle
reti locali attraversate: si parla di inoltro diretto quando la destinazione è nella stessa
rete IP (e rete locale) e di inoltro indiretto in caso contrario.
La trasmissione dei pacchetti, all’interno delle reti locali, avviene a livello due e si basa
sugli indirizzo MAC dei dispositivi: nel caso due host della stessa rete debbano
comunicare, questi utilizzeranno i propri indirizzi fisici come indirizzi di destinazione e
sorgente (caso di inoltro diretto); se invece a dover comunicare sono due host di reti
differenti, verrà utilizzatati come tramite due router delle rispettive reti di cui i
dispositivi conoscono l’indirizzo fisico (caso di inoltro indiretto).
Per quanto riguarda i router, questi dispositivi di internetworking con interfacce di
uscita multiple e, come gli host, seguono delle tecniche di inoltro diretto, che può
avvenire però su più interfacce, e indiretto, che si basa su tabelle di routing dove
vengono definite le rotte di instradamento. L’inoltro ha due caratteristiche:
Destination based: è basato solo sull’indirizzo di destinazione
Next hop routing: nelle tabelle di routing per ogni rete di destinazione viene
indicato solo il prossimo router (il next-hop) nel percorso da seguire
L’inoltro avviene inoltre da router a router attraverso reti IP ed è basato solo sulla
parte di NetID dell’indirizzo di destinazione: tutti gli host di una stessa rete, infatti,
sono identificati nella tabella di routing mediante una singola entry rappresentata del
prefisso di rete (Address Aggregation). A causa dell’utilizzo del CIDR, inoltre, nelle
tabelle di indirizzamento deve essere sempre esplicitata la lunghezza del NetID e i
protocolli di routing devono essere in grado di inviare anche l’informazione relativa alla
Netmask insieme agli indirizzi di rete in tutti i messaggi di annuncio rotte.
Per inoltrare un pacchetto occorre che il router capisca se appartiene o meno alla
sottorete di una delle interfacce: questo avviene eseguendo un AND bit a bit tra
l’indirizzo dell’interfaccia e netmask e tra l’indirizzo di destinazione e netmask. Nel
caso i due risultati corrispondano, si procede all’inoltre diretto delle informazioni
mentre, in caso contrario, occorre analizzare la tabella di routing del router; si esegue
il confronto riga per riga con la stessa metodologia iniziale: se si ottengono più esiti
positivi, si procede all’inoltro all’indirizzo con la netmask più lunga (con il maggior
numero di 1, principio del longest prefix matching), in quanto questa corrisponde ad
un’informazione di routing più specifica. Nel caso invece non vi siano esiti positivi
l’inoltro viene effettuato verso il default router (caratterizzato nella tabella da indirizzi
e netmask interamente posti a 0, che permettono di ottenere sempre un esito positivo
dal confronto).
Aggregazione di indirizzi – Supernetting
Per ovviare alla crescita delle tabelle di routing, e quindi alla crescita sul tempo di
ricerca dovuta a limitazioni hardware e software, si raggruppano indirizzi contigui
utilizzando le supernet e le supernet mask:
Perché questa metodologia di aggregazione degli indirizzi sia efficace, è opportuno che
gli indirizzi IP vengano assegnati su base geografica (ovvero che blocchi adiacenti di
indirizzi si trovino nella stessa area); inoltre il supernetting permette una migrazione di
indirizzi tra ISP più agevole, nonché una più efficiente propagazione delle rotte.
Protocollo IPv4
Il servizio di comunicazione offerto dal protocollo IP è connectionless, ovvero
progettato secondo un paradigma packet-oriented (datagram) dove due pacchetti
destinati allo stesso host possono seguire due percorsi differenti, e di tipo best-effort,
senza cioè garanzia di successo nel trasferimento dei dati.
Gestisce inoltre la frammentazione e la deframmentazione dei pacchetti nel caso in cui
il livello 2 locale lo richieda (IP è infatti pensato per lavorare con differenti tecnologie
di livello inferiore).
Le unità informative dell’IP, i datagrammi o pacchetti, sono composte da header e
payload, con quest’ultimo che ospita la PDU del livello di trasporto; il protocollo è in
grado di rivelare e segnalare errore e gestire il TTL dei pacchetti, cancellandoli nel
caso questo venga ecceduto. Un datagramma IP è composto come segue:
Ver (4 bit): indica la versione del protocollo utilizzata; se questa non corrisponde
con la versione implementata sul router ricevente, il pacchetto viene scartato
HLEN (4 bit): indica la lunghezza dell’header del pacchetto espressa in parole da
32 bit (può essere al massimo 64 byte)
Total length (16 bit): indica la lunghezza totale del pacchetto in byte (può essere
al massimo 65 MB)
TOS (8 bit): indica il “type of service”, generalmente usato dai router per
riconoscere il livello di priorità di un pacchetto e agire di conseguenza nella
gestione delle code. Può inoltre essere utile, nelle versioni del TCP che lo
supportano, per segnalare un’imminente congestione alle destinazioni
Protocol: indica, attraverso un codice, il protocollo di livello superiore,
identificando il SAP tra esso e l’IP
TTL: indica il time to live, settato a un valore elevato da chi genera il pacchetto
e decrementato da ogni router che questo attraverso; il router che,
eventualmente, porta tale valore a zero scarta il pacchetto generando un
messaggio di errore verso la sorgente
La frammentazione dei pacchetti si rende necessaria perché i link della rete
impongono un limite alla dimensione delle trame di livello 2 (MTU o Maximum Transfer
Unit), costringendo così il protocollo a dover dividere un datagram IP troppo lungo in
più frammenti, riassemblati poi una volta giunti a destinazione.
La frammentazione prevede che ogni pacchetto IP venga diviso in più frammenti,
ciascuno dei quali munito di un header proprio, che possono poi essere ulteriormente
divisi lungo il cammino: la riframmentazione è possibile grazie a dei campi contenuti
nell’header stesso. Questi sono:
Identification (16 bit): identifica tutti i frammenti di uno stesso pacchetto
univocamente
Fragmentation Offset (13 bit): i byte del pacchetto originale vengono numerati
da 0 al valore della lunghezza totale e questo campo riporta il numero di
sequenza del primo byte del frammento (in parole da 8 byte)
Flags: vi sono due flags nell’header, uno (bit M) viene posto a 0 solo nell’ultimo
frammento mentre l’altro (bit D) viene posto a 1 quando non si vuole che venga
applicata la frammentazione lungo il percorso (preferendo a essa l’eliminazi