Un'importante operazione di IP è la frammentazione dei pacchetti provenienti dal
livello superiore. Il pacchetto viene diviso in unità più piccole solo se la
sua dimensione supera la MTU (Maximum Tranfer Unit) della rete
sottostante.
In ricezione poi IP effettua il riassemblamento delle unità in un unico pacchetto.
Il pacchetto IP comprende al solito un campo header e un campo dati contenente la busta di livello superiore.
In figura sono rappresentati i campi dell'header
Il pacchetto IP |
||||
Version |
IHL |
Type of Service |
Total length |
|
Identification |
Flags |
Fragment Offset |
||
Time to live |
Protocol |
Header Checksum |
||
Source Address |
||||
Destination Address |
||||
Options |
||||
Data (variable) |
L'indirizzo IP identifica l'interfaccia attraverso cui un nodo è connesso alla rete. Se il nodo dispone di più interfacce, per es. nel caso dui un router o di una stazione multi-homed, esso avrà più indirizzi IP, uno per ogni interfaccia
L'indirizzo IP è strutturato in due campi
NETWORK ID |
HOST ID |
Gli indirizzi IP sono stati suddivisi in 4 classi, per ciascuna delle quali vengono assegnati ai due campi NETWORK ID e HOST lunghezze diverse:
CLASSE A:
0 |
7 bit |
24 bit |
CLASSE B
10 |
14 bit |
16 bit |
CLASSE C:
110 |
21 bit |
8 bit |
CLASSE D:
1110 |
Multicast Address, 28 bit |
Ogni classe è individuata dal valore del primo ottetto:
Intervalli per il primo ottetto |
|
CLASSE A | 1 - 126 |
CLASSE B | 128 - 191 |
CLASSE C | 192 - 223 |
CLASSE D | 224 - 239 |
Il campo NETWORK ID è soggetto alle seguenti limitazioni:
Anche il campo HOST ID è soggetto a limitazioni analoghe:
Queste regole portano ai seguenti intervalli per gli indirizzi IP
Intervalli indirizzi IP |
||
classe |
da: | a: |
CLASSE A | w.0.0.1 | w.255.255.254 |
CLASSE B | w.x.0.1 | w.x.255.254 |
CLASSE C | w.x.y.1 | w.x.y.254 |
Una rete può essere partizionata in più sottoreti, chiamate subnet, inerconnesse fra di loro tramite router.
Questo tipo ripartizione, può essere utile per vari motivi come gestire in modo più razionale degli indirizzi IP, garantire una maggior sicurezza, evitare i broadcast etc..
In una rete ripartita in subnet ogni
sottorete ha un proprio indirizzo composto dal NETWORK ID e da una parte del
campo HOST ID.
Se n è il numero di bit prelevati dal campo host, il numero di sottoreti che si possono creare sarà uguale a
non essendo ammessa nè la combinazione 00 nè la 11.
Per esempio se dobbiamo suddividere la rete di indirizzo IP 192.168.12.0 in due subnet, riserviamo i due bit più significativi del campo HOST ID
24 bit |
2 bit |
6 bit |
e assegnamo alle subnet ID gli indirizzi come in tabella
Subnet ID (binario) |
Subnet ID Decimale |
Subnet |
11000000.10101000.00001100.01000000 | 192.168.12.64 |
Subnet 1 |
11000000.10101000.00001100.10000000 |
192.168.12.128 |
Subnet 2 |
Il calcolo degli host sulla subnet si effettua sui bit rimanenti applicando la stessa formuletta scritta sopra. Nel nostro caso sono rimasti 6 bit, quindi 64 combinazioni. Sottraendo 2 otteniamo 62 host per subnet.
Gli indirizzi sono riportati nella tabella
Subnet |
minimo |
massimo |
Subnet 1 | 192.168.12.65 | 192.168.12.126 |
Subnet 2 | 192.168.12.128 | 122.168.12.190 |
La subnet mask o netmask è una maschera a 32 bit che ogni host o router utilizza per determinare se un indirizzo IP appartiene ad una rete o sottorete.
La subnet mask è composta da una sequenza di 1 lunga quanto il campo NETWORK ID + l'eventuale Subnet ID. Il resto dei bit è posto a 0.
Il procedimento adottato consiste nell'effettuare un AND bit a bit fra l'indirizzo IP e la maschera.
Per esempio la subnet mask della rete 192.168.12.0 non partizionata è
subnet mask = 11111111.11111111.11111111.00000000
in decimale 255.255.255.0
Se la rete è partizionata come sopra, avremo
subnet mask = 11111111.11111111.11111111.11000000
in decimale 255.255.255.192
L' enorme crescita di Internet (con l'esaurirsi degli indirizzi di classe B) e la rapida crescita delle reti aziendali hanno reso poco flessibile e inadeguata la tecnica di subnetting descritta sopra. Per esempio se un'azienda volesse suddividere la propria rete di 2000 host, in 8 subnet ciascuna con 250 host, sarebbe nell'impossibilità di farlo con un indirizzo di classe C. L'unica alternativa sarebbe chiedere 8 indirizzi di classe C. Questo però condurrebbe ad un sovraccaricamento dei routers i quali devono inserire nelle loro tabelle di istradamento invece di un solo indirizzo (per es di classe B), 8 indirizzi di classe C.
Per risolvere il problema si assegna un blocco di indirizzi "consecutivi" chiamato CIDR (Classless Interdomain Routing) block, in cui la parte costante non è più vincolata alla classe di appartenenza.
Per esempio nel caso di 2000 host, supponiamo che venga rilasciato un intervallo di 8 indirizzi di classe C per un totale di 8x254=2032 hosts, compreso fra 220.78.168.0 e 220.78.175.0. Se convertiamo in binario avremo:
220.78.168.0 = 11011100 01001110 10101000 00000000
220.78.175,0 = 11011100 01001110 10101111 00000000
La parte sottolineata, che come si vede rimane costante, costituisce il NETWORK ID dell’intera rete, mentre i tre bit del terzo ottetto variano dando in successione gli otto indirizzi del blocco.
A questo punto sarà sufficiente per il router (che naturalmente deve supportare il CIDR) creare una sola entry (CIDR entry) nella sua tabella di routing con il primo indirizzo del blocco e una netmask a 21 bit uguale a 1111111111111111 11111000 00000000