PROGRAMMIAMO
Internet - Protocollo IP
Il protocollo IP

Il protocollo IP (Internet Protocol) è il protocollo principale del livello 3 (Livello Internet) dell’architettura TCP/IP. Si tratta di uno dei protocolli più importanti per l'organizzazione e il funzionamento dell'intera rete Internet, in quanto esso definisce anzitutto il sistema di indirizzi (detti appunto indirizzi IP) che garantiscono l'accessibilità di ogni nodo della rete. Il funzionamento dei router, che assicurano la interconnessione fra reti diverse in Internet, si basa in gran parte sulle specifiche del protocollo IP. Per intuirne l'importanza e la complessità basti dire che la RFC che lo definisce per la prima volta (RFC 760 del gennaio 1980) contiene ben 41 pagine di specifiche e definizioni.

Poiché abbiamo già ampiamente parlato in precedenza degli indirizzi IP e del funzionamento dei router, ci limiteremo qui a discutere le specifiche del protocollo IP che hanno a che fare con la struttura dei pacchetti, la loro frammentazione e deframmentazione.

Dal punto di vista della trasmissione, il protocollo IP definisce una trasmissione senza connessione e non affidabile. Cioè, riassumendo:

Struttura di un pacchetto IP

Le applicazioni che operano col protocollo IP ricevono i dati dal livello superiore (livello di Trasporto) e li incapsulano nelle PDU del protocollo IP (delle quali costituiscono dunque il payload), secondo il meccanismo ormai noto:

Incapsulamento pacchetti IP

Le PDU del livello IP vengono dette pacchetti (packet) o datagram (noi abbiamo preferito mantenere una distinzione di nomi, fra i datagram del protocollo UDP e i pacchetti del protocollo IP, ma questa distinzione è tutt'altro che standardizzata). Diamo subito un'occhiata a come fatto un pacchetto IP:

<------------------------------------------------------  32 bits --------------------------------------------------------------->
Versione 
(4 bit)
Lunghezza dell'intestazione
(4 bit)
Tipo di servizio 
(8 bit)
Lunghezza totale 
(16 bit)
Identificazione 
(16 bit)
Flag
(3 bit)
Fragment offset
(13 bit)
Durata di vita 
(8 bit)
Protocollo 
(8 bit)
Checksum
(16 bit)
Indirizzo IP sorgente (32 bit)
Indirizzo IP destinazione (32 bit)
Dati

Riconosciamo qui la struttura tipica composta da un header (di dimensioni fisse, in rosa) e da una parte di dati (in giallo). Ecco nel dettaglio il significato dei diversi campi:

Gli indirizzi IP sono fondamentali poiché consentono ai router di sapere dove inviare il pacchetto e, a chi riceve, di sapere a chi deve inviare la risposta. Vedremo meglio nel seguito, parlando di frammentazione e deframmentazione, l'utilità degli altri campi.

Frammentazione e deframmentazione

Un singolo pacchetto IP può contenere interamente una PDU del livello superiore (es. un segmento proveniente da TCP o un datagram UDP) oppure,se questa è troppo grande, IP può suddividere i dati in più pacchetti diversi, detti frammenti. La dimensione massima di un pacchetto è 65536 byte (64 kB). Tuttavia questo valore non è quasi mai raggiunto dato che le reti non hanno una capacità sufficiente per inviare dei pacchetti così grossi. La dimensione massima di un pacchetto trasmissibile sulla rete è detta MTU (Maximum Transfer Unit). La MTU dipende dal tipo di rete e dalle sue caratteristiche tecniche. In una rete Ethernet tale valore è normalmente uguale a 1500 byte.

La figura qui sotto mostra la frammentazione di un pacchetto IP originario con dimensione 1500 byte di dato in pacchetti più piccoli nel passaggio a reti con MTU più basse:

Tutti i frammenti sono caratterizzati dall’avere lo stesso identificatore (il campo Identificazione del pacchetto originale). Tale numero è assegnato univocamente dal trasmettitore (che mantiene un contatore dei pacchetti IP trasmessi), e la coppia IP Provenienza-Identificazione rende univocamente identificabile un certo pacchetto IP e tutti i suoi frammenti.

Dopo la frammentazione, ogni frammento viaggia separatamente dagli altri fino alla destinazione finale. Solo alla fine del viaggio avrà luogo il riassemblaggio dei frammenti, nel tentativo di ricostruire il pacchetto originale. Il ricevitore riconosce il primo frammento dal fatto che il campo Fragment Offset vale zero e riconosce l'ultimo frammento dal flag More Fragments a zero. Inoltre i frammenti appartenenti allo stesso pacchetto vengono identificati dalla coppia IP Provenienza-Identificazione. Il ricevente non conosce la dimensione del pacchetto originale perché ogni frammento mantiene nel campo Total Length solo la lunghezza del frammento stesso, e non quella del pacchetto totale. Solo quando riceverà il frammento con il flag More Fragments settato a zero, esso potrà capire la dimensione totale del pacchetto originale (sommando all’offset dell’ultimo frammento la lunghezza dei dati trasportati nell’ultimo frammento). Se un solo frammento viene perso, è impossibile ricostruire il datagram IP originale. Per evitare di aspettare inutilmente un frammento perso, il ricevitore nel momento in cui riceve un primo frammento inizializza un timer. Se il timer scade prima che tutti i frammenti siano giunti a destinazione il ricevitore butta via tutti i frammenti. 

Occorre anche notare che durante la trasmissione di un pacchetto in Internet, il pacchetto può passare attraverso reti con MTU differenti (per esempio passando da una dorsale di rete in fibra ottica a una rete via cavo). In questi casi (nel passaggio da una sottorete a un'altra) può essere necessario frammentare o deframmentare (ulteriormente) il pacchetto. La frammentazione di un pacchetto viene effettuata dai router, cioè in corrispondenza dei nodi di transizione da una rete a un'altra. Se il pacchetto è troppo grande per passare sulla rete, il router lo divide, cioè lo scompone in frammenti di dimensione minore o uguale rispetto alla MTU della rete di destinazione.

Router e frammentazione pacchetti

Il router re-incapsula e invia questi frammenti in modo indipendente l'uno dall'altro. Inoltre, il router aggiunge delle informazioni affinché il terminale di destinazione possa riassemblare i frammenti nell'ordine giusto. Non vi è però nessuna garanzia che i frammenti arrivino nell'ordine corretto, dato che sono inviati in maniera individuale e indipendente.

Segmenti, pacchetti, frammenti...

A questo punto occorre probabilmente chiarire una possibile fonte di dubbi ed equivoci. Parlando del protocollo TCP abbiamo già detto della necessità in alcuni casi di suddividere i dati provenienti dal livello Applicazione in segmenti di dimensioni inferiori. Ora incontriamo al livello inferiore un procedimento simile (frammentazione) da parte del protocollo IP. Chi è dunque che scompone e riassembla i dati? Il livello TCP o il livello IP? La risposta è: entrambi. In generale il livello di trasporto (TCP) effettua una scomposizione in segmenti, i quali, a loro volta, possono essere ulteriormente suddivisi in pacchetti dal livello IP. In un caso normale ogni segmento corrisponde a un unico pacchetto sul livello inferiore (e a un unico frame al livello Ethernet ancora inferiore), ma questo non toglie che in alcuni casi vi sia una ulteriore scomposizione in porzioni più piccole.

Si consideri anche il fatto che la segmentazione avviene al livello TCP, cioè normalmente viene fatta su un computer, per esempio su un server web al momento dell'invio di un contenuto di dimensioni troppo grandi. Invece la frammentazione è effettuata a livello IP, cioè tipicamente dai router che ricevono e smistano i pacchetti di rete. Si pensi a questo proposito al fatto che il router, per sua stessa natura, si trova sul punto di giunzione fra due reti diverse. Queste due reti potrebbero avere MTU diverse (per esempio una potrebbe usare collegamenti in fibra ottica e l'altra un cavo in rame più lento). Per questa ragione può rendersi necessario, da parte del router, frammentare ulteriormente un pacchetto, per adattarlo alla capacità di trasporto della rete su cui deve essere inviato.

Si noti che sarà il router che riceve i frammenti a doversi occupare di ricomporli (prima eventualmente di frammentarli di nuovo, se li deve inviare su un'altra sotto rete con MTU differente). Siccome il protocollo IP non è affidabile, eventuali pacchetti che non vengano ricomposti (per la perdita di uno o più frammenti) verranno semplicemente scartati. La figura qui sotto mostra la frammentazione di una PDU (da parte del router R1) e il successivo riassemblaggio (da parte del router R2):

frammentazione IP

La figura seguente mostra infine il passaggio dei dati dal livello Applicazione al livello di accesso alla rete e la progressiva suddivisione in frammenti.

 

Video lezione dieci: protocolli e livelli di rete

 

precedente - successiva

Sito realizzato in base al template offerto da
http://www.graphixmania.it