Per inviare dati a qualcuno sulle reti digitali, avete bisogno dell’indirizzo giusto (in questo caso l’indirizzo IP), come accade del resto quando volete inviare una lettera. Così i pacchetti vengono dotati di un indirizzo IP, proprio come si scrive un indirizzo postale sulla busta delle lettere, di modo che la lettera arrivi a de­sti­na­zio­ne. A dif­fe­ren­za degli indirizzi postali, i loro cor­ri­spet­ti­vi digitali non sono però legati a uno specifico luogo, bensì vengono assegnati au­to­ma­ti­ca­men­te o ma­nual­men­te al di­spo­si­ti­vo di rete al momento di stabilire una con­nes­sio­ne. In questo processo il co­sid­det­to pro­to­col­lo Internet ricopre un ruolo im­por­tan­te.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa
De­fi­ni­zio­ne Internet Protocol
L’Internet Protocol, ab­bre­via­to in IP, è il pro­to­col­lo prin­ci­pa­le della famiglia dei pro­to­col­li Internet e quindi di vitale im­por­tan­za per lo scambio di messaggi nelle reti di computer. Il pro­to­col­lo senza con­nes­sio­ne, che è stato ri­la­scia­to nel 1974 dall’Institute of Elec­tri­cal and Elec­tro­nics Engineers (IEEE) e spe­ci­fi­ca­to come standard nell’ RFC 791, deve prima di tutto garantire l’invio corretto del pacchetto dal mittente al de­sti­na­ta­rio. Per questo motivo l’Internet Protocol pre­sta­bi­li­sce un formato che definisce il tipo di de­scri­zio­ne di questi pacchetti (chiamati anche da­ta­gram­mi).

Pro­to­col­lo Internet: de­fi­ni­zio­ne e storia

Il pro­to­col­lo Internet (in inglese “Internet Protocol“, ab­bre­via­to in IP) è un pro­to­col­lo senza con­nes­sio­ne che, in qualità di com­po­nen­te im­por­tan­te della famiglia dei pro­to­col­li Internet, ovvero una col­le­zio­ne di circa 500 pro­to­col­li di rete, è re­spon­sa­bi­le per l’in­di­riz­za­men­to e la fram­men­ta­zio­ne dei pacchetti nelle reti digitali. Insieme al pro­to­col­lo di trasporto TCP (Tran­smis­sion Control Protocol) l’indirizzo IP rap­pre­sen­ta la base di Internet.

Per inviare un pacchetto dal mittente al de­sti­na­ta­rio, il pro­to­col­lo Internet definisce una struttura di pacchetto che riassume i dati da inviare. Così il pro­to­col­lo sta­bi­li­sce in che modo possano essere descritte le in­for­ma­zio­ni sull’origine e la de­sti­na­zio­ne dei dati, separando queste in­for­ma­zio­ni nell’header IP dal carico vero e proprio. Un simile formato di pacchetto viene descritto anche come da­ta­gram­ma.

Nel 1974 l‘Institute of Elec­tri­cal and Elec­tro­nics Engineers (IEEE) ha pub­bli­ca­to una ricerca ef­fet­tua­ta dagli in­for­ma­ti­ci sta­tu­ni­ten­si Robert Kahn e Vint Cerf, che hanno descritto un modello di pro­to­col­lo per la reciproca con­nes­sio­ne di rete del pacchetto sulla base del pre­de­ces­so­re di Internet ARPANET. Oltre al pro­to­col­lo di tra­sfe­ri­men­to TCP, anche il pro­to­col­lo IP fa parte dei com­po­nen­ti prin­ci­pa­li di questo modello, con­sen­ten­do, con uno specifico livello di astra­zio­ne, la co­mu­ni­ca­zio­ne a partire dalle diverse reti fisiche. Suc­ces­si­va­men­te sono state associate sempre più reti di ricerca sulla base di questa com­bi­na­zio­ne di pro­to­col­lo, descritta come “TCP/IP”, che è stata de­fi­ni­ti­va­men­te spe­ci­fi­ca­ta come standard nell’RFC 791 nel 1981.

IPv4 e IPv6: cosa si nasconde dietro i dif­fe­ren­ti numeri di versione

Og­gi­gior­no chi ha a che fare con un simile indirizzo IP per rendere, ad esempio, in­di­riz­za­bi­li i computer nella rete locale, si imbatte nelle due varianti, IPv4 e IPv6. Con questi non si indicano però la quarta e la sesta ge­ne­ra­zio­ne del pro­to­col­lo IP, anche se in passato il pro­to­col­lo ha subito dei cam­bia­men­ti radicali. Infatti nel caso dell’IPv4 si tratta piuttosto della prima versione ufficiale del pro­to­col­lo Internet, mentre il numero di versione deriva solamente dal fatto che viene uti­liz­za­ta la quarta ge­ne­ra­zio­ne del pro­to­col­lo TCP. Il pro­to­col­lo IPv6 è a sua volta il suc­ces­so­re diretto dell’IPv4, visto che lo sviluppo del pro­to­col­lo IPv5 è stato tem­pe­sti­va­men­te sospeso per motivi economici. Tuttavia, anche se non ci sono altre release dell’IPv4 e dell’IPv6, il pro­to­col­lo Internet è stato re­vi­sio­na­to dal 1974, come già accennato, quando non esisteva ancora come pro­to­col­lo autonomo e faceva ancora parte del pro­to­col­lo TCP. Es­sen­zial­men­te ci si era con­cen­tra­ti sull’ot­ti­miz­za­zio­ne della con­nes­sio­ne e dell’in­di­riz­za­men­to. Così è stata ad esempio aumentata già prima la lunghezza bit degli indirizzi host, por­tan­do­la da 16 a 32 bit, tramite la quale lo spazio di in­di­riz­za­men­to è stato ampliato a circa quattro miliardi di possibili com­bi­na­zio­ni. L’in­no­va­ti­vo IPv6 consente di arrivare ad­di­rit­tu­ra a 340 se­sti­lio­ni di diversi indirizzi, cioè a un numero con 37 zeri, grazie all’am­plia­men­to dello spazio di in­di­riz­za­men­to a 128 bit, con il quale si riuscirà a sod­di­sfa­re per molto tempo la necessità di nuovi indirizzi Internet.

Come è strut­tu­ra­to l’header IP di un da­ta­gram­ma

Come già accennato, il pro­to­col­lo Internet si assicura che vengano an­te­ce­du­te a ogni pacchetto, nell’header, le proprietà strut­tu­ra­li im­por­tan­ti e che gli venga assegnato il pro­to­col­lo di trasporto adeguato (so­li­ta­men­te quello TCP). La sezione in­te­sta­zio­ne è stata ra­di­cal­men­te mo­di­fi­ca­ta nella versione 6, motivo per cui si deve fare una di­stin­zio­ne tra l’header dell’IPv4 e quello dell’IPv6.

Struttura dell’header dell’IPv4

Ogni header IP comincia quindi sempre con un’in­di­ca­zio­ne di 4 bit del numero di versione del pro­to­col­lo Internet IPv4 o IPv6. Seguono altri 4 bit che com­pren­do­no le in­for­ma­zio­ni sulla lunghezza dell’header (Internet Header Length), visto che non è costante. La lunghezza totale (Total Length) si calcola sempre a partire da questo valore mol­ti­pli­ca­to per 32 bit. Il valore 5, il più piccolo possibile, sta quindi per una lunghezza dell’header di 160 bit che cor­ri­spon­de a 20 byte. In questo caso non si ag­giun­go­no opzioni. Il massimo è il valore 15, ovvero 480 bit che cor­ri­spon­do­no a 60 byte.

I bit da 8 a 15 (Type of Service) possono com­pren­de­re istru­zio­ni per come trattare il da­ta­gram­ma e quale priorità dargli. In questo caso l’host può ad esempio indicare l’im­por­tan­za per lui di punti, quali l’at­ten­di­bi­li­tà, la capacità e il ritardo durante la tra­smis­sio­ne dati.

La lunghezza totale indica la di­men­sio­ne com­ples­si­va del pacchetto, in altre parole somma le di­men­sio­ni dei dati di utilizzo alla lunghezza dell’header. Visto che il campo ha una lunghezza di 16 bit, il limite massimo è di 65.635 byte. In più nell’RFC 791 è stabilito che ogni host deve essere in grado di elaborare almeno 576 byte. Un da­ta­gram­ma può essere fram­men­ta­to in un qualsiasi modo sul percorso per rag­giun­ge­re l’host di de­sti­na­zio­ne dei router e degli altri di­spo­si­ti­vi, anche se i frammenti non do­vreb­be­ro essere più piccoli di 576 byte. Gli altri campi dell’header IPv4 hanno il seguente si­gni­fi­ca­to:

  • Iden­ti­fi­ca­tion: tutti i frammenti di un da­ta­gram­ma di­spon­go­no di uno stesso numero di iden­ti­fi­ca­zio­ne che ricevono dal mittente. Com­pa­ran­do questo campo di 16 bit, l’host di de­sti­na­zio­ne può quindi assegnare i singoli frammenti a un da­ta­gram­ma preciso.
     
  • Flags: ogni header IP comprende 3 flag di bit che includono le in­for­ma­zio­ni e le istru­zio­ni da seguire per la fram­men­ta­zio­ne. Il primo bit è perciò occupato e ha sempre il valore di 0. Il secondo bit che prende il nome di “Dont Fragment“ svela se il pacchetto può essere fram­men­ta­to (0) o no (1). L’ultimo bit, chiamato “More Fragments“, informa se seguono altri frammenti (1) o se il pacchetto è stato già chiuso com­ple­ta­men­te (1) o se termina con il frammento corrente (0).
     
  • Fragment offset: questo campo informa l’host di de­sti­na­zio­ne di quale punto faccia parte il singolo frammento di modo che possa ri­com­por­re di nuovo fa­cil­men­te tutto il da­ta­gram­ma. Con “offset” si indica lo scarto rispetto ad un valore di ri­fe­ri­men­to. La lunghezza di 13 bit segnala che un da­ta­gram­ma può essere suddiviso al massimo in 8192 frammenti.
     
  • Time to Live (TTL): per evitare che un pacchetto nella rete si sposti da nodo a nodo per un tempo in­de­fi­ni­to, viene provvisto di una durata massima di vita al momento dell’invio, cioè del Time to live. Per questo campo di 8 bit lo standard RFC prevede l’unità in secondi e così la durata massima ammonta a 255 secondi. Per ogni nodo di rete at­tra­ver­sa­to il TTL viene ridotto di almeno 1. Se viene raggiunto il valore 0, il pacchetto viene au­to­ma­ti­ca­men­te respinto.
     
  • Protocol: il campo pro­to­col­lo (8 bit) assegna al pacchetto il ri­spet­ti­vo pro­to­col­lo di trasporto, ad esempio il valore 6 sta per il pro­to­col­lo TCP o il valore 17 per quello UDP. Dal 2002 viene gestita e ag­gior­na­ta la lista di tutti i possibili pro­to­col­li dalla IANA (Internet Assigned Numbers Authority).
     
  • Header Checksum: il campo checksum di 16 bit comprende la checksum dell’header che deve essere ri­con­teg­gia­ta per ogni nodo di rete, per via del TTL ridotto a ogni stazione in­ter­me­dia. La cor­ret­tez­za dei dati da uti­liz­za­re non viene ve­ri­fi­ca­ta per motivi di ef­fi­cien­za.
     
  • Source and De­sti­na­tion Address: 32 bit, quindi 4 byte, sono destinati all’indirizzo IP dell’host di origine e di de­sti­na­zio­ne. Questi indirizzi IP vengono scritti so­li­ta­men­te sotto forma di numeri decimali separati da 4 punti. L’indirizzo più basso è quindi 0.0.0.0, quello più alto 255.255.255.255.

Options: il campo di opzioni amplia il pro­to­col­lo IP di in­for­ma­zio­ni ag­giun­ti­ve, non previste nella struttura standard. Visto che in questo caso si tratta solo di campi opzionali, la lunghezza è variabile e viene limitata solo dalla lunghezza massima dell’header. Tra le opzioni possibili rientrano ad esempio “Security” che segnala la crit­to­gra­fia del da­ta­gram­ma, “Record Route” che indica tutti i nodi di rete at­tra­ver­sa­ti e include i loro indirizzi IP per poter com­pren­de­re il percorso del pacchetto, e “Time Stamp” che inserisce la data e l’ora in cui è stato at­tra­ver­sa­to un preciso nodo.

Struttura dell’header IPv6

Al contrario dell’header del suo pre­de­ces­so­re, l’header del pro­to­col­lo IPv6 ha una di­men­sio­ne fissa di 320 bit (40 byte). Le in­for­ma­zio­ni ag­giun­ti­ve, ne­ces­sa­rie solo di rado, vengono allegate se­pa­ra­ta­men­te tra l’header standard e il carico (payload). Queste righe di esten­sio­ne della sezione in­te­sta­zio­ne (Extension Header) vengono comparate con il campo di opzione del pro­to­col­lo IPv4 e possono essere adattate in ogni momento senza che debba essere mo­di­fi­ca­to l’header vero e proprio. Tra gli altri, in questo modo si possono definire i percorsi del pacchetto, indicare le in­for­ma­zio­ni di fram­men­ta­zio­ne o avviare la co­mu­ni­ca­zio­ne crit­to­gra­fa­ta tramite IPSec. Tuttavia non esiste una checksum dell’header che vada par­ti­co­lar­men­te a favore della per­for­man­ce.

L’header IP vero e proprio comincia con un numero di versione del pro­to­col­lo Internet di 4 bit, come anche nel caso dell‘IPv4. Il suc­ces­si­vo campo “Traffic Class” equivale alla voce “Type of Service” nella variante di pro­to­col­lo pre­ce­den­te. Come nella versione pre­ce­den­te, questi 8 bit informano l’host di de­sti­na­zio­ne sull’ela­bo­ra­zio­ne qua­li­ta­ti­va del da­ta­gram­ma, per cui valgono le stesse regole. Nell’IPv6 il Flow Label (20 bit) è un campo nuovo grazie al quale è possibile iden­ti­fi­ca­re flussi di dati pro­ve­nien­ti da pacchetti correlati, per riservare la banda larga e ot­ti­miz­za­re il routing. La seguente lista illustra le altre in­for­ma­zio­ni dell’header del pro­to­col­lo IP mi­glio­ra­to:

  • Payload Length: l’IPv6 comunica un valore per le di­men­sio­ni del carico dati tra­spor­ta­to, com­pren­si­vo di Extension Header (in totale 16 bit). Nella versione pre­ce­den­te questo valore doveva essere calcolato se­pa­ra­ta­men­te dalla lunghezza totale, sot­traen­do la lunghezza dell’header.
     
  • Next Header: il campo “Next Header“ di 8 bit è l’equi­va­len­te dell’in­di­ca­zio­ne del pro­to­col­lo nell’IPv4 e ha preso come tale la relativa funzione, vale a dire l’as­se­gna­zio­ne del pro­to­col­lo di trasporto de­si­de­ra­to.
     
  • Hop Limit: il limite dell’hop (8 bit) definisce il numero massimo di stazioni in­ter­me­die che può at­tra­ver­sa­re un pacchetto, prima che venga respinto. Come nel campo TTL nell’IPv4, il valore viene ridotto di almeno 1 a ogni nodo.

Source and De­sti­na­tion Address: la maggior parte dell’header IPv6 è occupata dagli indirizzi del mittente e del de­sti­na­ta­rio. Come già bre­ve­men­te accennato all’inizio, questi hanno una lunghezza di 128 bit (il quadruplo degli indirizzi IPv4). Anche per quanto riguarda la solita an­no­ta­zio­ne ci sono delle dif­fe­ren­ze so­stan­zia­li: infatti la versione più recente del pro­to­col­lo Internet ricorre a numeri esa­de­ci­ma­li, sud­di­vi­den­do­li in 8 blocchi di 16 bit ciascuno. Per la sud­di­vi­sio­ne vengono uti­liz­za­ti dei doppi punti invece dei punti. Così un indirizzo IPv6 completo assume la seguente forma: 2001:0db8:85a3:08d3:1319:8a2e:0370:7344.

Come funziona l’as­se­gna­zio­ne di indirizzo del pro­to­col­lo Internet?

I da­ta­gram­mi devono essere prima di tutto assegnati ai membri della rete, di modo che nell’header possano essere eseguite le in­di­ca­zio­ni ele­men­ta­ri dell’indirizzo di origine e di de­sti­na­zio­ne. In questo caso si distingue tra­di­zio­nal­men­te tra indirizzi IP interni ed esterni o pubblici. Ai primi, che servono per la co­mu­ni­ca­zio­ne nelle reti locali, sono destinati i tre spazi di in­di­riz­za­men­to:

  • 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

Per le reti IPv6 è previsto il prefisso “fc00::/7”. Gli indirizzi di questi campi non vengono in­stra­da­ti su Internet e possono perciò essere se­le­zio­na­ti li­be­ra­men­te e uti­liz­za­ti nelle reti private o aziendali. L’as­se­gna­zio­ne di un indirizzo avviene tramite in­se­ri­men­to manuale o au­to­ma­ti­co non appena un di­spo­si­ti­vo si collega alla rete, a patto che l’as­se­gna­zio­ne di indirizzo au­to­ma­ti­ca sia attiva e venga uti­liz­za­to un server DHCP. Inoltre, grazie a una maschera di sottorete, una simile rete locale può essere seg­men­ta­ta in altri campi. Gli indirizzi IP esterni vengono assegnati ai router au­to­ma­ti­ca­men­te dal ri­spet­ti­vo provider quando si con­net­to­no a Internet. Tutti i di­spo­si­ti­vi, che si trovano in rete tramite un router in comune, ricorrono in breve allo stesso IP esterno. Di solito i provider assegnano un nuovo indirizzo Internet ogni 24 ore da uno spazio di in­di­riz­za­men­to che è stato loro assegnato, a sua volta, dalla IANA. Ciò vale per l’arsenale quasi ine­sau­ri­bi­le di indirizzi IPv6 che sono ri­la­scia­ti solo in parte per un normale utilizzo. Inoltre non viene solo fatta una sud­di­vi­sio­ne in indirizzi privati e pubblici, bensì emergono, grazie a pos­si­bi­li­tà di clas­si­fi­ca­zio­ne es­sen­zial­men­te più versatili, anche i co­sid­det­ti campi di validità (Address Scopes):

  • Host scope: un host può uti­liz­za­re l’indirizzo indicato come loopback 0:0:0:0:0:0:0:1 per inviare i da­ta­gram­mi IPv6 a se stesso.

  • Link local scope: per la con­net­ti­vi­tà dell’IPv6 è fon­da­men­ta­le che ogni host disponga di un proprio indirizzo, anche se è valido solo in una rete locale. Questo indirizzo link local è segnalato tramite il prefisso “fe80::/10“ ed è ad esempio ne­ces­sa­rio per la co­mu­ni­ca­zio­ne con lo standard gateway (router) per poter generare un indirizzo IP pubblico.

  • Unique local scope: si tratta di uno spazio di in­di­riz­za­men­to già te­ma­tiz­za­to “fc00::/7“, dedicato esclu­si­va­men­te alla con­fi­gu­ra­zio­ne delle reti locali.

  • Site local scope: il Site Local Scope è nel frattempo uno spazio di in­di­riz­za­men­to più datato con il prefisso “fec0::/10”, che è stato ugual­men­te definito per le reti locali. Dall’unione di diverse reti o all’interno delle con­nes­sio­ni VPN tra le reti, che erano numerate con gli indirizzi site local, si è giunti però a delle com­pli­ca­zio­ni, motivo per cui lo standard è stato clas­si­fi­ca­to come superato.

  • Global scope: ogni host che vorrebbe in­stau­ra­re una con­nes­sio­ne con Internet ha bisogno almeno di un proprio indirizzo pubblico che l’host desume per au­to­con­fi­gu­ra­zio­ne, ri­cor­ren­do allo SLAAC (con­fi­gu­ra­zio­ne di indirizzo senza stato) o al DHCPv6 (con­fi­gu­ra­zio­ne di indirizzo orientata allo stato).

  • Multicast scope: i nodi di rete, i router, i server e gli altri servizi di rete possono essere raccolti con l’IPv6 in gruppi multicast. Ognuno di questi gruppi dispone di un proprio indirizzo tramite il quale si possono rag­giun­ge­re tutti gli host coinvolti con un singolo pacchetto.

Come il pro­to­col­lo IP regola la fram­men­ta­zio­ne

Tutte le volte che un pacchetto deve essere inviato tramite TCP/IP avviene au­to­ma­ti­ca­men­te una verifica delle di­men­sio­ni totali: se queste superano l’unità di tra­smis­sio­ne massima (“Maximum Tran­smis­sion Unit” in inglese) della cor­ri­spet­ti­va in­ter­fac­cia di rete, le in­for­ma­zio­ni vengono fram­men­ta­te, quindi scomposte in blocchi di dati più piccoli. Questo compito è assunto dall’host che invia (IPv6) o un router in­ter­me­dio (IPv4). Il pacchetto viene unito di default dal de­sti­na­ta­rio, per cui ricorre alle in­for­ma­zio­ni di fram­men­ta­zio­ne me­mo­riz­za­te nell’header IP o nell’Extension Header. In casi ec­ce­zio­na­li il Reas­sem­bling (in italiano: “rias­sem­bla­men­to”) può essere in­tra­pre­so da un firewall, a patto che sia con­fi­gu­ra­to ade­gua­ta­men­te.  

Visto che in generale l’IPv6 non prevede più la fram­men­ta­zio­ne e questa non è neanche più permessa dal router, il pacchetto IP deve avere una di­men­sio­ne adeguata già prima di essere inviato. Se i da­ta­gram­mi IPv6 che vanno oltre la Maximum Tran­smis­sion Unit rag­giun­go­no un router, quest’ultimo li rigetta e informa il mittente sotto forma di un messaggio ICMPv6 di tipo 2 “Packet too big” (in italiano “Il pacchetto [è] troppo grande). L’ap­pli­ca­zio­ne che invia i dati può creare pacchetti più piccoli, non fram­men­ta­ti, o avviare una fram­men­ta­zio­ne. Infine al pacchetto IP viene aggiunto l’Extension Header adeguato, di modo che dopo la ricezione l’host di de­sti­na­zio­ne possa ri­com­por­re anche i singoli frammenti.

Vai al menu prin­ci­pa­le