INTRODUZIONE E PILA OSI
Prima di tutto è necessario premettere che una comunicazione può essere fondamentalmente di due tipi, isocrona o anisocrona. Le comunicazioni isocrone richiedono al servizio portante un trasferimento di informazioni attraverso la rete con ritardo di attraversamento costante, mentre le comunicazioni anisocrone tollerano una certa variabilità nei ritardi di attraversamento della rete. Per far capire la differenza possiamo immaginare una telefonata per il primo caso in cui tutte le sillabe e le parole pronunciate vengono trasferite con un ritardo costante e preservandone la sequenza. Se la sequenza non fosse rispettata avremmo una telefonata dislessica, assurdo. Se il ritardo di trasmissione non fosse costante, avremmo l'effetto moviola sulla chiamata o comunque una distorsione del suono che renderebbe la comunicazione inaccettabile.
Un esempio per il secondo caso potrebbe essere costituito da un secchio in cui converge l'acqua che viene versata da un bicchiere attraverso uno scolapasta. Nel secchio ritroviamo esattamente la stessa acqua che abbiamo versato, ma le singole gocce hanno fatto percorsi diversi l'una dalle altre e soprattuto imprevedibili fuoriuscendo da buchetti diversi salvo poi ritrovarsi tutte insieme nel secchio.
Internet è un sistema anisocrono, ovvero è un colapasta.
Come spesso accade nel mondo dell'informatica, la soluzione ai problemi più complessi, come quello della comunicazione in rete, viene ottenuta suddividendo il problema nel suo complesso in sotto-problemi, cercando la soluzione a questi problemi più piccoli e rimettendo insieme i pezzi per ottenere la soluzione del problema iniziale. Qualche volta accade che anche i sotto-problemi siano talmente complessi da aver bisogno di ulteriori suddivisioni ed è quindi possibile iterare il procedimento tante volte quante ne siano necessarie per riuscire ad arrivare a sotto-sotto-problemi la cui soluzione non richiede particolari sforzi.
Il complesso problema della comunicazione in rete è stato inizialmente suddiviso in sette sotto-problemi che costituiscono i "livelli della pila OSI" che rappresenta tutt'oggi lo standard di riferimento per la gestione dei problemi di comunicazione. Devo solo aggiungere che effettivamente si tratta di "modello" e che nella realtà pur essendoci una corrispondenza nella struttura, ci sono accorpamenti di livelli ed alcune piccole varianti ma non tali da rendere il modello inapplicabile.
[ Guests cannot view attachments ]
Nella realtà si utilizza una variante che apporta alcune semplificazioni sulla parte dal quinto livello in su ed esegue ulteriori suddivisioni ai livelli 2 e 3 che risultano i livelli più critici.
Nella figura che ho proposto si ipotizza il trasferimento di dati tra due PC (lato sinistro-lato destro), mentre la parte centrale rappresenta la zona definita come SUBNET, ma che con un po' di fantasia e con le dovute precisazioni può rappresentare abbastanza bene la struttura degli apparati che costituiscono l'infrastruttura su cui transita il traffico (HUB, SWITCH e ROUTER rispettivamente per i livelli 1, 2 e 3 della pila OSI).
Per far capire meglio il procedimento, possiamo immaginare il seguente esempio che è molto vicino alla realtà: un utente1 digita la parola "Ciao" sul pc1 che dovrà essere visualizzata sul pc2 all'utente2. Utente1 ed utente2 si trovano sopra il livello 7 dei rispettivi pc1 e pc2, mentre il livello 1 è rappresentato dal cavetto telefonico che ci porta l'ADSL a casa. La parola "Ciao", per poter essere trasferita deve subire dei trattamenti ed adattamenti (eseguiti completamente dal computer che si sta utilizzando e che implementa la pila OSI a livello di sistema operativo) che la devono rendere trasmissibile senza errori dall'altra parte e quindi discende la pila osi del lato 1 passando dal livello 7 al 6, quindi al 5 e così via al livello 1 in cui la parola "Ciao" è completamente codificata in segnali elettrici oppure ottici che ne permettono la trasmissione dall'altro lato del pianeta in cui la stessa parola viene via via ricomposta durante la risalita della pila di PC2, dal livello 1 al 2, quindi al 3 e così via fino al 7 ed all'utente2 che può così leggere il messaggio originario senza errori di trasmissione.
In altri termini, ciascun livello (layer) è in grado di prendere i dati che gli vengono dati dal livello che precede, senza entrare nel merito dei contenuti, trattarli e fornire gli stessi dati trattati al livello successivo.
Questo vale dall'alto verso il basso incapsulando ciò che arriva da sopra in una scatoletta a cui vengono aggiunte informazioni di controllo e trasferendo il tutto al livello sottostante che farà la stessa cosa ed arrivando al livello più basso (il numero 1) con un sistema del tipo "a scatole cinesi" in cui il contenuto informativo è nella scatoletta più interna e più piccola.
Al contrario, sulla destinazione, ovvero dal basso verso l'alto, il sistema prevede l'apertura delle scatole cinesi dalla più grande alla più piccola. Ogni scatola viene aperta e controllata dal livello corrispondente a quello che l'ha preparata portando la più piccola al livello più alto che rappresenta la visualizzazione all'utente destinatario.
Una analogia semplificata potrebbe essere quella della lettera e del postino. L'utente A scrive una lettera per B e la inserisce in una busta, la busta arriva all'ufficio postale in un sacco, l'ufficio postale la manda all'ufficio postale del destinatario in un furgone/camion/aereo (non lo so, ma agli utenti A e B, la cosa non interessa minimamente saperlo), poi viene presa dal postino che la consegna a B. In nessuno dei passaggi intermedi, è possibile e utile sapere cosa avviene negli altri passaggi e nessuno conosce il contenuto della lettera. Ovvero la gestione dei singoli passaggi prescinde completamente sia dal contenuto dei dati trasmessi sia dal metodo che gli altri passaggi usano per la loro gestione.
Fin qui non riesco a cogliere alcun elemento di particolare difficoltà ed infatti il bello viene dopo, sull'analisi dei singoli livelli, ma su cui cercherò di essere estremamente sintetico e per i quali è possibile trovare agevolmente molta documentazione di approfondimento (tra cui anche il materiale dei miei stessi corsi, completamente autoprodotto per i miei clienti e che oramai a distanza di più di dieci anni è diventato di pubblico dominio)
Per semplicità, e con sufficiente approssimazione, possiamo dire che i livelli 7, 6 e 5 sono solitamente accorpati e gestiti dall'applicativo, ad esempio il browser, e da una parte di sistema operativo che si occupano della presentazione dei dati e della gestione della sessione (continuità del lavoro). Nella figura seguente propongo un raffronto tra il modello teorico e quello reale.
[ Guests cannot view attachments ]
TRANSPORT Layer
Al livello 4 della pila OSI (livello di trasporto, "Transport Layer") viene gestita la parte relativa al primo spezzettamento dei dati e alla ricostruzione della giusta sequenza, riscontrata o meno. Tutti dati che vengono trasmessi subiscono uno spezzettamento in pacchetti di dimensioni molto contenute e più facili da gestire rispetto ai files completi. Immaginiamo di dover trasferire un video, sarebbe assurdo pensare di poterlo trasferire in un unico blocco e quindi viene spezzettato in tanti pezzetti di file, tutti numerati in sequenza, tutti corredati o meno di codici di controllo in grado di evidenziare errori di trasmissione e generare una eventuale ritrasmissione per la correzione dell'errore. Tutta questa gestione di spezzettamenti in fase di trasmissione o ricostruzione della sequenza in fase di ricezione, viene gestita da due protocolli diversi, il TCP (Transfer Control Protocol) per le trasmissioni con correzione di errori e l' UDP (User Datagram Protocol) per le trasmissioni senza correzione di errori. Se abbiamo la trasmissione di un file si usa il TCP, se stiamo vedendo un film in streaming si preferisce l' UDP che non avendo codici aggiuntivi per la gestione del riscontro (rilevamento degli errori) risulta un pò più leggero e quindi più veloce, ma con errori più o meno trascurabili che non si sarà in grado di correggere, ma che su un video non saranno nemmeno percettibili, al massimo si vedrà qualche quadratone colorato sul video o qualche scalettatura. Noi utenti non dobbiamo preoccuparci di nulla, tutto questo viene gestito da chi si occupa del livello di trasporto, ovvero dei cuginetti TCP/UDP.
NETWORK Layer
Il livello 3 (livello di instradamento, "Network Layer") si occupa della gestione degli indirizzi e quindi dell'instradamento da un mittente ad un destinatario. Insieme al livello 2 ("Data Link Layer"), si tratta dei livelli più insidiosi dell'intera pila ovvero quelli in cui va ricercata la causa della quasi totalità dei problemi di comunicazione nelle reti locali di computer.
Nel caso di una trasmissione, viene preso il pacchetto contenente i dati dal livello TCP precedente, gli vengono aggiunti l'indirizzo del mittente, quello del destinatario e qualche codice di controllo e tutto impacchettato viene passato al livello sottostante. Nel caso di ricezione, si prende il pacchetto dal livello sottostante, si leggono gli indirizzi mittente e destinatario si fanno le dovute verifiche e si passano i dati al livello TCP soprastante.
La gestione del "Network Layer" viene effettuata utilizzando il protocollo IP (Internet Protocol) che prevede che tutti i computer, client o server, abbiano uno o più indirizzi IP che li identificano univocamente in tutto il mondo.
Gli indirizzi IP sono dei numeri a 32 bit (e stiamo parlando dell IPv4) che per semplicità vengono rappresentati suddividendoli in 4 gruppi di 8 bit che possono essere più o meno agevolmente rappresentati da quattro numeri compresi tra 0 e 255 e separati da tre puntini, ad es 192.168.0.1
I 32 bit sono suddivisi, per definizione, in due parti, parte net e parte host anche se quest'ultima è ulteriormente suddivisa in ulteriori due parti, subnet ed host. Per la verità, sempre in questo livello troviamo un protocollo usato per la diagnostica chiamato ICMP, in grado, per esempio, di gestire tra le altre cose il traffico generato dal comando PING.
[ Guests cannot view attachments ]
La parte net serve ad identificare le reti sul pianeta, la parte host serviva inizialmente ad identificare i computer (host) mentre con l'ultima ulteriore suddivisione vengono identificate le subnet (sottoreti) e gli host (computer). Il motivo per la ulteriore apparente complicazione delle sottoreti è che in questa maniera l'ICANN può identificare le reti (rete di telecom, rete di microsoft, rete di vattelappesca etc etc) ed assegnargli un pool di indirizzi, mentre rimane a cura del cliente la gestione della rimanente parte dei 32 bit per gestirsi le sue sotto-reti locali ed i computer che ne fanno parte (ad es. l'azienda pincopallino potrebbe avere una rete assegnata e decidere di operare una ulteriore suddivisione di indirizzi per darne una parte alla sede a roma ed un'altra a quella in groenlandia).
Chi si preoccupa di assegnare questi indirizzi con la garanzia che siano univoci? Nessuno di noi se ne deve preoccupare. Esiste un organismo centrale (ICANN) che assegna gli indirizzi a chi li richiede (e li paga), ovvero alle grandi aziende, ma di solito ai gestori di telecomunicazioni etc etc, i quali possono gestirseli autonomamente ed eventualmente utilizzarli per i propri clienti. Ciascuna di queste aziende utilizza l'insieme di indirizzi assegnatogli per riassegnarli ai propri clienti con due modalità , statica o dinamica.
Gli indirizzi statici vengono semplicemente assegnati dagli ISP (telecom, infostrada, fastweb ed altri) ai clienti finali, ed il caso tipico è quello delle HDSL o ADSL di tipo business, ed impostati una tantum direttamente in fase di installazione del modem/router.
Gli indirizzi dinamici, invece, vengono assegnati dinamicamente al momento dell'avvio della comunicazione da un apposito server chiamato DHCP (Dynamic Host Configuration Protocol) che si preoccupa di tenere da un lato gli elenchi degli indirizzi disponibili, assegnatigli dall'ICANN, e dall'altro quelli correntemente assegnati ai clienti. A partire da questi due insiemi di indirizzi, liberi/occupati, viene fornito un indirizzo libero a chiunque ne faccia richiesta affinchè possa essere utilizzato per tutta a connessione e viene ritirato alla disconnessione del cliente. Il caso tipico è quello delle connessioni ADSL di tipo HOME oppure mediante le famose chiavette. Si chiede di avviare la connessione e si ottiene l'IP che viene rilasciato al momento della disconnessione. La peculiarità di questo metodo è che eseguendo connessioni successive, gli indirizzi sono sempre diversi o raramente e casualmente uguali ed è il sistema utilizzato per eludere le attese durante gli scaricamenti multipli dai vari megaupload, fileserver, rapidshare etc etc.
Tutti gli indirizzi IP esistenti con il protocollo IPv4 (Internet Protocol version 4, ma già si parla dell'IPv6 che raddoppia il numero di bit) sono 2^32 e sono suddivisi in classi: A, B, C, D ed E, ma noi usiamo solo le prime tre, a seconda del numero di bit utilizzati per comporre le due parti in cui è sempre diviso un indirizzo. Parte NET e parte HOST (oppure subnet+host).
[ Guests cannot view attachments ]
Quì il discorso si complica un pochino e quindi cercherò di fornire informazioni sommarie ma senza far perdere il senso della discussione.
Esistono alcuni pool di indirizzi non utilizzabili per le reti su internet, ma destinati alle sole reti locali e sono:
192.168.x.y
172.16.x.y
10.x.y.x
Le reti locali sono quelle reti private costituite da un certo numero di computer che si collegano ad internet mediante un modem/router ai quali vengono assegnati due indirizzi, uno esterno assegnato dall'ISP ed uno interno assegnato dall'amministratore di rete locale e che prende il nome di GATEWAY della rete.
Infine c'è la classe 127.x.y.z che è riservata per gli indirizzi localhost, ovvero quelli di loopback, in altri termini quelli che si riferiscono al pc stesso. Ogni computer ha il suo indirizzo localhost che di solito è 127.0.0.1 anche se in realtà l'intera classe 127.0.0.0/8 è destinata al loopback.
Data Link Layer
E' importante premettere che tutte le informazioni inserite da questo livello in giù, non possono passare attraverso i router in quanto utilizzate solo per la gestione edel traffico a basso livello.
In questo livello viene gestito, tramite i protocolli ARP/RARP, l'instradamento del traffico in base agli indirizzi hardware (MAC Address, Media Access Control Address) che possiamo pensare come l'identificativo seriale della scheda di comunicazione (scheda di rete) ed in effetti non esistono due schede di rete al mondo con due mac address identici. Il MAC Address è costituito da 6 numeri di cui i primi 3 identificano il produttore della scheda ed i restanti 3 sono paragonabili ad un seriale della scheda. Come dicevo, i livelli 2 e 3 sono i più critici in quanto destinati all'instradamento di tutto il traffico.
Per il momento, direi di chiudere il discorso.