Articoli

Mini introduzione alle reti interconnesse: Internet Protocol (Seconda Parte)

10/08/2011

di Stefano Sacchini, Branch and product manager Dime Sicurezza

L'IP ti manda in TILT? Switch, Ethernet, gateway sono parole che ti fanno venire l'orticaria? Per te abbiamo inaugurato la rubrica IP for dummies, in ossequio alla fortunata catena di volumi tecnici per lettori di qualsiasi grado ed istruzione. Partendo dai fondamentali (anche i più banali e scontati) arriverai col tempo a costruire un vero "manuale TCP/IP per autostoppisti"...dove finisce un allarmista e dove inizia un informatico. Nel precedente articolo abbiamo imparato che il protocollo IP opera sul layer due (connectionless pocket delivery service), che è unreilable - cioè inaffidabile - e che svolge un servizio definito Best effort delivery. Con tali premesse vediamo com'è fatto e come funziona.

Un dato trasmesso via IP si dice tecnicamente incapsulato e switchato in rete. Significa che un flusso dati tra due hosts non è di tipo continuo, come l'acqua che esce da un rubinetto. In internet i dati vengono frammentati e "pacchettizzati". Il concetto della frammentazione è fondamentale per la trasmissione dati perché permette, in caso di deterioramento, di individuare solo il frammento danneggiato di un file e di rigenerarlo; quindi se scarichiamo un MP3 dalla rete e questo si deteriora nel trasporto, TCP si occupa di sostituire solo la parte danneggiata di esso. L'unità fisica in cui i dati sono incapsulati si chiama FRAME e l'unità di misura dei dati è il BYTE (ottetto di bit). Il numero massimo di ottetti che riesco a mettere in un Frame è definito Max Transfert Unit (MTU) e sostanzialmente indica la dimensione massima dei pacchetti gestiti da una rete. Chiaramente ogni rete interconnessa ha una propria MTU. D'altra parte il primo scopo di Internet è di svincolarsi dalle caratteristiche fisiche delle singole reti. Generalmente ETHERNET gestisce frame da 1500 ottetti, ma come detto questa non è una regola fissa, e ogni gateway potrà ridimensionare i pacchetti secondo le proprie specifiche. Se guardiamo un pacchetto di dati, da un punto di vista logico, cioè al livello di rete, esso viene definito Datagram. Quando un datagram, composto da 1500 ottetti, transita in una rete con MTU inferiore a 1500, accade che il router lo frammenti in pacchetti di dimensioni uguali alla sua MTU. Così se un datagram di 1500 ottetti passa in una rete con MTU 500, il router lo divide il pacchetti (fragment) da 500 ottetti e ad ognuno di essi aggiunge informazioni per il loro percorso. Tali informazioni sono essenziali per la ricomposizione del dato, perché non è detto che tutti i pacchetti compiano lo stesso tragitto e neanche che arrivino nello stesso ordine. Nella maggior parte dei casi il datagram viene frammentato anche diverse volte e solo presso l'host destinatario sarà riassemblato nel datagram originario. Vediamo come.

Frammentazione

Il fragment contiene un header (intestazione) in cui ci sono informazioni preziose per il pacchetto IP. Infatti, l'header è composto dall'indirizzo del mittente e da quello del destinatario, dalla versione del protocollo IP, dal TTL e dal CHECKSUM. Vediamoli nel dettaglio... e in ordine di arrivo.

  • Versione del protocollo: è vitale per chi riceve i dati sapere con quale criterio sono incapsulati.
  • Lunghezza dell'header: è utilizzata dagli algoritmi che interpretano il Datagram.
  • Priorità del pacchetto: indica un grado d'importanza che si attribuisce a un dato. Non sempre il programma di ricezione è in grado di interpretare questo valore, per cui lo possiamo considerare una sorta di raccomandazione che l'host mittente invia al suo destinatario.
  • Checksum: sono informazioni essenziali che il programma di ricezione deve avere per ricomporre i frammenti in un datagram.
  • TTL (time to live): si tratta di un valore che determina l'autocancellazione del frammento in caso di problemi. Torneremo a parlarne dopo.
  • Indirizzi: identificano il destinatario e il mittente. Inoltre l'indirizzo IP, associato alla sua maschera di sottorete, porta in sé non solo l'id dell'host, ma anche quello della rete di appartenenza.

Chiariti quali sono gli elementi del fragment, è necessario vedere come possiamo stabilire la grandezza ottimale dei nostri pacchetti. Una rete con MTU elevata mi porterebbe ad avere poca frammentazione dei datagram e un numero minore di frammenti. Ma, d'altro canto, un frammento danneggiato mi costringerebbe alla ritrasmissione di una maggiore quantità di dati appesantendo il carico della rete. La soluzione è che la dimensione dei fragment è scelta indipendentemente dalle caratteristiche fisiche della singola rete (MTU) e ad ogni passaggio essi verranno riframmentati. Solo una volta giunti a destinazione, i frammenti saranno ricomposti nel datagram originario. Permettete una piccola digressione: l'host che invia o riceve i dati non è un computer o un utente. Se ricordiamo la struttura ISO/OSI sappiamo che IP è usato da TCP, che a sua volta è utilizzato dai protocolli applicativi, e questi a loro volta sono usati dai programmi. Sono questi, ai fini della rete i veri utenti del protocollo IP. Durante la ricezione dei pacchetti (downlod), l'host destinatario fa partire un tempo di "time out" entro il quale deve ricevere l'intero datagram. Se allo scadere del tempo tutti i pacchetti non sono arrivati, l'host considera perso il datagram e ne richiederà il reinvio. Il concetto di tempo di vita di un pacchetto IP è di fondamentale importanza. Potrebbe accadere che per degli errori nelle tabelle di routing (sono le indicazioni stradali dei pacchetti) un fragment rimanga intrappolato in rete senza mai giungere al destinatario. Per questo, nell'header del pacchetto IP è presente un dato definito TTL (Time To Live). Questo può avere un valore da 1 a 255. Durante il suo tragitto, a ogni passaggio in una rete (cioè ogni volta che il pacchetto transita in un gateway) il router decrementa questo valore di 1; quando il TTL arriva a 0, il router cancella il pacchetto.

ICMP (Internet Control Message Protocol)

Vista l'inaffidabilità del protocollo IP, si pensò di affiancarlo ad un protocollo di diagnosi che informasse sui malfunzionamenti della rete. Il protocollo si chiama ICMP (Internet Control Message Protocol) ed opera sul layer tre, affianco all'IP stesso, anzi in un certo senso possiamo affermare che "l'utente di ICMP è IP". Significa che difficilmente i protocolli di livello superiore utilizzano i report ICMP. Nella stragrande maggioranza delle volte, ICMP informa solo l'IP mittente e non i gateway intermedi. Bisogna considerare che tale protocollo viaggia incapsulato come un normale pacchetto, e come tale è soggetto alle stesse limitazioni. Esistono vari programmi che utilizzano ICMP a scopo diagnostico: forse il più comune è il PING. Ogni volta che "pinghiamo " un indirizzo, inviamo pacchetti ICMP di tipo ECHO REQUEST al destinatario, e questo rinvia un ECHO REPLY che ci informa se l'IP che cerchiamo è raggiungibile.

Alla ricerca del destinatario

A questo punto della nostra trattazione, una domanda sorge spontanea: come può un pacchetto IP trovare il suo destinatario? Per rispondere a questa domanda, dobbiamo prendere in considerazione due casi: nel primo i due host si trovano nella medesima rete e non esiste nessun gateway che li separi. Nel secondo caso essi appartengono a due reti diverse, magari separate da decine di gateway. Quando i nostri interlocutori sono collegati direttamente, magari mediante uno switch, IP instrada il pacchetto in maniera diretta (direct routing). Per fare questo utilizza un protocollo di livello inferiore definito ARP (Address Resolution Protocol). Il suo scopo è quello di diffondere un database in cui gli indirizzi fisici degli host, ovvero i MAC address, vengono associati a degli indirizzi logici, ovvero gli indirizzi IP. Il problema è un po' più complesso quando ci troviamo a operare su reti diverse. Per prima cosa IP deve sapere che il suo destinatario non appartiene al suo segmento di rete. Questa operazione viene fatta con l'ausilio delle maschera di sottorete ed attuando un'operazione di "ending". In questo caso il mittente spedisce il datagram e l'indirizzo del destinatario al suo gateway predefinito. Quest'ultimo lo passa al livello inferiore che provvede a inviarlo. Nella maggior parte delle volte, un router non inoltra direttamente i pacchetti, ma si limita a smistarli verso altri routers (indirect ruoting). Per far questo si avvale delle tabelle di istradamento. Tali tabelle non contengono gli indirizzi IP di tutti gli host destinatari, perché sarebbe fisicamente impossibile, ma solo gli indirizzi delle altre reti. Così il pacchetto IP passa di rete in rete, da quella di classe A fino a quella di classe C. Solo in quest'ultima verrà consegnata secondo le regole del Direct routing.

Il compito del protocollo IP termina qui e protocolli di livello superiore si occuperanno di verificare l'integrità dei dati ricevuti. Il TCP è quello che principalmente adempie questa funzione.


Tag:   IP,   internet,  

pagina precedente