Architetture di rete

Modello ISO/OSI

 

INDICE

1. Introduzione

2. Il modello a strati

3. Sistemi intermedi, Funzione di relay e Reti

4. Il modello OSI nella realtà applicativa

 

1. Introduzione

Le tecniche di interconnessione fra computer furono storicamente messe a punto dai costruttori di sistemi informativi, primo fra tutti IBM. Le soluzioni che ne risultavano erano però delle reti di computer "chiuse", ossia costituite di apparati tutti dello stesso costruttore e incapaci di comunicare con macchine di altra origine.

L’avvento di sistemi informativi "aperti" —tali cioè da poter realizzare comunicazioni reciproche in qualunque combinazione— era da una parte facilitato dall’emergere di ARPAnet e delle reti pubbliche per dati, dall’altra si scontrava con problemi che andavano oltre il semplice trasferimento di bit da un punto a un altro. Si pensi ad esempio ai problemi connessi con l’uso di diversi alfabeti per rappresentare testi; diverse strutture dei file system; diverse procedure di stampa, di login e tanti altri ancora.

Il problema fu affrontato in modo sistematico dall’ISO che, in collaborazione col CCITT (oggi ITU-T), diede avvio alla fine degli anni ’70 al progetto Open System Interconnection (OSI). Il Modello di Riferimento definito da OSI può essere considerato un’architettura che non dice tanto come il sistema è costituito al suo interno, ma come si presenta verso il mondo esterno, ossia verso gli altri sistemi.

Gli standard relativi al modello OSI sono contenuti in un gran numero di documenti ISO, di cui il capostipite è "IS 7498, Information Processing Systems - Open Systems Interconnection - Basic Reference Model". L’equivalente di questo documento è la Raccomandazione ITU-T X.200, mentre tutti gli altri sono contenuti nelle altre Raccomandazioni della serie X.200 (ossia Raccomandazione X.2xy.).

 

2. Il Modello a strati

La caratteristica principale di OSI è di essere un modello a strati. Il concetto di suddividere un insieme di funzioni in blocchi parziali, ognuno svolgente un compito specifico e a cui viene aggiunto un blocco successivo, non è nuovo in campo informatico. Ad esempio un sistema elaborativo potrebbe essere schematizzato in tre livelli come segue: un blocco di base "hardware", a questo aggiungiamo uno strato superiore "Sistema Operativo", sopra questo infine corre un livello "Applicativo".

Anche nel campo delle reti di computer il concetto della stratificazione è acquisito da tempo. Il merito maggiore di OSI è stato quello di definire il numero di strati, le funzioni svolte da ognuno di essi e i loro meccanismi formali di funzionamento.

Nei testi italiani si parla spesso di livello, noi usiamo il termine equivalente strato che riproduce più fedelmente la parola originale inglese layer. Col termine Sistema si intende nel modo più generico un apparato che, eventualmente in congiunzione con un operatore umano, è in grado di scambiare dati con altri sistemi. In pratica quando si parla di sistema possiamo sostituire il termine con Computer.

2.1 Suddivisione di un sistema distribuito in strati

Consideriamo due sistemi (Sistema A e Sistema B, vedi Figura 1), collegati tramite un mezzo fisico, ossia un circuito trasmissivo.

Figura 1 - Suddivisione in strati di una rete di computer.

Le funzioni che i due sistemi devono svolgere per poter comunicare vengono suddivise in una gerarchia di 7 strati. "Affettiamo" quindi l’insieme dei due sistemi con delle suddivisioni orizzontali ottenendo così i vari strati. Ogni strato è costituito da tutti i sottosistemi (un sottosistema è un rettangolino nella figura) che si trovano a un medesimo livello gerarchico. Nel nostro caso uno strato comprende quindi due sottosistemi: uno facente parte di Sistema A, l’altro di Sistema B. Se i sistemi collegati fossero tre o quattro si avrebbero in ogni strato rispettivamente tre o quattro sottosistemi.

Ogni strato è caratterizzato da un livello gerarchico (un numero) e da una sigla.

Lo strato di livello più basso (livello 1, sigla Ph per Physical) è lo strato fisico, esso interagisce direttamente col mezzo trasmissivo e fornisce un servizio allo strato superiore. Questo fatto è del tutto generale: ogni strato fornisce un servizio allo strato superiore, tranne lo strato No 7 (strato applicativo, di livello gerarchico massimo) che svolge direttamente l’applicazione distribuita.

Lo strato di datalink (chiamato anche di linea o di collegamento - livello 2, sigla DL per Data Link) ha la funzione principale di recuperare gli errori trasmissivi; di solito ciò avviene mediante tecniche di ritrasmissione automatica dei dati corrotti.

Lo strato di rete (livello 3, N per Network) serve a instradare il traffico attraverso una rete di comunicazione.

Lo strato di trasporto (livello 4, T per Transport) controlla il traffico fra le due estremità della comunicazione.

Lo strato di sessione (livello 5, S per Session) controlla il dialogo fra le due entità che realizzano l’applicazione distribuita.

Lo strato di presentazione (livello 6, P per Presentation) serve ad unificare la rappresentazione dell’informazione fra i due sistemi.

Lo strato applicativo (livello 7, A per Application) costituisce l’applicazione distribuita vera e propria.

Non si può a questo punto giustificare in maniera soddisfacente l’esistenza di tutti questi strati. Notiamo solo una cosa: lo schema di Figura 1 è molto semplificato (raramente due computer sono collegati direttamente da una linea trasmissiva) e in tale situazione si ha effettivamente una certa ridondanza fra gli strati. D’altra parte il modello deve funzionare anche nei casi di interconnessione più complessi e, come si vedrà, in certe situazioni è addirittura insufficiente.

Comunque la definizione dei sette strati ha avuto origine da un compromesso, dovendosi da una parte non discostare troppo dalle architetture reali, dall’altra non adottarne senza modifiche una esistente per non favorire alcuni costruttori.

2.2 Struttura di uno strato

Il generico strato di livello X è costituito da gruppi funzionali chiamati entità (entity), la Figura 2 illustra questo fatto. In ciascuno dei sistemi si ha una entity per strato (in figura si suppone di avere due sistemi, quindi sono evidenziate due entity). La entity è la parte attiva di un sottosistema, in pratica possiamo identificare entity con sottosistema, per cui ogni rettangolino di Figura 1 rappresenterà una entity. A volte in un sottosistema si possono avere più entity per strato, in questo caso la distinzione sarà evidenziata.

Una entity è caratterizzata dalla sigla del proprio strato, a livello 3 avremo per esempio delle N-entity.

Figura 2 - Modello funzionale di uno strato.

Uno strato (e quindi le sue entity, che dello strato sono le parti attive) fornisce servizio allo strato superiore attraverso un’interfaccia. A questa interfaccia le entity di livello superiore accedono mediante un Service Access Point (SAP). Anche i SAP, come le entity, sono caratterizzati dalla sigla del proprio strato; quindi lo strato 3 fornirà servizio attraverso un N-SAP, lo strato 4 fornirà servizio su un T-SAP e così via. Il dialogo fra due strati avviene, attraverso i SAP, secondo uno scambio di primitive. Ogni entity riceve a sua volta servizio dallo strato inferiore attraverso il SAP di livello inferiore (ad esempio un’entity di livello 4 fornisce servizio su un T-SAP e riceve servizio attraverso un N-SAP).

Quanto detto vale all’interno di un sistema. Per quanto riguarda l’interazione fra sistemi, essa avviene unicamente fra entity di pari livello (dette anche peer entity) secondo certe regole che costituiscono il protocollo di quel livello. Le due X-entity di Figura 2 sono quindi due peer entity. Un protocollo è definito da un insieme di formati secondo i quali i dati devono essere strutturati e di procedure utilizzate per scambiarsi i dati.

Gli enti di standardizzazione definiscono i vari protocolli cui i sistemi devono allinearsi per poter comunicare. La realizzazione delle interfacce è invece lasciata libera ai costruttori, purché esse realizzino funzionalmente le primitive che definiscono il servizio.

In ogni strato è quindi attivo un protocollo. Le specifiche del protocollo di uno strato sono indipendenti da quelle degli altri strati. In altre parole, è possibile sostituire il protocollo di uno strato con un protocollo diverso senza dover cambiare alcunché nei protocolli degli strati adiacenti (naturalmente il servizio offerto allo strato superiore deve rimanere lo stesso).

I protocolli dei quattro livelli inferiori del modello OSI sono legati al tipo di infrastruttura trasmissiva usata e hanno lo scopo di ottenere da essa il tipo di servizio voluto. I protocolli dei tre livelli superiori sono orientati esclusivamente ad aspetti elaborativi e non sono legati a problematiche di telecomunicazione.

2.3 Modelli di funzionamento

Vediamo ora qualche esempio di interazione fra strati, ossia di come un servizio può essere ottenuto mediante scambio di primitive. Supponiamo che il generico strato X fornisca un servizio di tipo "connection-oriented". Ciò significa che il suo utente (lo strato X+1) prima di poter usare il servizio deve richiedere una connessione.

Come sempre nei servizi "connection-oriented" c’è un utente chiamante e un utente chiamato. Si suppone che il chiamante sia il Sistema A. La Figura 3 illustra la sequenza di formazione della connessione.

Figura 3 - Formazione di una connessione.

Per richiedere la connessione l’utente usa la primitiva "CONNECT". Di questa primitiva (che essendo usata per accedere al servizio di livello X si chiamerà X-CONNECT, secondo una convenzione che dovrebbe ormai risultare evidente) esistono quattro tipi, dipendenti dalla fase dell’interazione: "Request", "Indication", "Response", "Confirm". Nell’esempio della figura essi sono usati nella sequenza temporale seguente:

1. L’utente chiamante (X+1-entity di sistema A) emette, attraverso il proprio SAP, una richiesta di connessione (CONNECT request);

2. Il servizio avvisa il chiamato mandandogli un’indicazione (CONNECT indication);

3. Il chiamato (sistema B) accetta la connessione mediante la CONNECT response;

4. Il servizio notifica al chiamante che la sua richiesta è stata accettata mediante la CONNECT confirm.

Uno schema come quello di Figura 3, che discende direttamente dalla rappresentazione di Figura 2, non viene in pratica usato per specificare un servizio. Al suo posto si usa un diagramma di sequenze temporali (Time-sequence diagram), come quello di Figura 4.

Figura 4 - Diagramma temporale della formazione di una connessione.

In questo tipo di diagramma la fascia centrale compresa fra le due rette verticali rappresenta il fornitore di servizio (ossia lo strato di cui si descrivono le funzioni), le zone a sinistra e a destra rappresentano gli utenti del servizio, ossia le entity di livello superiore.

La primitiva CONNECT è una primitiva di segnalazione, serve a gestire la connessione fra gli utenti ma non provoca il trasferimento di informazione. Per il trasferimento di un messaggio si usa la primitiva "DATA"; di questa primitiva esistono solo i tipi "Request" e "Indication".

A titolo di esempio in Figura 5 si sono riportati alcuni diagrammi temporali relativi a un caso reale, ossia quelli della specifica del servizio "connection oriented" di livello 2 (DL - Data Link), presi dallo standard IS 8886 (equivalente alla Raccomandazione X.212). Si noti come questi diagrammi rappresentino solo alcuni dei molti casi possibili nel funzionamento reale.

Una volta che fra due X-SAP è stata stabilita una X-connection, su di essa i due utenti (ossia le due X+1-entity) possono trasferire i propri dati. I dati vengono trasferiti organizzati in blocchi che chiameremo messaggi. Possiamo quindi affermare che:

"il modello OSI sottintende una comunicazione di tipo a pacchetto".

Figura 5 - Diagrammi temporali relativi al servizio "connection oriented" di livello 2.

La natura a pacchetto della comunicazione prevista nel modello OSI risulta evidente anche dalla rappresentazione di Figura 6, dove uno strato generico è modellizzato come un sistema di due code, una per verso. Ogni coda è formata dai messaggi consegnati dagli utenti e in attesa di essere serviti. Chiedere allo strato di trasferire dei dati vuol dire inserire un messaggio nella coda appropriata.

Figura 6 - Modello di uno strato come sistema di code.

Il modello di Figura 6 vale per tutti gli strati, ad eccezione dello strato fisico (livello 1). Esso svolge infatti funzioni puramente trasmissive e non è in grado di gestire code:

"lo strato fisico non funziona secondo un modello a code".

Nello strato fisico quindi, a differenza di tutti gli altri strati, il trasferimento dei dati (la pura trasmissione di bit) avviene in modo trasparente, ossia:

     ·     la velocità di emissione è uguale a quella di ricezione;

     ·     il ritardo di trasferimento è fisso e non dipendente dal traffico.

In definitiva lo strato fisico funziona secondo uno schema di comunicazione a circuito e introduce dei ritardi che sono per lo più ritardi di propagazione; in quanto tali risultano —nel contesto globale della comunicazione fra due sistemi— trascurabili rispetto ai ritardi dovuti agli altri strati.

Gli esempi precedenti erano relativi a un servizio "connection oriented". Uno strato può anche operare in modo "connectionless". In questo caso la sequenza di primitive risulta molto semplificata: per usufruire del servizio non occorre alcuna connessione fra i due SAP. Per il trasferimento di un messaggio si usano le primitive "UNITDATA" (UNITDATA.request e UNITDATA.indication) che possono venire emessa in un istante qualunque attraverso un SAP.

2.4 Formattazione dell’informazione

La Figura 7 mostra il flusso di dati all’interno di un sistema allorché un’entità dello strato generico X soddisfa una richiesta di servizio. Il servizio richiesto consiste nel trasferire all’altro sistema un brano di informazione (cioè un messaggio).

L’entità riceve attraverso il SAP l’informazione da trasferire, che per essa è una Service Data Unit (SDU). Ad esempio una N-entity riceverà una T-SDU. A questa SDU viene aggiunto un insieme di informazioni di controllo che costituiscono la Protocol Control Information (PCI) tipica del protocollo usato. Ad esempio una N-entity che usa il protocollo PLP-X.25 aggiungerà un header secondo le regole dello standard X.25. Il messaggio così costruito costituisce l’unità di scambio del protocollo usato e viene detta Protocol Data Unit (PDU).

Figura 7 - Formattazione dei dati nel modello OSI.

L’entità in esame, una volta formata la PDU, la trasmette alla peer-entity dell’altro sistema. Per effettuare questa trasmissione chiede servizio allo strato inferiore passandole la PDU da trasmettere. Pertanto per lo strato inferiore la PDU diventa una SDU. In generale:

"la PDU di un certo strato è una SDU per lo strato inferiore".

Il servizio fornito allo strato X+1 consiste in una connessione fra due X-SAP. Per richiedere la connessione lo strato X+1 emette una primitiva CONNECT-Request. Dopo che è stata formata la connessione è possibile trasferire dati su di essa. Si dice che lo strato X fornisce un servizio "connection oriented".

In alternativa lo strato X può accettare SDU di tipo datagramma. In tal caso non esiste connessione, non si usano primitive di tipo CONNECT e lo strato X fornisce un servizio "connectionless".

Globalmente, partendo dal livello massimo (strato Applicativo), il trasferimento in uscita (ossia l’emissione) di un messaggio consiste nella:

1. formazione della PDU;

2. consegna allo strato inferiore della PDU, che viene ricevuta come una SDU;

3. incapsulamento nel formato specifico del protocollo e formazione di una nuova PDU;

4. ripresa dal punto 2., se lo strato è superiore allo strato fisico.

Arrivati allo strato fisico, la PDU viene trasmessa come sequenza di bit sul mezzo trasmissivo. Ricevuta dall’altro sistema subisce tutti i passaggi inversi fino a che il messaggio iniziale è ricevuto dall’applicazione remota. La Figura 8 mostra lo schema generale di incapsulamento.

Figura 8 - Incapsulamento dei dati nei vari strati.

Nell’incapsulamento si fa precedere un header ai dati, meno che nello strato 2 in cui ai dati si fa anche seguire un coda (trailer). Le PDU di alcuni strati hanno dei nomi specifici, entrati nell’uso comune. In particolare la PDU di livello 2 viene chiamate frame, quella di livello 3 pacchetto.

 

3. Sistemi Intermedi, Funzione di relay e Reti

3.1 Reti di computer e (sotto)reti di comunicazione

Finora abbiamo supposto che i due sistemi fossero collegati direttamente. Questo avviene di rado. In genere due sistemi sono collegati per il tramite di altri sistemi intermedi. Un sistema intermedio è l’equivalente di una centrale telefonica, che non produce conversazioni né le riceve, ma le smista ai telefoni appropriati.

Anche i sistemi intermedi devono essere strutturati secondo il modello OSI. Essi però hanno la funzione di far transitare il traffico, non di elaborare i dati, pertanto non devono realizzare le funzioni tipiche di tutti gli strati ma solo quelle dei livelli più bassi. Un sistema che realizza tutti i sette strati del modello si chiama End System (ES), un sistema che non arriva al livello applicativo è un Intermediate System (IS).

Chiameremo rete di computer il complesso formato dagli End System e da tutto ciò che li collega. All’interno di questa struttura, chiameremo sottorete di comunicazione (o semplicemente rete) l’insieme degli Intermediate System e dei circuiti che li collegano.

In Figura 9 si hanno due ES collegati tramite un IS che svolge le funzioni di livello 1-2-3. All’interno di esso i dati ricevuti sono consegnati via via agli strati superiori, fino ad arrivare al terzo, qui invece di essere consegnati a una entity di livello 4 sono consegnati a una entity che li rinvia a un’altra entity di livello 3 che stavolta agisce in emissione passando i dati a livello 2 e così via fino a effettuare la consegna al secondo ES. Questa operazione di rinvio in inglese è detta relay e l’entity che la effettua relay entity.

Un ES è descritto esternamente da una pila di protocolli, un IS da due pile di protocolli collegate fra loro dalla relay entity. Le due pile di destra e sinistra non sono necessariamente uguali. Quindi si potrebbe avere a livello 3 ad esempio un certo protocollo ES-IS nel tratto di sinistra e un protocollo diverso IS-ES nel tratto di destra, lo stesso vale per i livelli 1 e 2. Ai livelli 4, 5, 6 e 7 i due ES comunicano direttamente fra loro e quindi si devono usare gli stessi protocolli.

Figura 9 - Sistemi intermedi e funzioni di relay.

Il sistema IS ora visto (ossia che realizza i primi tre protocolli) è quello specificato da OSI per collegare nel modo più generale possibile due ES. Infatti a livello 3 (livello Rete) sono rese disponibili le funzioni di instradamento, pertanto occorre che nei sistemi intermedi ci siano tali funzioni in modo da smistare il traffico correttamente. Un sistema intermedio di livello 3 è detto anche un "OSI Relay System" o "OSI Intermediate System".

3.2 Esempio: Rappresentazione di una Rete X.25

Figura 10 - Rappresentazione OSI di una rete X.25.

In Figura 10 una rete pubblica a pacchetto (Rete X.25) è rappresentata da una concatenazione di nodi a pacchetto. Essa è vista dai due DTE utenti come un unico Intermediate System OSI. I DTE sono degli ES.

La Raccomandazione X.25 specifica ciò che accade fra DTE e DCE. Dato che la comunicazione ha luogo solo se il DTE rispetta le regole, l’interfaccia specifica anche i protocolli superiori al fisico che sono interpretati dalla rete. Si dice che la rete termina i protocolli di livello 1,2,3.

I protocolli dei livelli 4-7 sono invece terminati dall’altro DTE. In definitiva l’interfaccia equivale a una pila di protocolli, tanti quanti sono terminati dalla rete. Chiameremo interfaccia di telecomunicazione questa interfaccia, da non confondersi con l’interfaccia OSI vista prima che è interna a un sistema e il cui funzionamento è descritto da un insieme di primitive.

A livello 1 l’interfaccia X.25 lascia varie opzioni, essenzialmente interfaccia fisica EIA/TIA-232 (ex RS-232) oppure X.21.

A livello 2 si usa un protocollo della famiglia HDLC definito da ISO, con la procedura LAPB (Link Access Procedure Balanced), in pratica con LAPB si indica l’intero protocollo.

A livello 3 si usa un protocollo specifico, chiamato PLP (Packet Layer Protocol) che costituisce la parte più significativa dell’interfaccia dato che è qui che vengono usati i vari pacchetti di segnalazione (CALL REQUEST, ecc.) e di trasferimento dati tipici della rete X.25.

All’interno della rete vengono usati protocolli di marca che non sono oggetto di normalizzazione. Spesso (ma non necessariamente) le reti commerciali utilizzano al loro interno protocolli del tipo a circuito virtuale, simili all’X.25.

 

4. Il modello OSI nella realtà applicativa

4.1 Architetture di marca

Le reti di computer IBM sono basate su un’architettura chiamata System Network Architecture (SNA) che usa un modello di riferimento a 6 strati, molto simile all’OSI. In particolare a livello 2 le reti SNA adottano un protocollo chiamato SDLC che costituisce un sottoinsieme di HDLC, protocollo di elezione dei sistemi geografici OSI. HDLC è considerato a sua volta una derivazione di SDLC (nel senso che SDLC è più antico anche se più limitato).

Le reti Digital adottano anch’esse un’architettura a strati, simile a OSI. In particolare la versione più recente, chiamata DECnet Phase V (fase 5) prevedeva di utilizzare la stratificazione OSI tale e quale, nonché i relativi protocolli specificati da ISO. Molte reti esistenti risultano tuttavia basate sulla precedente versione DECnet Phase IV, che usa stratificazione e protocolli di marca.

4.2 Le LAN

La peculiarità architetturale delle reti locali (LAN), basate su mezzi trasmissivi condivisi e con controllo d’accesso distribuito, ha stimolato la definizione di un layer specifico, chiamato MAC (Medium Access Control) che svolge appunto le funzioni di gestione delle contese. Questo strato è considerato un sottostrato dello strato OSI 2 (collegamento), che pertanto nelle LAN è articolato in due strati sovrapposti, di cui il MAC costituisce il livello inferiore. Questa architettura, definita da IEEE, è stata adottata come standard ISO.

Per maggiori informazioni si rimanda alla letteratura sulle LAN.

4.3 ISDN e B-ISDN

La rete ISDN (Integrated Services Digital Network), derivata dalla rete telefonica, è basata sulla commutazione di circuito. Questo fatto pone un problema all’utilizzo del modello OSI. OSI infatti prevede, almeno in linea di principio, che un relay system di livello 1 (quale è un nodo a commutazione di circuito) possa essere controllato dalla segnalazione contenuta nel protocollo di livello 3. In pratica però suppone che a livello 3 (come del resto a tutti gli altri livelli) esista un unico protocollo che serve sia per la segnalazione che per il trasferimento di dati. Un relay system che termini questo protocollo necessariamente gestisce il flusso di dati dell’utente, che viene così trattato a pacchetto e non a circuito.

Per superare questo impasse gli specificatori di ISDN (ossia il CCITT) hanno previsto di disaccoppiare il flusso dei dati d’utente da quello di segnalazione. Ognuno dei due è quindi trattato in modo differente e secondo una pila di protocolli sua specifica. Come risultato un sistema (End System o Intermediate System) interagisce con un suo corrispondente utilizzando due pile di protocolli invece che una sola.

Questo concetto della doppia pila di protocolli è stato ripreso dalla rete Broadband ISDN (BISDN), destinata al traffico multimediale. In questo caso però, a causa della specifica tecnica di commutazione adottata chiamata Asynchronous Transfer Mode (ATM) si è resa necessaria l’introduzione di uno strato specifico, intermedio fra il fisico e il collegamento, chiamato appunto ATM layer.

Per una descrizione più esauriente si rimanda alla letteratura specifica.

4.4 Internet

Internet si sovrappone a reti di comunicazione preesistenti —ognuna delle quali può essere quindi strutturata secondo suoi propri protocolli— aggiungendo uno strato di internetworking caratterizzato dal protocollo IP. Questo strato, che a rigore è l’unica vera caratteristica di Internet, svolge funzioni dello strato 3 (Rete) OSI.

Al di sopra dello strato IP tipicamente (ma non necessariamente) Internet sovrappone uno strato di trasporto caratterizzato dal protocollo TCP. TCP non è un protocollo definito da ISO, ma svolge funzioni molto simili al protocollo di trasporto ISO TP classe 4.

Sopra TCP a rigore potrebbe esserci qualsiasi cosa. In realtà gli applicativi presenti in Internet, la cui diffusione ha assunto un’importanza straordinaria, prevedono di solito un unico strato che si appoggia direttamente sullo strato trasporto. Quest’unico strato compendia quindi le funzioni degli strati 4-7 di OSI.

In conclusione il modello architetturale di Internet può essere così riassunto:

1. Una rete di base generica (a sua volta stratificata in modo suo proprio);

2. Il (sotto)strato IP di internetworking (livello 3);

3. Uno strato di livello OSI 4 (protocollo TCP);

4. Uno strato applicativo.

Per maggiori chiarimenti si veda la (sterminata) letteratura su Internet.

 

Ritorna alla Home