Modellazione del protocollo IDM attraverso il simulatore Omnet++

Transcript

Modellazione del protocollo IDM attraverso il simulatore Omnet++
Università degli Studi di Bari Aldo Moro
FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI
Corso di Laurea in Informatica e tecnologie per la produzione del
software
Modellazione del protocollo IDM
attraverso il simulatore
Omnet++
Tesi di Laurea in Reti di calcolatori
Relatore:
Prof.
Nicola Di Mauro
Laureando:
Francesco Sportelli
Sessione
Anno Accademico 2009-2010
Indice
1 Introduzione
1.1 Panoramica sulla storia delle reti di calcolatori . . . .
1.2 Definizione del problema affrontato . . . . . . . . . .
1.3 Altri approcci usati in letteratura . . . . . . . . . . .
1.4 La soluzione: IDM come protocollo multilivello object
1.5 Un possibile scenario d’uso . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
oriented
. . . . .
2 Concetti generali
2.1 Rete di calcolatori . . . . . .
2.2 Nodo di rete . . . . . . . . .
2.3 Protocollo di rete . . . . . .
2.4 Inter-rete . . . . . . . . . .
2.5 Paradigma Object-Oriented
2.6 Routing . . . . . . . . . . .
2.7 Tos e Qos . . . . . . . . . .
2.8 Pacchetto . . . . . . . . . .
2.9 Latenza . . . . . . . . . . .
2.10 Throughput . . . . . . . . .
2.11 Rete di sensori . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 IDM per l’integrazione di reti eterogenee
3.1 Il protocollo IDM . . . . . . . . . . . . . . . .
3.1.1 Introduzione al protocollo IDM . . . .
3.1.2 Inter-Reti . . . . . . . . . . . . . . . .
3.1.3 Routing omogeneo . . . . . . . . . . .
3.2 Instradamento . . . . . . . . . . . . . . . . . .
3.2.1 Identità dell’oggetto . . . . . . . . . .
3.2.2 Un esempio di instradamento . . . . .
3.3 Endpoints . . . . . . . . . . . . . . . . . . . .
3.4 Le politiche del TOS e QOS . . . . . . . . . .
3.4.1 Quality of service . . . . . . . . . . . .
3.4.2 Type of service . . . . . . . . . . . . .
3.4.3 Class queueing discipline . . . . . . .
3.4.4 Pfifo fast queueing discipline . . . . . .
3.4.5 Token bucket filter queueing discipline
3.4.6 Stochastic fairness queueing discipline .
3.4.7 Prio queueing discipline . . . . . . . .
3.5 Gestione della qualità di servizio . . . . . . .
3.6 Invio messaggi . . . . . . . . . . . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
4
4
5
6
6
.
.
.
.
.
.
.
.
.
.
.
8
8
9
9
9
10
11
11
11
12
12
12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
15
16
16
17
19
19
20
23
23
26
26
26
28
31
32
33
34
3.7
3.8
3.6.1 Invio diretto . . . . .
3.6.2 Invio indiretto . . . . .
Routing . . . . . . . . . . .
3.7.1 Routing dinamico . . .
3.7.2 Gestione della rete . .
Integrazione con il middleware
3.8.1 Prototipi e risultati . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 I simulatori, la simulazione ed Omnet
4.1 Simulazione ed emulazione . . . . . . . . . . . . .
4.2 Classificazione dei simulatori . . . . . . . . . . . .
4.3 I simulatori adottati . . . . . . . . . . . . . . . .
4.3.1 Ns-2 . . . . . . . . . . . . . . . . . . . . .
4.3.2 Omnet . . . . . . . . . . . . . . . . . . . .
4.4 Scelta di omnet . . . . . . . . . . . . . . . . . .
4.5 Il simulatore OMNeT++ . . . . . . . . . . . . . .
4.5.1 Il linguaggio NED . . . . . . . . . . . . . .
4.5.2 Il sistema di simulazione ad eventi discreti
4.5.3 La macchina a stati finiti . . . . . . . . . .
4.5.4 I messaggi . . . . . . . . . . . . . . . . . .
4.5.5 Architettura . . . . . . . . . . . . . . . . .
4.6 INET framework . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
35
37
37
38
38
41
.
.
.
.
.
.
.
.
.
.
.
.
.
43
43
44
45
46
46
47
47
49
51
52
53
53
55
5 Modellazione del protocollo IDM
su Omnet
58
5.1 Gli argomenti trattati nella simulazione . . . . . . . . . . . . . 58
5.2 La progettazione del network . . . . . . . . . . . . . . . . . . 58
5.3 Implementazione . . . . . . . . . . . . . . . . . . . . . . . . 61
6 Analisi dei risultati
6.1 I risultati in Omnet . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Latenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Throughput . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
67
67
68
Conclusioni e sviluppi futuri
69
2
1
Introduzione
Il lavoro che segue è stato svolto nell’ambito del progetto IDM (Inter-Domain
Messaging)[1] del gruppo di ricerca spagnolo ARCO Research Group[10] dell’Università della Castilla-La Mancha con la collaborazione dell’Università
del Mayab, Mexico. Il lavoro svolto affronta la modellazione del protocollo
IDM usando il simulatore di rete Omnet. [2] L’esigenza dell’uso del modello
simulativo nasce dalla necessità di valutare il protocollo in vari ambiti, ma
anche perchè una simulazione su reti reali può divenire molto costosa. Omnet
è uno strumento opensource che permette tutto questo, offrendo inoltre molti vantaggi che economizzano il lavoro. Attraverso la simulazione è possibile
valutare le qualità e le prestazioni del protocollo in esame.
• Il primo capitolo sarà di carattere introduttivo, presentando i caratteri
generali del problema in rapporto con soluzioni presenti in letteratura,
mettendo in luce le innovazioni di IDM giustificando il perchè del suo
utilizzo;
• il secondo capitolo definisce alcuni dei concetti fondamentali che verrano ripresi più volte nel corso della tesi;
• il terzo capitolo focalizza l’attenzione sul protocollo IDM e su tutte le
sue caratteristiche;
• il quarto capitolo tratta della simulazione ed introduce l’uso del simulatore Omnet++;
• il quinto capitolo riguarda la modellazione del protocollo IDM attraverso Omnet++ ed infine il sesto ne presenta i risultati ottenuti dalla
simulazione.
3
1.1
Panoramica sulla storia delle reti di calcolatori
La storia delle reti di calcolatori affonda le sue radici agli inizi degli anni
Settanta. Il Governo degli Stati Uniti decise di creare un istituto di ricerca
denominato ARPA(Advanced Research Projects Agency), il quale scopo era
di costruire un nuova tecnologia innovativa per permettere di collegare i vari
computer delle università americane ed i laboratori di ricerca. Cosı̀ nacque
ARPAnet un sistema che consentiva ai computer host della rete di comunicare e condividere dati tra loro. Ciascun host viene identificato attraverso
un indirizzo univoco che consente l’instradamento verso il computer di destinazione dei pacchetti contenenti le informazioni. Per tutti gli anni Settanta
ARPAnet continuò a svilupparsi in ambito universitario e governativo, ma
dal 1974, con l’avvento dello standard di trasmissione TCP/IP (Transmission
Control Protocol/Internet Protocol), il progetto della rete prese ad essere denominato Internet. Negli stessi anni si affiancava un’altra grande rivoluzione
informatica: l’avvento del personal computer. Negli anni Ottanta cominciò
a propagarsi la diffusione su larga scala dei personal computer, permettendo
cosı̀ la possibile diffusione della rete al di fuori degli ambiti più istituzionali e
accademici, rendendo di fatto potenzialmente collegabili centinaia di migliaia
di utenti. Internet quindi era diventata un’area molto estesa che consentiva
lo scambio di informazioni a migliaia di utenti sparsi per il mondo. Attualmente Internet è diventata una rete estremamente complessa formata da reti
di reti, ciascuna delle quali ha al suo interno uno svariato numero di host. La
massima espansione di Internet si è avuta per mezzo del World-Wide-Web,
un servizio di Internet il quale consente la possibilità di navigare ed usufruire
di un insieme vastissimo di contenuti multimediali e di ulteriori servizi accessibili a tutti o ad una parte selezionata degli utenti di Internet. Col passare
del tempo, nuove tecnologie innovative hanno affiancato l’uso di Internet,
come le reti MANET e le reti di sensori, creando cosı̀ la necessità di creare
scenari che coinvolgono l’interconnessione di reti tra di loro eterogenee.
1.2
Definizione del problema affrontato
Il problema affrontato nella tesi riguarda appunto l’utilizzo di una possibile
soluzione per la comunicazione tra reti eterogenee, le quali usano tecnologie e protocolli differenti. Si necessita quindi di una soluzione in grado di
gestire questo tipo di comunicazione anche a partire da più livelli, dal livello di trasporto fino al livello fisico.Si dovrà quindi definire un protocollo
multilivello in grado di interfacciarsi sui vari livelli a seconda delle reti comunicanti. L’obiettivo ultimo sarà quello di garantire l’interoperabilità tra
le varie applicazioni che vengono eseguite da ciascun nodo di rete usando lo
4
stesso protocollo e quello di poter inviare messaggi da una rete a qualsiasi
altra rete che utilizzi una tecnologia o protocolli di rete incompatibili.
1.3
Altri approcci usati in letteratura
In letteratura ci sono vari esempi di come sia stata affrontata la tematica
fin’ora. Lo scenario ideale al quale applicare il protocollo modellato è proprio una rete di sensori di tipo WSAN. [3] Un primo approccio al problema è
dato dall’uso di un protocollo univoco per l’intera infrastruttura, solitamente TCP/IP, però questo da origine a vari problemi: implementare lo stack
TCP/IP è troppo oneroso per questo tipo di infrastruttura poichè richiede
delle risorse computazionali elevate, per cui spesso è necessario una radicale
modifica dell’intera rete per garantire il giusto adattamento(incapsulamento
degli header, compressione pacchetti, indirizzamento, etc. ). Il protocollo
TCP/IP sarebbe il meno adatto per un’infrastruttura simile, poichè le reti
wireless sono solite aggiungere informazioni ridondanti nella trasmissione e ritrasmissione dei pacchetti. Attraverso il protocollo TCP/IP si provocherebbe
facilmente un abbassamento del data rate, provocando il congestionamento
della rete.
Un approccio migliore è dato dall’uso di un protocollo più adatto alle
esigenze dell’infrastruttura presa in esame. Alla base del meccanismo c’è un
gateway o delle base stations che si interfacciano con ogni singolo nodo sensore. Quando il client con una connessione TCP/IP si interfaccia col gateway,
quest’ultimo invia la richiesta su un altro protocollo più specifico, al nodo
sensore di destinazione. Anche questo approccio presenta dei problemi: bisogna conoscere l’indirizzo del gateway piuttosto che conoscere solo l’indirizzo
del nodo di destinazione, inoltre c’è mancanza di autonomia in funzione del
fatto che i nodi di sensori non possono interagire con elementi esterni alla
rete SAN[4] direttamente, funzionano solo all’interno della propria rete. È
questo uno dei problemi fondamentali ossia la mancanza di eterogeneità della
rete quando protocolli diversi devono comunicare tra di loro.
Internet ad esempio è basata sul singolo protocollo IP. Questo si interfaccia con i due livelli sottostanti ossia datalink e livello fisico. Ciò permette la
interconnessione di reti ma solo se vengono rispettate certe condizioni:
• gli host devono comprendere lo schema logico di indirizzamento
• gli host devono saper creare datagrammi sapendosi interfacciare con i
livelli sottostanti
• è richiesto un router per l’instradamento di pacchetti
5
• quando c’è un mezzo di diffusione, deve concedere il mapping dagli
indirizzi logici al livello fisico.
Quando si attraversa questo tipo di network con protocolli o tecnologie
incompatibili, si usa il tunnelling. [5] Questo approccio però non consente
schemi di routing omogenei. Quindi il problema fondamentale è come mettere
in comunicazione un device con una data tecnologia differente con il livello
logico.
Multiprotocol Label Switching (MPLS, RFC3031) e Layer Two Tunneling
Protocol (L2TPv3, RFC3931) affrontano il problema diversamente. Permettono la comunicazione tra reti eterogenee, ma entrambi hanno la limitazione
di appoggiarsi su IP come livello più basso e questo è limitante soprattutto
per una rete di sensori.
Nello scenario contemporaneo, nessuno tra questi protocolli risolve definitivamente il problema della totale integrazione di reti eterogenee.
1.4
La soluzione: IDM come protocollo multilivello
object oriented
La soluzione proposta a fronte di queste problematiche è il protocollo IDM.
Attraverso la formula di un protocollo multilivello legato alla progettazione
object-oriented, IDM si propone di risolvere tutti i problemi sopracitati che
nella letteratura e nelle tecnologie esistenti, non sono stati ancora risolti,
garantendo cosı̀ l’eterogeneità tra reti differenti. [7]
1.5
Un possibile scenario d’uso
Considerando la figura 1, viene illustrato un tipico esempio di inter-rete,
composta da 4 differenti network IDM.
I protocolli usati in questa inter-rete sono l’ATM (Asynchronous Transfer
Mode), Zigbee, XBow ed infine IP. È facile notare che sono 4 protocolli
differenti tra loro ed incompatibili, poichè ciascuno ha determinate funzioni
in determinati contesti. Zigbee è indicato per una WPAN (Wireless Personal
Area Networks), XBow per una WSN (Wireless Sensor Network) ed ATM per
le telecomunicazioni. Il problema da risolvere è rendere compatibili tra loro
questi protocolli che usano dispositivi differenti a diversi livelli, permettendo
cosı̀ la comunicazione da qualsiasi nodo della rete verso un qualsiasi altro
nodo della stessa. Ad esempio IP è di livello 3 (rete) ed ATM è di livello
2 (datalink) e l’incompatibilità riguarda il livello, mentre i dispositivi che
formano una rete di sensori sono nettamente differenti dagli host della rete IP.
La soluzione proposta consiste nel porre almeno un router IDM sul confine
6
Figura 1: Una inter-rete IDM composta da 4 differenti network IDM
tra ogni coppia di network. Sarà quindi il router IDM a dover instradare
correttamente i pacchetti ad ogni destinatario di un’altra rete, garantendo
cosı̀ l’omogeneità delle informazioni tra reti eterogenee.
7
2
Concetti generali
Di seguito verrano introdotti alcuni concetti fondamentali usati nella scrittura della tesi, riguardanti le reti di calcolatori, considerati essenziali per la
sua comprensione.
2.1
Rete di calcolatori
Una rete di calcolatori è costituita da un insieme di computer collegati tra
loro mediante un’infrastruttura che permette lo scambio reciproco di informazioni. L’infrastruttura è costituita da componenti hardware (cablaggi,
ripetitori, hub) e componenti software (sistemi operativi di rete) che forniscono gli strumenti per la gestione della rete stessa. Esistono vari tipi di reti
a seconda dalla loro estensione geografica:
• rete personale o PAN (Personal Area Network) se la rete si estende
intorno all’utilizzatore con una estensione di alcuni metri
• rete locale o LAN (Local Area Network) se la rete si estende all’interno
di un edificio o di un comprensorio, con una estensione entro alcuni
chilometri
• rete senza fili o WLAN (Wireless Local Area Network), se la rete locale
è basata su una tecnologia in radio frequenza (RF), permettendo la mobilità all’interno dell’area di copertura, solitamente intorno al centinaio
di metri all’aperto
• rete universitaria o CAN (Campus Area Network), intendendo la rete
interna ad un campus universitario, o comunque ad un insieme di edifici
adiacenti, separati tipicamente da terreno di proprietà dello stesso ente,
che possono essere collegati con cavi propri senza far ricorso ai servizi di
operatori di telecomunicazioni. Tale condizione facilita la realizzazione
di una rete di interconnessione ad alte prestazioni ed a costi contenuti
• rete metropolitana o MAN (Metropolitan Area Network) se la rete si
estende all’interno di una città
• rete geografica o WAN (Wide Area Network) se la rete si estende oltre
i limiti indicati precedentemente.
Tutti i nodi presenti sulla rete comunicano tra di loro per mezzo di uno o più
protocolli di rete.
8
2.2
Nodo di rete
Per nodo di rete si intende un dispositivo presente fisicamente sulla rete,
quindi un dispositivo hardware. I più frequenti sono l’hub, bridge, switch,
router, server, firewall, modem, client pc. Tutti i nodi possono interagire tra
di loro per lo scambio di dati ed informazioni, ma tutti rigorosamente per farlo
devono seguire un protocollo di rete. Ad esempio la rete Internet è governata
dal protocollo IP(Internet Protocol). Ogni dispositivo avente un indirizzo
IP è considerato host, ossia nodo di rete. Attraverso questo protocollo ogni
macchina sulla rete avrà un proprio indirizzo logico univoco, che consentirà
ad altri nodi l’identificazione per la comunicazione ed il trasferimento dati.
2.3
Protocollo di rete
Un protocollo di rete è definito come l’insieme di regole o meccanismi che
hanno la finalità di mettere in comunicazione due o più nodi presenti in una
rete. I protocolli di rete spesso si basano sul paradigma client-server. Ossia
un server che fornisce dei servizi ed un client che ne usufruisce. I diversi
protocolli di una rete sono organizzati con un sistema detto ”a livelli”: a
ciascun livello viene usato uno specifico protocollo. L’insieme di più livelli
e relativi protocolli definisce un’architettura di rete a strati, che altro non è
che un’astrazione delle funzionalità logiche della rete stessa.
Nella figura 2 sono mostrati i vari protocolli di rete per ciascun livello
dello strato protocollare.
2.4
Inter-rete
Per inter-rete si intende una rete formata a sua volta da reti collegate tra
loro. Solitamente le reti che compongono una inter-rete hanno protocolli e
dispositivi differenti dando cosı̀ origine ad una rete eterogenea. Una inter-rete
è rappresentata nella figura 1
9
Figura 2: Elenco di protocolli di rete secondo ISO/OSI
2.5
Paradigma Object-Oriented
Il paradigma orientato agli oggetti si riferisce ad una serie di concetti introdotti dai linguaggi di programmazione orientati agli oggetti. Nella presente
tesi il paradigma va inteso in due modi differenti: l’implementazione del
protocollo usa un linguaggio orientado agli oggetti, ossia il C++ e la progettazione del protocollo stesso segue il paradigma orientado agli oggetti. Tra
le varie caratteristiche dell’Object Oriented si citano:
Classe una rappresentazione astratta di un concetto avente delle caratteristiche(attributi e metodi)
Oggetto un’istanza di una classe avente una propria identità, rappresentante l’oggetto della classe stessa
Campi di istanza gli attributi che ogni oggetto istanziato possiede
Metodi delle funzioni che hanno il compito di manipolare gli attributi dell’oggetto istanziato
Incapsulamento la tecnica di nascondere il funzionamento interno di un
programma, principio cardine della ingegneria del software
10
Ereditarietà consente di definire una classe come sottoclasse o classe derivata a partire da una classe preesistente detta superclasse o classe base
La sottoclasse eredita implicitamente tutte le caratteristiche (attributi
e operazioni) della classe base.
2.6
Routing
Nelle reti a commutazione di pacchetto, il routing è il processo di instradamento dei pacchetti lungo una rete. Attraverso i protocolli di routing, i
dispositivi sulla rete realizzano l’instradamento dei pacchetti per inoltrarli al
corretto destinatario, passando per tutti i nodi intermedi della rete.
2.7
Tos e Qos
Tos Type of service. È presente nell’header del protocollo IPV4 e descrive il
tipo di servizio e la priorità richiesta per le informazioni contenute nel
pacchetto stesso.
Qos Quality of service. È soltanto un parametro di misurazione delle prestazioni di un sistema di comunicazione, e prende in considerazione
principalmente tre valori essenziali: latenza, percentuale di pacchetti
persi, variazione di latenza. In base a questi valori il Qos valuta la
qualità del servizio.
2.8
Pacchetto
Per pacchetto si intende una sequenza finita di dati trasmessi su una rete di
calcolatori. Il pacchetto viene creato da un nodo della rete come sorgente e
viaggiando per altri nodi della rete giunge al nodo di destinazione. La forma
del pacchetto è strettamente collegata al protocollo in uso, però solitamente
ogni pacchetto ha 3 componenti fondamentali:
Header l’intestazione che contiene tutte le informazioni necessarie alla trasmssione del pacchetto, affinchè arrivi a destinazione
Data o anche payload, contiene i dati utili trasmessi ossia il contenuto
dell’informazione
Checksum un codice di controllo utilizzato per controllare la corretta ricezione dei dati ovvero l’eventuale presenza di errori
11
2.9
Latenza
Nell’ambito delle reti di calcolatori si parla di latenza di trasmissione. Consiste nel tempo impiegato da un pacchetto per raggiungere un altro host della
rete. A seconda di alcuni fattori che influenzano la propagazione del segnale,
quali router, switch, cavi, la latenza ha un intervallo che va dalla latenza
minima a quella massima.
2.10
Throughput
Il throughput di un canale di comunicazione è la sua capacità di trasmissione
effettivamente utilizzata. Non è da confondersi con la capacità del canale:
sia la capacità che il throughput si esprimono in bit/s, ma mentre la prima
esprime la frequenza trasmissiva massima alla quale i dati possono viaggiare,
il throughput è un indice dell’effettivo utilizzo della capacità del link. Il
throughput è la quantità di dati trasmessi in una unità di tempo(in bit/s)
e dipende esclusivamente da quanta informazione è immessa sul canale nella
trasmissione.
2.11
Rete di sensori
Una rete di sensori è formata da un insieme di dispositivi elettronici chiamati sensori, in grado di rilevare grandezze fisiche dall’ambiente esterno come
temperatura, umidità, pressione, luce, ma anche capaci di rilevare il movimento di veicoli, la composizione del terreno, livello di rumore e molte altre
grandezze. È possibile classificare le applicazioni in cui si possono usare le
reti di sensori in militari, ambientali, sanitarie, casalinghe e commerciali. [6]
12
3
IDM per l’integrazione di reti eterogenee
3.1
Il protocollo IDM
Nell’introduzione al protocollo IDM verranno soltanto citati alcuni aspetti
generici, quali il funzionamento e l’ambito applicativo nel quale è stato pensato, descrivendo in linee generali la sua architettura. Questo capitolo tratta
del contesto e l’uso finale del protocollo IDM nell’ambito di reti eterogenee.
Verrà descritto in dettaglio il protocollo IDM con tutte le sue caratteristiche
e funzionalità. La vasta diversità di protocolli e tecnologie esistenti al giorno
d’oggi, rende difficile lo sviluppo di meccanismi per ottenere l’interoperabilità tra le varie applicazioni che vengono eseguite nei più disparati nodi delle
reti, perciò non è sempre possibile utilizzare lo stesso protocollo di rete. Un
esempio di questo problema è dato dall’accesso ai nodi di una rete di sensori.
Ad esempio questa tecnologia usa Bluetooth o Zigbee che sebbene possano
adoperare la pila TCP/IP, l’uso spesso richiedo uno sforzo considerabile e
non sempre si ottengono soluzioni ottimali, in termini di prestazioni. Soluzioni alternative possono essere l’utilizzo di hardware proprietario oppure di
protocolli specializzati. Per affrontare il problema, bisogna considerare due
casi molto importanti:
1. accesso da qualunque punto di una rete, ad una rete di sensori
2. interazione di due o più nodi con differenti tecnologie, inclusi tutti i
cammini intermedi di qualsiasi tipo
1 Considerando le esistenti soluzioni alternative per conseguire l’obiettivo
finale, la soluzione ottimale è senz’altro quella di usare un protocollo unico comune a tutte le reti, includendo uno schema di instradamento globale.
Ovviamente con ciò, non si pretende di sostituire il protocollo IP, però è possibile risolvere i problemi dell’uso della pila TPC/IP in alcuni ambiti di reti
eterogenee, ergo bisognerà costruire un protocollo non solo indipendente dalla rete, ma anche dal trasporto. Costruire un nuovo protocollo sopra il livello
di collegamento implica il reinventare la ruota, affrontando un problema già
risolto. L’alternativa più adeguata quindi è usare il protocollo o la pila che
risulta più naturale in ogni ambiente e costruire il protocollo omogeneizzante
in un livello superiore.
Le specifiche CORBA Message Routing [13] descrivono il percorso ideale.
Il middleware prevede un livello di astrazione sufficientemente consistente
per occultare i dettagli delle tecnologie software e hardware sottostanti. Si
può inoltre, implementare sopra una gran varietà di sistemi a patto che si
13
rispettino delle condizioni(in funzione del middleware). Riguardo le specifiche CORBA che risultano essere adeguate, ci sono anche dei punti su cui
focalizzare l’attenzione, poichè CORBA non soddisfa i seguenti requisiti:
1. i router non dispongono delle tabelle di routing che permettono di
costruire l’instradamento da un estremo all’altro, attraverso i router
vicini
2. non prevede di implementare una forma di instradamento dinamico che
permetta di stabiliare rotte alternative e successivi cambiamenti
3. le referenze ad oggetti possono avere dimensioni arbitrari. Quindi, dato
che possono contenere una quantità non delimitata di profili e componenti, che includono a loro volta la lista dei router possibili, il volume
di questi riferimenti può raggiungere con facilità migliaia di bytes
Ovviamente questi 3 punti non vanno considerati come errori di CORBA,
semplicemente il protocollo che si vuol costruire ha obiettivi differenti che
richiede quindi, specifiche e requisiti differenti. Nelle righe successive quindi,
si andrà ad introdurre il protocollo IDM ed i meccanismi associati per creare
un MDOO generale per incapsulare e trasportare messaggi come invocazioni
ad oggetto. Molti aspetti essenziali alla creazione del protocollo verràno
comunque presi dal protocollo IP e CORBA.
Ecco alcuni aspetti essenziali che andremo a considerare nel nuovo protocollo:
• Mantenere un sovraccarico sufficientemente basso per permettere l’eseguibilità delle applicazioni nella rete, soprattutto nei casi di basso
MTU. Inoltre un minor sovraccarico implica trasmettere meno bytes e
pertanto consumare meno energia
• Il protocollo deve essere sufficientemente generico a tal punto da permettere l’implementazione di algoritmi di routing dinamici
• Deve essere cross-layer, tale da permettere l’eliminazione di livelli o
prestazioni non necessari in funzione dei requisiti richiesti dal cliente
• Deve definire uno schema di instradamento universale, gerarchico. Il
instradamento universale, che può includere nodi di milioni di reti,
può implicare un alto instradamento del traffico. Perciò è necessario
arrivare ad un compromesso che soddisfi entrambi i requisiti proposti
Sia gli host di rete che i router che smistano il traffico di rete, verràno
trattati come oggetti distribuiti. Inoltre, il programmatore disporrà di due
possibili punti di vista quando dovrà progettare la sua applicazione:
14
1. un meccanismo trasparente per le applicazioni di tipo client, per mezzo
di un API simile a quella usata dai sockets in BSD
2. un riferimento ad un oggetto remoto (mediante proxy) sopra il quale
può invocare metodi conformi al suo tipo
3.1.1
Introduzione al protocollo IDM
IDM (Inter-Domain Messaging) è un protocollo che ha lo scopo di trasferire
messaggi verso diversi dispositivi usando protocolli e tecnologie di rete eterogenee. L’obiettivo principale è far comunicare vari network, ciascuno con
differenti dispositivi, anche da differenti provider di rete e usando tecnologie e protocolli incompatibili. Lo schema di indirizzamento è indipendente
dal livello fisico e logico sottostante, perciò è necessario tradurre gli indirizzi
IDM in indirizzi reali. Per far si che tutti i router IDM siano raggiungibili tra
di loro, anche se sono disposti in reti differenti con tecnologie incompatibili,
si usa un protocollo di scoperta di nodi chiamato ALP, cosı̀ facendo si evita
anche l’uso di un registro centralizzato. Ogni oggetto è rappresentato usando
un indirizzo IDM. Ci sono due modalità d’uso. La più semplice è basata sullo
metodo standard Socket-Like. Il server apre un socket in ascolto, sul quale i
client si connetteranno. I dati che usano questo modello sono semantic-less,
al fine di aumentare la flessibilità per le applicazioni che lo necessitano. Il
secondo caso d’uso è basato su RMI, dove i client e i server usano una interfaccia comune per comunicare. In questo modo, non c’è bisogno di cambiare
il codice delle applicazione che usano RMI al fine di utilizzare IDM, cosı̀ l’adattamento è facile e veloce. Dato che si usano protocolli eterogenei, ci deve
essere uno schema di indirizzamento uniforme. IDM assegna ad ogni oggetto un identificatore, il quale può anche essere unico se richiesto. L’oggetto
assegnato è rappresentato da una sequenza di bytes, formato da vari campi
contenenti le informazioni necessarie all’indirizzamento. Alcuni dei campi
possono anche essere omessi, se il nodo non è in grado di elaborarli. Tutto
ciò fa si che ci sia uno schema di indirizzamento di tipo gerarchico. Ci sono
molti scenari dove è richiesto porre in comunicazione differenti dispositivi,
ognuno da un diverso provider che può usare differenti tecnologie e protocolli. Ciò presenta un grosso probema, il quale può essere risolto applicando
l’uso del protocollo IDM. IDM usa un approccio orientato agli oggetti. I
dispositivi e i router sono modellati come fossero oggetti, usando un middleware standard. Ciò fa si che i messaggi inviati siano indipendenti sia dai
protocolli che dalle tecnologie differenti, facendo risultare la comunicazione
trasparente. Il prototipo attuale usa il middleware ZeroC Ice scritto in C++,
e in parte in Python. Ciascun nodo è trattato come oggetto Identity in Ice
15
Objectmmentre ciò che sta al di sopra si appoggia sul protocollo TCP/IP. I
risultati ottenuti dall’attuale prototipo verrànno discussi nella sezione 1. 7.
3.1.2
Inter-Reti
Si può analizzare il problema prendendo in esame la tipologia di rete più
diffusa, ossia Internet. Come la maggior parte delle reti, usa un protocollo
di rete unico in questo caso è IP. Uno schema globale di connessioni logiche
permette la interconnessione di reti con distinte tecnologie nel livello di collegamento e fisico. Pertanto, affinchè una rete possa far parte di una inter-rete
necessita il soddisfacimento di alcuni requisiti base:
• gli host devono conoscere lo schema di instradamento logico
• gli host devono poter creare e inviare pacchetti sopra la tecnologia di
rete sottostante
• nel caso in cui si tratti di un mezzo di diffusione, deve esistere un
meccanismoche permetta mappare il instradamento logico e fisico
• è necessario sempre un router che sia in grado di reinviare (forward)
pacchetti per reti differenti
In Internet, quando si vuole attraversare una rete che utilizza un protocollo di rete incompatibile, si ricorre al tunneling, ma ciò impedisce la creazione
di uno schema di routing omogeneo. Un altro problema evidente è inviare
dati ai dispositivi di questa rete, che hanno protocolli di rete incompatibili.
3.1.3
Routing omogeneo
L’obiettivo è la creazione di un servizio di trasporto di messaggi da estremo
ad estremo, indipendentemente dalle tecnologie di rete intermedie, sfruttando
i protocolli e le tecnologie disponibili in ogni dominio, al fine di non reimplementare funzionalità già rese disponibili. IDM non delega il instradamento
ai livelli inferiori, quindi si può delegare il routing. Ad esempio, in una rete
TCP/IP si possono incapsulare i messaggi sopra i pacchetti IP e delegare
il routing nei protocolli abituali. La combinazione di un middleware con la
possibilità di routing multiplo (cross-layer) da estremo a estremo, porta molti
vantaggi:
Instradamento Realmente globale e indipendente dalla tecnologia e dal
protocollo
16
Rete virtuale Possibilità del dispiego di reti virtuali sopra qualsiasi tipo di
rete esistente o futura
Qualità di servizio La possibilità di gestire al meglio l’informazione, ma
nel livello più alto
Flessibile Si adatta alle necessità di ogni applicazione. Usare un middleware di comunicazione non implica necessariamente un sovraccarico
di protocolli, né un aumento significativo della complessità
Servizi di piùttaforma Dato che si usa un middleware di comunicazione
generico, si possono sfruttare delle caratteristiche già incorporate in esso. IDM si basa su ICE, quindi è possibile usare la cifratura e l’autenticazione trasparente, supporto multi-lingua e molte altre caratteristiche
incluse in esso.
Trasparenza di localizzazione I router vengono trattati come entità logiche e per questo possono essere migrati o replicati ad altri noti di
rete
Routing funzionale Questa qualità permette di esporre gli schemi e gli
algoritmi di routing di base in raggruppamenti funzionali di nodi e non
solo su localizzazione geografica
Orientato agli oggetti Se il programmatore lo desidera, può vedere il server come un oggetto remoto e richiamare su di esso vari metodi, inoltre
è possibile usare delle API alternative con primitive read/write
3.2
Instradamento
Gli schemi di instradamento tradizionale, utilizzano una direzione logica che
identifica l’host, delegando l’identificazione dell’applicazione destinata, ai
protocolli del livello di trasporto. IDM usa uno schema di instradamento gerarchico, nel quale si riserva un suffisso per identificare l’applicazione. Queste
direzioni sono realmente identità di oggetti. Se si desidera un instradamento
globale, si può usare un qualsiasi schemda di identificatori che garantisca
l’unicità, chiamato GUID(Globally Unique Identifiers), e che permetta di
ottenere identificatori gerarchici. Benchè sia possibile, non è strettamente
necessario che la direzione identifichi l’host dove risiede l’oggetto.
Solo il cliente necessita conoscere l’identità dell’oggetto, che può essere
visto a tutti gli effetti come una direzione logica. Per giungere a capo della
trasmissione dei dati, si usa un endpoint. Il quale incapsula l’implementazione di trasporto sopra una tecnologia o anche un protocollo completo, tipo
17
Bluetooth, TCP, UDP, etc. La presenza dell’endpoint è realizzata dal router
in base alle restrizioni fornite dalla qualità di servizio specificata per il client
e dalla disponibilità delle interfacce fisiche del nodo nel quale risiede. La
trasmissione non può essere possibile se non vengono soddisfatti entrambi i
requisiti.
IDM è in grado di localizzare un endpoint senza conoscere la sua ubicazione, ma sfruttando il suo identificatore. Più concretamente, serve per
verificare l’endpoint dell’adattatore nel quale è registrato l’oggetto di destinazione.
18
3.2.1
Identità dell’oggetto
Dal punto di vista funzionale, l’identificatore dell’oggetto è una sequenza di
byte globalmente unica con due campi rilevanti:
Applicazione Identifica il servizio in uso, ad esempio un servizio di streaming, una rete P2P, Bluetooth, etc. Deve essere inteso come un filtro e,
per questo, il suo uso non è sempre obbligatorio. Questo campo può essere usato dai router per un trattamento speciale per alcuni tipi di messaggi che corrispondono ad una applicazione determinata, applicando
quindi la tecnica del traffic-shaping o priorità per contenuti.
Nome Identifica l’oggetto indipendentemente dall’applicazione. Come nell’Object Oriented, un oggetto dato ha lo stesso nome in tutte le applicazioni nel quale è presente, perciò è possibile che uno stesso oggetto
possa avere più di un nome, pertanto può avere varie identità incluse
nel contesto della medesima applicazione. È necessario quindi l’uso di
uno schema gerarchico, che rende il sistema flessibile e permette la trasmissione trasparente dai nodi e dai router. Per questo possono essere
presenti router in qualsiasi punto della rete, nonostante le delimitazioni
poste in reti diverse(ad esempio tra una LAN e Internet) è garantita la
interconnessione, che è l’obiettivo principale del protocollo IDM. [12]
3.2.2
Un esempio di instradamento
Per illustrare il sistema di instradamento si propone un esempio basato su
IPV6. Da considerare che IDM non vuole essere un sostituto del protocollo
IP, ma un protocollo generico per il trasporto di messaggi in applicazioni
distribuite.
Lo spazio di instradamento è diviso nei seguenti campi:
Applicazione(32 bits) Identifica una applicazione o rete logica concreta
Organizzazione(32 bits) Identifica l’entità responsabile o proprietaria dell’oggetto
Sezione(8 bits) Livelli organizzativi intermedi
Unità(8 bits)
Sottorete(16 bits)
Nodo(16 bits) Identifica un nodo logico dentro la rete. Lo stesso dispositivo ne può contenere vari
Oggetto(16 bits) Identifica un oggetto dentro al nodo
19
Figura 3: Esempio di instradamento
3.3
Endpoints
Un endpoint è una struttura logica indipendente che incapsula tutti i dettagli
di trasporto di dati per una tecnologia o protocollo sottostante. Non ci
sono differenze funzionali tra un EP che permette di aprire e mantenere una
connessione TCP su una VPN, rispetto ad un EP che invia dati SLIP tramite
un cavo RS-232. Le differenze stanno nelle prestazioni dell’EP, non nel suo
utilizzo.
L’EP è responsabile dei seguenti compiti:
• Costruire pacchetti IDM, serializzare e incapsulare l’invocazione dell’utente, calcolo del checksum, autenticazione, etc.
• Occultare tutti i dettagli in relazione con il protocollo o l’interfaccia di
comunicazione.
• Enumera le prestazioni di QoS che offre ogni trasporto e tecnologia
concreta.
ICE supporta 3 tipi di EP: TCP, UPD, SSL. In IDM ne sono stati aggiunti
due: Socket UNIX e Crossbow. Nella figura sottostante è rappresentata la
relazione di IDM con i livelli sottostanti nel modello di rete tradizionale.
Ogni EP presenta una rappresentazione testuale che specifica il protocollo di livello inferiore che è utilizzato, la direzione logica o fisica, o altre
informazioni necessarie per stabilire la connessione o l’invio dei dati.
20
Figura 4: Livello IDM
In IDM esiste un tipo di EP molto speciale che si incarica di anteporre
l’intestazione IDM, ai messaggi convenzionali del protocollo inter-OBR. Nel
caso di ICE, ciò semplifica l’uso di IDM sulla distribuzione software poiché
non si ha la necessità di modificare nulla nel codice.
IDM potrà utilizzare il protocollo inter-ORB per codificare i suoi messaggi, però ciò implica un sovraccarico di dati molto importante che risulta
problematico per MTUs di piccole dimensioni. Per questa ragione, è stato
definito un formato di intestazione (header) specifico. I campi usato sono i
seguenti:
1. magic sequence (3 bytes) Caratteri ’I’ ’D’ ’M’ 2. messageType (1 byte)
Tipo di messaggio 3. messageSize (4 bytes) Dimensione totale del messaggio
4. requestId (4 bytes) Realizza la corrispondenza col messaggio di risposta 5.
routerId (2 bytes) L’Id del router che reinvia il messaggio 6. dst (16 bytes)
L’Id dell’oggetto destinatario 7. src (16 bytes) L’Id dell’oggetto sorgente 8.
hopLimit (1 byte) Un contatore che il router incrementa in ogni hop. 9.
Tos (1 byte) Un codice che identifica il ToS. Il router applica un congiunto
di restrizioni di QoS ad ogni tipo di servizio. È molto simile al QoS del
protocollo IP. 10. Flow (4 bytes) Identifica una sequenza di messaggi che
condividono il profilo del QoS. 11. Mode (1 byte) Caratteristiche di invio
della invocazione: idempotente, oneway, twoway, risposta richiesta, etc
21
struct HeaderData {
byte magic_I, magic_D, magic_M;
byte messageType;
byte mode;
short messageSize;
int requestId;
byte routerId;
IDM: : Identity dst;
IDM: : Identity src;
byte hopLimit;
ToS tos;
int flow;
};
struct ForwardData {
string operation;
Encapsulation params;
};
struct ForwardMsg {
struct HeaderData;
struct ForwardData;
};
Il campo routerId non è una identità IDM completa. È presente solo
se richiede il suffisso(l’id dell’oggetto nel nodo)dato che il dispositivo che lo
ospita deve essere localizzato per altro mezzo. Quindi è un vantaggio che
vari router IDM(oggetti) convivano al tempo stesso con un nodo.
IDM supporta due tipi di messaggi:
Raw offre all’utente una API simile ai socket BSD per dargli la possibilità di
trasportare blocchi di dati senza nessun tipo di semantica né formato
User se si dispone delle specifiche dell’interfaccia dell’oggetto remoto, è possibile realizzare delle invocazioni sui metodi dell’oggetto remoto. Cosi
facendo, si realizza la serializzazzione e deserializzazione dei parametri,
verifica di tipo, gestione degli errori e delle eccezioni, etc
22
3.4
3.4.1
Le politiche del TOS e QOS
Quality of service
Nell’ambito delle telecomunicazioni, il termine Quality of Service viene utilizzato sia per far riferimento ai parametri utilizzati per caratterizzare la qualità
del servizio offerto (ad esempio delay, jitter, throughput, packet loss rate, etc.
) sia per indicare gli strumenti necessari a garantire la qualità di servizio desiderata. Il progetto originario dei protocolli di rete su cui si basa l’odierna
infrastruttura di Internet non percepiva la necessità di QoS per le applicazioni e, quindi, non prevedeva alcun supporto per tale funzionalità. Si parla in
questo caso di servizi offerti in modalità best-effort, il sistema garantisce di
fare tutto il possibile per portare a termine un’operazione, ma non garantisce
affatto che l’operazione verrà compiuta né tanto meno in che modo. Questo
modello funziona discretamente per tutte le applicazioni le cui performance
non risentono di prestazioni di rete particolarmente degradate, ma esistono
altre applicazioni che richiedono determinate condizioni per poter funzionare
correttamente, ad esempio la trasmissione dati relativa al traffico VoiP (Voice Over IP). Tale tipologia di traffico risulta essere estremamente sensibile
al ritardo con cui i pacchetti vengono ricevuti: il segnale vocale, prima di
essere trasmesso, subisce un’operazione di campionamento; tale operazione
consiste nel valutare, ad intervalli periodici, il valore del segnale in quel determinato istante (il campione appunto). Tali campioni vengono trasmessi e
successivamente ri-assemblati dal ricevente in maniera da poter ricostruire il
segnale originario. Qualora, però, alcuni pacchetti che contengono le informazioni sui campioni dovessero essere ricevuti con grosso ritardo, il segnale
ricostruito risulterebbe incomprensibile. Per questo motivo, per far funzionare un servizio di telefonia VoiP è necessario prevedere che questa classe di
traffico subisca un trattamento differente da altre classi: i requisiti in termini di throughput del traffico voce sono realmente minimali, ad esempio,
usando il codec G.711 PCM per la codifica del segnale vocale, la banda richiesta per una singola conversazione infatti di appena 64 Kbps (il valore fa
riferimento soltanto al payload applicativo) arriva ad appena 5.3 kbps per il
codec 6.723.1 ACELP. Di questo valore di banda minima richiesta per la singola conversazione, per quanto piccolo esso sia, si dovrà comunque ricordare
quando configureremo QoS per questa classe di traffico, per non trovarci nelle
condizioni di non poter garantire le condizioni minime necessarie affinchè la
conversazione avvenga. Si noti che si sono sommariamente definiti i requisiti
per una tipologia di traffico. Nella realtà il parametro realmente interessante è il massimo ritardo tollerabile perchè la qualità della conversazione non
risulti degradata. Esistono fondamentalmente due metodi per fornire garan-
23
zie sulla qualità di servizio. Il primo, detto overpro visioning, consiste nel
fornire risorse in abbondanza tale da soddisfare la domanda di picco attesa
con un sostanziale margine di sicurezza. Una soluzione sicuramente semplice,
ma poco scalabile, qualora le esigenze dovessero crescere più velocemente di
quanto predetto. L’alternativa sarebbe amministrare la banda disponibile,
facendo in modo che i pacchetti a cui deve essere garantita una certa QoS
ottengano un trattamento privilegiato rispetto ad altri. Per ottenere questo
risultato bisogna, però, prima di tutto identificare tali pacchetti e questa fase
non può prescindere da un’analisi dei requisiti necessari. Una volta identificati tali requisiti, si andrà ad applicare a questa classe di traffico una disciplina
di coda (queueing discipline) che garantisca le prestazioni richieste. I metodi strutturati per identificare il traffico da privilegiare (individuando quindi
delle classi di traffico) sono:
Integrated Services tale metodo è basato su un meccanismo simile a quello
di una normale prenotazione. Prima di iniziare una sessione con specifici requisiti di QoS, l’applicazione deve ”chiedere” alla rete se essa
puo garantire le prestazioni necessarie. La rete valuta se dispone delle
risorse adeguate e, in caso positivo, accetta la prenotazione. Tale meccanismo di signaling avviene attraverso Il protocollo RSVP (Resource
Reservation Protocol) definito nell’RFC 2205.
Differentiated Services contrariamente al modello Integrated Services, il
modello DiffServ ignora totalmente il concetto di sessione. Infatti quando un pacchetto arriva ad un nodo di ingresso ad un dominio DiffServ,
esso viene ”marchiato” mediante l’assegnazione di un valore opportuno nel campo DSCP, come vedremo nel seguito. Questo valore verrà
in seguito utilizzato da tutti i nodi del dominio DiffSery per determinare qua le comportamento o livello di GoS si applicano. E’ definito
nell’RFC 2474.
In un router che non applichi politiche di qualità di servizio, i pacchetti
vengono trasmessi dalle interfacce di uscita nell’ordine in cui essi sono arrivati (politica FIFO, First In First Out). Una disciplina di coda (queueing
discipline o brevemente qdisc) consiste essenzialmente nel gestire per ciascuna interfaccia diverse code in uscita in cui i pacchetti vengono classificati. La
qdisc stabilisce in quale ordine verrànno prelevati i pacchetti dalle varie code. Questa operazione, definita scheduling, potrebbe portare a decidere che
alcuni pacchetti devono essere trasmessi prima di altri a causa di specifiche
esigenze delta classe di traffico di appartenenza. Con riferimento al mondo
Linux, è opportuno fornire la terminologia di base per la gestione delle qdisc.
Un primo concetto fondamentale è quello di root qdisc. Tale qdisc ha un
24
ruolo estremamente importante in quanto essa è connessa direttamente al
device. Un altro concetto fondamentale da chiarire subito è la differenza tra
classless e classfull qdisc. Si definisce classless una qdisc che non preveda
”classi” (cioe ulteriori suddivisioni) al proprio interno, mentre una classfulll
qdisc le può prevedere. Cerchiamo di capire meglio i concetti appena presentati mediante un esempio: in figura 5 viene mostrata una gerarchia di
classi.
Figura 5: Gerarchia di classi in QoS
Si osserva che ogni qdisc e class sono caratterizzate da un handle costituito da un major number e un da un minor number. La root qdisc ha handle
1:0 abbreviato in 1: . I pacchetti vengono inseriti in coda e prelevati soltanto
dalla root qdisc, che è l’unico elemento con cui il kernel si interfaccia, affidandogli i pacchetti per la classificazione. Quando, poi, il kernel ritiene che sia
giunto il momento di dare ad un’interfaccia la possibilità di trasmettere, esso
richiede alla root qdisc i pacchetti da passare all’interfaccia di rete, che poi
si occuperà della trasmissione vera e propria. Una classfull qdisc può avere
molte classi ed ogni classe può essere figlia della qdisc o di un’altra classe,
come ad esempio 1: 10, 1: 11 e 1: 12 in figura 5. Una leaf class (classe foglia)
e una classe priva di classi figlie. Quando il traffico entra in una classfull
qdisc, esso deve essere inviato a una delle sue classi interne (classificazione):
per determinare in quale, vengono consultati i cosiddetti filtri. Vedremo nel
seguito che quando si crea una classe, viene creata una qdisc FIFO che può
25
essere rimossa dall’aggiunta di una classe minore o sostituita con un’altra più
idonea. Per il momento ci interessa comprendere la logica di una classfull
qdisc.
3.4.2
Type of service
È da riconsiderare l’header IP e in particolare il campo Type of Service.
Questo ottetto può essere interpretato, per motivi storici, in due maniere
differenti: le specifiche del protocollo IP vengono definite nell’RFC 791 nel
Settembre 1981. In questo documento si legge testualmente ”The type of
service (TOS) is for internet service quality selection. The type of service is
specified along the abstract parameters precedence, delay, throughput, and
reliability. These abstract parameters are to be mapped into the actual service parameters of the particular networks the datagram traverses”. In base a
quanto definito, il campo Precedence fornisce un’indicazione dell’importanza del pacchetto. In particolare, esso si presta a vari utilizzi (e conseguenti
priorità). Il più basso livello di priorita definito nelle specifiche prende il
nome di routine traffic, ma altri possibili utilizzi sono network control traffic
e routing traffic. Nella realtà, questo field non ha mai trovato alcuna applicazione pratica per il semplice motivo che da principio i router e le prime
implementazioni degli UNIX di quegli anni non lo supportavano. In seguito,
al crescere della complessità delle reti, i vendor hanno sviluppato maniere alternative per gestire la qualità del servizio basandosi sull’analisi degli header
(sia a network che a transport layer).
3.4.3
Class queueing discipline
La queueing discipline non è configurabile con ulteriori suddivisioni interne
per cui risulta essere il caso più semplice in assoluto.
3.4.4
Pfifo fast queueing discipline
Conviene analizzare pfifo fast, per almeno due ragioni: la prima perchè essa
è la qdisc utilizzata di default su qualsiasi scheda di rete; la seconda poichè
non è difficile da configurare, dato che non offre alcuna opzione di configurazione. Questa qdisc è, come dice il nome, basata su una coda FIFO (First
In First Out). Come accennato in precedenza, una FIFO ha la caratteristica
che un pacchetto ricevuto viene messo in coda agli altri pacchetti ricevuti in
precedenza e viene trasmesso subito dopo essi, rispettando l’ordine di arrivo. Questo dovrebbe significare che nessun pacchetto riceve un trattamento
particolare, anche se spesso ciò non avviene, a causa delle cosiddette bande.
È opportuno prendere confidenza con tc, che analogamente a ip, fa parte
26
della suite iproute2. La sintassi è molto simile come possiamo facilmente
osservare.
Figura 6: Mappatura delle varie tipologie di traffico nelle bande messe a
disposizione della qdisc pfifo fast
La qdisc utilizzata è proprio la pfifo fast come mostrato anche da ip, ma
i parametri mostrati sono ancora piuttosto oscuri. La qdisc mostrata è una
root qdisc e quindi è direttamente agganciata al device eth0. Nell’output di
tc, si fa riferimento a tre bande e ad una priomap. Le tre bande in questione
(definite banda 0, 1 e 2) sono, a loro volta, delle code FIFO gestite secondo
priorità crescente. Questo significa che fino a quando ci sono dei pacchetti
nella banda 0, le bande 1 e 2 non vengono processate. Quando la banda
0 è vuota, si passa a gestire la 1 e soltanto quando le altre sono vuote si
passa a gestire la 2. Inoltre, all’interno di ciascuna banda si applica una
logica FIFO pura, ossia il primo pacchetto ricevuto viene trasmesso senza
ulteriori elaborazioni. Chi decide in quale banda va collocato un pacchetto
è il kernel, che onora il field Type of Service presente all’interno dell’header
IP del pacchetto, avvalendosi della priomap. Nella tabella vista in precedenza, la seconda colonna contiene 1 valore (decimale) dei 4 bit del campo
ToS mentre la terza colonna indica il loro significato. La quarta colonna
indica, invece, come il kernel interpreti questi 4 bit mostrandone la priority.
L’ultima colonna, infine, traduce questa priority in una delle tre bande di cui
si parlava in precedenza. La logica che governa l’assegnazione è molto semplice: prendiamo ad esempio la priority 6 (Interactive). E’ semplice capire
che, poichè i1 traffico interattivo deve avere precedenza su altre tipologie di
traffico, esso deve necessariamente essere mappato nella banda 0. Facendo
riferimento alla tabella si vede, inoltre, che, in base alla Linux priority, un
pacchetto ha priority 2 (Bulk) se il flag Maximize Throughput è impostato e
27
che un pacchetto ha priority 6 (Interactive) se il flag Minimize Delay è impostato e il flag Maximize Throughput non lo è. Per completezza, è opportuno
sottolineare come RFC1349 fornisca le seguenti indicazioni per lo sviluppo
di alcune applicazioni di rete. Esistono delle varianti della qdisc pfifo fast e
sono le qdisc pfifo e bfifo, che altro non sono che qdisc basate su FIFO queue,
ma senza l’utilizzo di bande. Non hanno grande utilità pratica rispetto alla
pfifo fast se non per il fatto che mantengono statistiche sul traffico e possono
quindi tornare utili in fase di analisi di dettaglio dell’utilizzo di una rete.
3.4.5
Token bucket filter queueing discipline
Token Bucket Filter (d’ora in poi brevemente TBF) è una qdisc estremamente
semplice che consente di limitare il rate di trasmissione dei pacchetti entro un
determinato valore consentendo, eventualmente, burst di traffico addizionali
qualora non ce ne siano le condizioni.
Figura 7: Token bucket filter queueing discipline: i token arrivano a cadenza
regolare ed ogni pacchetto inviato ne consuma uno
L’immagine 7 mostra un secchio (bucket) in cui vengono inseriti dei gettoni (token) ad un ritmo di inserimento costante (token rate). Il secchio è
inoltre caratterizzato da una dimensione (bucket size) definita come il massimo numero di gettoni che esso può contenere. Qualora si provi ad inserire
28
nel secchio un numero di gettoni superiore alla dimensione massima, tali
token deborderebbero e verrebbero persi, proprio come accadrebbe per un
secchio vero e proprio, a ciascun gettone corrisponde un pacchetto. Con questa immagine davanti agli occhi, il funzionamento di TBF è molto semplice
da comprendere. Infatti, ogni pacchetto da trasmettere viene associato a un
token e, quando viene trasmesso, viene tolto dal secchio, come se ci fosse un
buco sul fondo. A questo punto, si capisce che ci possono essere tre possibili
scenari:
1. i pacchetti arrivano al TBF ad un rate uguale al token rate
2. i pacchetti arrivano al TBF ad on rate inferiore al token rate
3. i pacchetti arrivano al TBF ad un rate superiore al token rate
Ogni pacchetto da trasmettere ha sempre a disposizione un token, quindi
”scivola via” insieme al gettone e viene trasmesso senza alcun ritardo. Ogni
pacchetto da trasmettere ha sempre a disposizione un token e quindi viene
trasmesso senza alcun ritardo, ma con una differenza: essendo il token rate
superiore al data rate, i token cominceranno ad accumularsi ed a riempire il
bucket, fino eventualmente a debordare (ricordiamo che i token che debordano vanno persi). I token accu mulati possono essere ancora utilizzati qualora
ci sia un burst (ossia molti pacchetti da trasmettere in breve tempo). La
presenza di tali token, infatti, può consentire anche un rate di trasmissione superiore al token rate per un periodo di tempo limitato fino a quando
almeno il bucket tornerà vuoto. Si noti comunque che un eventuale burst
è limitato e controllato come entità proprio dal bucket size. Maggiore è la
dimensione del bucket, maggiore il numero di token che si possono accumulare, maggiore l’entita del burst. Nello scenario 7, invece, a un certo punto
il secchio sarà vuoto. In questo caso, i pacchetti da trasmettere verranno
posti nella coda di trasmissione in attesa dell’arrivo di nuovi token. Qualora
la coda di trasmissione dovesse riempirsi, i successivi pacchetti verrebbero
scartati. Dalla descrizione dell’algoritmo alla base di TBF, si capisce come
questa qdisc possa essere utilizzata molto efficacemente per limitare il rate
di trasmissione e consentendo anche eventualmente burst di trasmissione di
entità configurabile. E’ opportuno inoltre precisare che nell’implementazione
di Linux, i token corrispondono a byte e non a pacchetti. Vediamo a questo
punto un esempio di configurazione di TBF in Linux. Per comodità i parametri disponibili per la configurazione di TBF sono consultabili con man
tc-tbf.
# tc qdisc add help Usage:
29
tc qdisc [ add 1 del 1 replace 1 change 1 show ]
dev STRING handle QHANDLE ] [ root 1 ingress 1 parent CLASSID ]
[ estimator INTERVAL TIME_CONSTANT ]
[ stab [ help 1 STAB OPTIONS] ]
[ [ ODISC_KIND ] [ help 1 OPTIONS ] ]
tc qdisc show [ dev STRING ] [ingress]
Where: ODISC_KIND : = [plb]fifo 1 tbf 1 prio 1 cbq 1 red 1
try tc qdisc add <desired ODISC_KIND> help STAB OPTIONS : =
try tc qdisc add stab help
Successivamente
tc qdisc add dev ethe root tbf rate 6. 5mbit burst Skb
\ latency nms peakrate 1mbit minburst 1546
Il comando in questione aggiunge al device eth0 una qdisc TBF come root
qdisc. Il parametro rate indica il token rate e questo rappresenta il valore a
cui stiamo limitando il traffico (si parla anche di shaping). In questo caso il
suo valore è stato fissato a 0.5 Mbit/s. Il parametro burst (talora indicato
con il nome buffer o anche maxburst) rappresenta il bucket size espresso
in byte. Si tenga presente che shaping rate maggiori richiedono un buffer
più grande. Indicativamente, si assuma che per shaping rate di 10Mbit/s, è
necessario disporre di un buffer di dimensione almeno pari a 10 Kbyte se si
vuole raggiungere un rate desiderato in quanto, se il buffer è troppo piccolo,
si corre rischio che i pacchetti possano essere scartati. Il suo valore, nel
nostro caso, è fissato a 5Kbyte. Per quanto riguarda i parametri latency e
limit 1 il discorso è più complesso. Infatti, tali parametri servono a limitare
H numero di byte che possono essere accodati nell’attesa che nuovi token
diventino disponibili.
# tc qdisc add dev ethe root tbf rate lmbit
\ burst 20kb limit 30kb
È impostato il bucket size a 20Kbyte. Il parametro limit dice che, in attesa di nuovi token, la coda TBF può ospitare al massimo 30Kbyte. Questo
significa che, a regime, potranno essere presenti nella coda (limit - burst)
byte ossia 10Kbyte che quindi sperimenteranno una latenza dovuta alla dimensione della coda e del rate di trasmissione. È possibile, in alternativa,
impostare il parametro latency che indica il tempo massimo di permanenza
in coda di un pacchetto. Il calcolo tiene conto del bucket size, del rate ed
eventualmente del peakrate (se impostato); è possibile stimare latency con
la formula (limit - burst) / rate. Qualora si desiderino limitare eventuali
30
picchi di trasmissione raggiungibili nei burst, si possono usare peakrate e
minburst. Il primo rappresenta il massimo rate di trasmissione raggiungibile
in presenza di burst ed e utile per limitarne la dimensione soprattutto se il
bucket size e grande. Nel nostro caso esso impostato a 1Mbit/s. Il parametro minburst specifica la dimensione del peakrate bucket che dovrebbe essere
sempre settato all’MTU dell’interfaccia. Si veda la pagina man per ulteriori
dettagli. A cosa serve questa configurazione?Se si dispone di un dispositivo di rete con una coda di grandi dimensioni (ad esempio un modem DSL)
è facile rendersi conto che il traffico in upload può distruggere totalmente
l’interattività, perchè tale traffico tende a riempire la coda del modem (che
è spesso enorme in quanto questo aiuta a conseguire buon throughput in
upload). Se la coda del modem non fosse troppo grande, i pacchetti relativi
ad applicazioni interattive non dovrebbero aspettare molto tempo per essere
trasmessi e l’interattività non ne sarebbe danneggiata. Con questa configurazione si sposta la coda nel kernel di Linux, dove è possibile controllarla al
meglio. Quindi impostiamo il rate alla velocita di uplink e salvaguardiamo
l’interattività delle nostre applicazioni.
3.4.6
Stochastic fairness queueing discipline
Stochastic Fairness Queueing (SFQ) una semplice implementazione di un
algoritmo di accodamento estremamente fair (corretto, onesto). E’ meno accurato rispetto ad altri, ma richiede anche minori sforzi per la configurazione.
Si basa sul concetto di flusso, che corrisponde in gran parte a una sessione
TCP o a uno stream UDP. Il traffico viene suddiviso in un numero abbastanza grande di code FIFO, una per ogni flusso e, successivamente, inviato
secondo una logica round robin, ossia dando ad ogni sessione la possibilità di
inviare i dati a sua volta a rotazione. Questo porta ad un comportamento,
appunto fair (corretto), non permettendo ad alcun singolo flusso di bloccare
gli altri. SFQ si chiama stocastico perchè, in realtà, esso non assegna una
coda per ogni sessione, ma divide il traffico in un numero limitato di code
con un algoritmo di hashing. A causa di una potenziale collisione tra hash,
sessioni multiple potrebbero finire nella stessa e questo potrebbe dimezzare
la possibilità di ogni sessione di inviare un pacchetto. Per evitare che ciò
accada, SRI cambia il suo algoritmo di hashing molto spesso in modo che,
qualora due sessioni vadano in collisione, che possa accadere per un intervallo
di tempo molto limitato. E’ importante sottolineare che SFQ è estremamente utile soltanto nel caso in cui la coda dell’interfaccia di uscita sia piena
al limite delle sue capacità. In tal caso, esso è infatti in grado di garantire
fairness a tutte le sessioni presenti. Qualora invece la coda fosse scarica,
l’applicazione di SFQ non avrà grossi effetti.
31
3.4.7
Prio queueing discipline
La PRIO qdisc non fa shaping, ma si limita soltanto a suddividere traffico
in maniera motto simile a quanto fa pfifo fast con la differenza che essa non
utilizza una semplice FIFO per ogni classe di traffico. Quando un pacchetto
viene accodato alla qdisc PRIO, viene identificata la classe di appartenenza
sulla base dei filtri specificati. Per impostazione predefinita, vengono create
tre classi che di default contengono delle FIFO qdisc pure senza alcuna struttura interna, ma è possibile sostituirle con qualsiasi qdisc. Ogni volta che un
pacchetto deve essere trasmesso, si prova prima con classe 1 mentre le classi superiori sono utilizzate solo se tutte quelle inferiori sono vuote. Questa
qdisc è molto utile nel caso in cui si voglia dare priorità a determinati tipi
di traffico senza utilizzare del flag TOS, ma sfruttando a pieno la potenza
dei filtri. È inoltre possibile aggiungere un’altra qdisc alle classi predefinite,
mentre pfifo fast è limitato a qdisc FIFO come visto in precedenza.
Figura 8: Scenario possibile
tc qdisc add dev ethe root handle 1:
prio
Questo comando crea le classi 1: 1, 1: 2, 1: 3 che, per default, vengono
associate rispettivamente alle bande 0, 1 e 2, ma il numero di bande (e di
32
classi) è modificabile mediante il parametro bands. In tal caso, andrà modificata anche la priomap, che ormai conosciamo bene. Leggendo la pagina
man di tc-prio(8) si nota che le bande 0, 1 e 2 hanno di default lo stesso
comportamento delle bande nella pfifo fast. Alla luce di questa osservazione,
si capisce che it traffic Filler e Bulk verrà gestito dalla qdisc 30: , it traffico
Best-Effort ed Interactive Bulk verrà gestito dalla qdisc 20: mentre il traffico
Interactive verrà gestito dalla qdisc 10: . Anche pfifo fast andrebbe considerata classfull in quanto dotata di una suddivisione interna in classi, ma con
una differenza sostanziale: pfifo fast non è configurabile e quindi le bande
sono hardcoded. Per quanto riguarda PRIO, non solo è possibile specificare
un numero di classi (e bande) diverso da 3, ma è anche possibile specificare con estrema granularità che tipologia di traffico finirà in ciascuna classe
(mediante i filtri) e quale sarà il loro comportamento (mediante le qdisc).
[11]
3.5
Gestione della qualità di servizio
I requisiti di QoS necessari sono specificati nel momento in cui si richiede
l’accesso all’oggetto remoto. Alcuni di essi, come la cifratura o l’autenticazione, possono stabilirsi da estremo ad estremo, ma altri come la larghezza
d banda devono seguire tutta la rotta. Listiamo ora, alcuni parametri che
sono stati considerati:
• Invocazioni oneway/twoway
• Conferma di ricezione messaggi
• Ordinamento dei messaggi
• Autenticazione
• Autorizzazione
• Latenza massima
• Larghezza di banda minima
Il client deve anche notificare quando non è possibile soddisfare nessuno
di questi requisiti. Richidere quindi una politica ristretta può implicare
l’impossibilità di terminare la comunicazione.
33
3.6
Invio messaggi
IDM è concepito come un protocollo di rete, in modo che si affrontino gli
stessi problemi di tutti i protocolli di rete, con la differenza di risolverli in un
livello di astrazione differente: sopra il middleware, al di sopra del livello di
collegamento. Un problema di base in un protocollo di rete è la descrizione
dei meccanismi di invio di messaggi, sia negli host vicini che in quelli più
esterni. Sono stati elaborati due modelli di invio di messaggi: l’invio diretto
e l’invio indiretto.
3.6.1
Invio diretto
La ricezione diretta è il modo più semplice per ricevere messaggi dal client
al router o all’oggetto invocato. Per realizzare tutto ciò, è necessario selezionare gli EP dei quali si dispone e l’adattatore al quale appartiene l’oggetto
destinato e poi comprovare se l’host cliente è in grado di raggiungere qualche EP compatibile. Una rete IDM è un congiunto di oggetti direttamente
raggiungibili per mezzo di un tipo di EP. Non c’è una relazione tra la rete
IDM e la rete fisica alla quale è connesso l’host. Nello scenario più semplice i
router IDM sono posti solo ai margini delle reti, che tra loro hanno tencologie
e protocolli incompatibili.
Figura 9: Scenario possibile
Ciò proporziona la connettività all’interno di tutti gli oggetti e dei client
IDM, però ci sono altri usi possibili, per esempio in una rete MANET tutti
i nodi sono router IDM.
Per conoscere gli EP i router, come detto in precedenza, sfruttano il
protocollo ALP. È un protocollo generico di scoperta di oggetti vicini, però
34
assume che gli attori siano oggetti accessibili mediante IDM. Ogni nodo della
rete IDM deve disporre di un demone locale chiamato Servizio ALP, il quale
implementi l’interfaccia ALP: : Locator. Mediante l’invocazione del metodo
lookup e l’identità del nodo destinatario, il nodo client ottiene un proxy,
che permette realizzare invocazioni direttamente sopra l’oggetto remoto. Da
notare che è possibile localizzare solo EP di adattatori vicini, quindi della
stessa rete IDM.
Esistono varie forme per implementare il servizio ALP. Per la creazione
del prototipo ne sono state considerate due.
• Un servizio distribuito che permette a qualsiasi host di interrogare il suo
segmento di rete sull’esistenza di un oggetto concreto. Questo servizio
usa i meccanismi multicast e broadcast. Il servizio in ogni nodo deve
attendere i messaggi request() e deve rispondere attraverso i messaggi
reply(). Questi messaggi appartengono all’interfaccia IDM: : ALP: :
Lookup.
• Utilizzare le caratterische di indirezione incorporate nel middleware.
In ICE la indirezione degli oggetti si consegue attraverso un servizio
chiamato Ice Locator. IDM dispone di un adattatore per utilizzare
IceGrid: : Locator con un sovraccarico minimo. Ciò risulta molto utile
nei segmenti grandi di reti virtuali e quando gli host dispongono di
sufficienti risorse di calcolo per eseguire un nodo IceGrid. Ovviamente
ci sono degli svantaggi rispetto al modello precedente: tutti gli host
devono conoscere dal proprio avvio, la referenza remota di almeno una
delle risposte del Locator e verificare che ci sia un EP compatibile con
essa.
In ambo i casi, gli host che desiderano interagire con gli oggetti devono
essere registrati nel servizio ALP affinchè possano essere raggiunti per altri
nodi, indipendentemente se siano stati implementati attraverso IceGrid Locator o per il proprio host. Entrambi i meccanismi possono coesistere nella
stessa rete.
3.6.2
Invio indiretto
Si utilizza la ricezione indiretta per quegli oggetti che non sono raggiungibili
attraverso nessun EP del client. In questi casi è necessaria la mediazione di
almeno un router. Da notare che ci può essere un caso speciale. Pur esistendo
accessibilità diretta per mezza di un EP, è possibile che le restrizioni QoS
impediscono il suo uso e lo obbligano ad utilizzare uno o vari router per
arrivare alla destinazione.
35
Figura 10: Il nodo in IDM
36
Router
Router
Router
Router
Row NetA
Row NetA
Row NetB
Row
*
Subnet1
Subnet2
*
*
=
tcp
=
tcp
= udp, tcp
=
tcp
*
*
NetA. Subnet1. R2
NetA. Subnet2. R1
Tabella 1: Tabella di routing
Nell’immagine è illustrato il concetto di nodo secondo il protocollo IDM.
Un nodo non è visto(come si è abituati a concepirlo) come un semplice host
di rete, ma come un insieme di oggetti che interagiscono tra di loro. Ad
esempio il nodo stesso fa da client, proxy, router ed EP.
3.7
Routing
Tutti i nodi che formano una parte di una inter-rete IDM richiedono una
tabella di routing che determini se la ricezione dei messaggi possa realizzarsi
in forma diretta, oppure se necessita un router. Anche questo è un oggetto
convenzionale distribuito, simile ai nodi server;la differenza principale è che
può accettare e redirigere messaggi che non sono diretti direttamento verso
se stesso. Nella figura seguente è mostrato un tipico esempio di tabella di
routing. Sono stati usati degli identificatori testuali per rendere migliore la
leggibilità:
• Gli oggetti con prefisso NetA. Subnet1 oppure NetA. Subnet2 sono
raggiungibili direttamente(ricezione diretta)
• Gli oggetti con prefisso NetB sono raggiungibili attraverso il router
NetA. Subnet1. R2
• I restanti oggetti devono usare il router NetA. Subnet2. R3
Ogni riga della tabella di routing include una lista di tipi di EP che si
possono utilizzare per connettersi ad oggetti della rete. Questo perchè ogni
rete IDM è costituita da una o più reti fisiche compatibili, che usano lo stesso
protocollo. Per utilizzare il meccanismo ALP di una rete IDM è necessario
conoscere almeno un tipo di EP compatibile con la rete stessa.
3.7.1
Routing dinamico
Dato che i router sono oggetti distribuiti, risulta relativamente semplice implementare algoritmi di routing dinamico di qualsiasi tipo. Ogni messaggio
37
del protocollo di routing si definisce come un metodo dell’oggetto nell’interfaccia specificata. Per supportare un nuovo protocollo di routing è sufficiente
implementare l’interfaccia corrispondente. Per questo è molto semplice e
veloce implementare nuovi protocolli di routing dinamico nello stesso nodo.
3.7.2
Gestione della rete
Visto che i router e i server sono oggetti convenzionali distribuiti, è possible utilizzare i servizi standard per interfacciarli col middleware. Per questo si conseguono molte funzionalità, alcune tipiche di una piùttaforma di
gestione di rete, però con sovraccarico minimo e totalmente integrato nel
funzionamento della propria rete. Le funzionalità sono le seguenti:
Pianificazione molto vantaggiosa poiché è possibile disegnare la topologia
della rete, analizzare le necessità e i requisiti della rete e gli utenti, quantificare i costi e il mantenimento, tuttò ciò prima di disporre fisicamente
degli host di rete e di tutti gli strumenti che la compongono.
Monitorizzazione/contabilità È possibile valutare il rendimento del sistema in conseguenza delle prestazioni, larghezza d banda disponibile/consumido, latenza e molte altre variabili di un modo sencillo in
ogni router e server della rete.
Gestione della configurazione Quando si dispone di nuovi versioni del
software, può essere comunicato ai router, includendo implementazioni
o migliorie dei protocolli di routing. Anche è sencillo aggiungere interfacce di amministrazione, definizione di priorità, politiche di sicurezza,
etc.
3.8
Integrazione con il middleware
Uno degli obiettivi prioritari è l’integrazione del meccanismo di routing con il
middleware. Per il programmatore, le differenze tra l’uso di un oggetto IDM
e un oggetto distribuito convenzionale devono essere minime. Per questo
motivo, il reinvio dei messaggi utilizza unicamente i router e non comporta
l’interazione di questo, con i client e gli oggetti. Quando un client desidera
fare una invocazione ad un oggetto remoto IDM, utilizza una classe speciale per ottenere un proxy al suo router locale(situato nello stesso nodo del
client). Il client realizza l’invocazione usando questo proxy come se si trattasse realmente dell’oggetto remoto. In seguito si illustra in dettaglio il processo
38
Figura 11: Invocazione dell’oggetto remoto
completo per realizzare una invocazione ad un oggetto IDM remoto coinvolgendo alm meno un router intermedio, potenzialmente il client e l’oggetto
destinatario possono incontrarsi in una rete tecnologicamente distinta.
Il router locale può ricevere invocazioni destinate a qualsiasi oggetto. Se
l’identità destinataria coincide con la propria, processa il messaggio;in caso
contrario, reinvia il messaggio verso il destinatario. Quando un router riceve
una invocazione di un client locale, realizza i seguenti passi:
1. Se il tipo di messaggio richiede una risposta, alloca nel suo spazio di memoria un oggetto di callback per poter ricevere la risposta. La referenza
a questo oggetto è quella che nell’header del pacchetto è denominata
src.
2. Costruisce il messaggio secondo il formato della struttura ForwardRawMsg o ForwardUserMsg a seconda del tipo dell’invocazione fatta dal
client.
3. Consulta la sua tabella di routing e determina l’identità del seguente
router e degli EP che dispone.
4. Filtra gli EP secondo l’informazione QoS di ognuno, in relazione al
ToS al quale corrisponde l’invocazione precedente del client. Se non
ne incontra nessuno, ritorna al client un’eccezione e interrompe la
comunicazione.
5. Utilizza il servizio ALP per determinare l’informazione di instradamento del protocollo inferiore al quale corrisponde.
6. Utilizza l’EP per inviare il messaggio forward al router successivo.
39
Il router intermedio è quello che riceve i messaggi forward provenienti
da qualunque altro router. In questo caso il procedimento di lavoro include
unicamente i punti 3 e 6 .
Il router finale deve incaricarsi di inviare l’invocazione direttamente agli
oggetti destinati. Nel seguente modo:
1. Riceve un messaggio forward e confronta la sua tabella di routing per
determinare se il destinatario è l’oggetto remoto al quale va spedito il
messaggio.
2. Mediante ALP ottiene gli EP dell’oggetto destinatario. Se nessuno di
essi fosse compatibile con i requisiti QoS, allora si genera una eccezione
rivolta all’oggetto src.
3. A partire dal contenuto del messaggio forward, si crea un messaggio di
invocazione convenzionale.
4. Esegue l’invocazione direttamente sul client. Può essere sincrona oppure no, dipende dal tipo di messaggio e dall’EP utilizzato.
5. Se la invocazione è sincrona e si ha la risposta, il router procede con gli
stessi passi che si sono descritti per il router locale, però utilizzando la
referenza src contenuta nel messaggio forward.
Quando la risposta arriva all’oggetto temporaneo creato dal router locale,
questo crea una risposta secondo il formato del protocollo inter-ORB e lo
invia al client per la stessa connessione che è stata stabilita per realizzare
l’invocazione. Il client è stato bloccato durante tutto il processo a meno
che utilizzi meccanismi AMI proporzionati per il middleware. I qualificativi
locale, finale, intermedio non determinano i tipi di router, bensı̀ ruoli. Tutti i
router possono assumere qualsiasi di questi ruoli. La distinzione fatta è a solo
scopo di semplificazione della leggibilità dello schema proposto. È da notare
che a differenza di CMR, si assume che tutto il nodo che contiene i client
ha un router locale, il quale è l’unico che riceve le invocazione direttamente
dai client. Cioè, un client non può effettuare invocazioni convenzionali(quindi
non IDM)su router che sono presenti al di fuori del suo nodo. Dunque questo
implica un salto in più, migliora la scalabilità del sistema dato che i router
devono immagazzinare oggetti callback per i loro client. In questo modo,
è molto semplice dimensionare le necessità di memoria e processamento del
nodo, e i router senza client ne oggetti possono essere molto più semplici
poiché sono progettati per essere esenti da questo compito.
40
Latenza
Socket ICE
(Twoway)
Local
23
31
Remote(direct)
268
274
Remote(1 IP hop)
312
360
Remote(1 IDM hop) N/A N/A
(Oneway)
Local(oneway)
Remote(direct)
Remote(1 IDM hop)
8
76
N/A
13
98
N/A
IDM
32
278
384
2537
15
112
1049
Tabella 2: Latenza su Socket, ICE, IDM
3.8.1
Prototipi e risultati
Sono stati sviluppati dei prototipi per illustrare le potenzialità di IDM. I
risultati del prototipo sono stati comparati con Ice e i socket TCP/UDP.
I seguenti risultati sono stati ottenuti su un calcolatore Intel Core Duo 2.
33Ghz, 100Mbps Ethernet NIC e sistema operativo Debian GNU/Linux. Il
codice è stato scritto con ZeroC Ice versione 3. 3 e compilato con GNU GCC
versione 4. 3 Lo scopo di questi test è provare che le performance di IDM
non si discostano molto dai risultati attesi.
41
Throughput
Socket ICE
IDM
Local
292
365
485
Remote(direct)
42394 43051 43276
Remote(1 IDM hop)
N/A
N/A 98291
Remote(2 IDM hops) N/A
N/A 101265
Tabella 3: Throughput su Socket, ICE, IDM
È da notare che tutti gli EP usati nel test usano TCP. Quando saranno
disponibili maggiori EP idonei, sarà possibile ottenere risultati migliori di
TPC e di ICE in molti casi. Ad esempio, con le adeguate applicazioni e
requisiti sarà possibile spedire in multicast uno stream multimediale in una
LAN.
Latenza Questo test misura il tempo necessario per completare una invocazione ad un oggetto remoto, mandando un pacchetto molto piccolo o
null. La tabella 1 mostra le statistiche per 100000 ice ping(). Questo è
il messaggio più semplice che possa essere implementato in ICE, poichè
non ha argomenti e non ritorna valori.
Throughput Il test misura l’efficienza del protocollo nella trasmissione dei
dati raw. La tabella 2 mostra le statistiche ove vengono inviati 500KB
di dati raw in un loop di 1000 iterazioni. Tutte le invocazioni sono
twoway.
API Uno degli scopi principali è quello di rendere IDM come una libreria
di funzioni avanzate, che offrono una molteplicità di servizi in maniera
chiara e trasparente per l’utente.
Dal punto di vista del programmatore, l’implementazione lato server è quasi
identica ad una qualsiasi implementazione di un server ICE.
Viene usato un oggetto speciale chiamato IDM: : Adapter il quale è un
decoratore dello standard Ice ObjectAdapter. Quando viene creato, sarà automaticamente registrato nei servizi disponibili di ALP. Per quanto riguarda
il client, richiede varie modifiche rispetto all’implementazione del modello
convenzionale ICE. In primis, necessita la creazione di un socket quindi lo
si invoca attraverso IDM: : Socket e successivamente il metodo plug() che
prende un oggetto identificatore e restituisce un proxy per effettuare invocazioni specifiche su un oggetto remoto. Codesta classe è responsabile per il
looking up dei nodi e usa il servizio ALP per raggiungere il nodo ultimo dove
è instanziato l’oggetto remoto.
42
4
I simulatori, la simulazione ed Omnet
4.1
Simulazione ed emulazione
Per simulazione si intende un modello della realtà, mediante il quale è possibile valutare e prevedere l’evoluzione dinamica di eventi in un sistema sotto
determinate condizioni settate dall’utilizzatore, lo scopo è quello di fare un’analisi del funzionamento del sistema, poiché spesso nella realtà non si ha la
disponibilità di risorse sufficienti per effettuare delle valutazioni. La difficoltà
nel realizzare un modello di simulazione risiede nella capacità del progettista, di modellare quanto più fedelmente il sistema reale. Per realizzare un
modello di simulazione corretto e funzionante bisogna seguire alcune linee
guida :
• definire obiettivi e problematiche mediante un’analisi del problema
• definire un modello concettuale del sistema che bisogna simulare,
definendo il comportamento del modello;
• validazione del modello concettuale
• definizione dei parametri di ingresso del modello
• calibrazione e valutazione
• definizione di una campagna di test definendo diversi scenari di simulazione e valutare i diversi scenari al variare dei tempi di esecuzione per
poi valutare i parametri di uscita
Il modello realizzato bisogna implementarlo mediante un simulatore,
grazie al quale le entità modellate sono implementate assieme alle interazioni
fra esse definite, consentendo l’esecuzione di simulazioni dalle quali estrarre
i dati di interesse per l’analista. La simulazione può essere ad eventi discreti oppure tempo continuo. Nel caso ad eventi discreti è rappresentato
lo stato del sistema in corrispondenza degli eventi da rilevare, mediante uno
schedulatore che consente agli eventi di essere eseguiti ordinatamente, senza simulare intervalli di tempo che intercorrono tra due eventi, riducendo la
complessità computazionale. Nel caso tempo continuo lo stato del sistema è
rappresentato ad ogni istante, assicurando il sincronismo tra gli eventi, ma
rappresentando anche istanti di tempo poco significativi, facendo crescere
quindi la complessità computazionale.
L’emulazione invece consiste nella capacità di eseguire (mediante un software), codice realizzato per un determinato ambiente (hardware o software)
43
in un ambiente diverso, riproducendo virtualmente l’ambiente che è stato
usato per eseguire quel codice. Il livello di astrazione è quindi basso. L’emulazione può essere realizzata in due modalità: ricompilando il codice sorgente
(in linguaggio di programmazione di alto livello), ottenendo il file binario
per lambiente ospitante, oppure interpretando il codice del programma in
linguaggio macchina, approccio più efficace ma che richiede una maggiore
complessità computazionale.
4.2
Classificazione dei simulatori
I simulatori disponibili sul mercato sono molteplici, ognuno con particolari
caratteristiche, è necessario analizzare e capire le peculiarità di ognuno di
essi, scegliendo quello che meglio si adatta alle esigenze del modello che si
intende realizzare. Una prima distinzione è possibile classificando i simulatori in comportamentali ed orientati agli algoritmi. I primi consentono la
simulazione su ogni nodo della rete di tutti gli strati dello stack protocollare, al fine di studiare il traffico di messaggi sulla rete ed il comportamento
complessivo del modello, rivolgendo meno attenzione a quello che succede a
livello applicativo ed agli algoritmi di instradamento. Lutilizzo di questo tipo
di simulatori consiste nella costruzione di nodi della rete, combinando moduli software della libreria del simulatore, loutput della simulazione contiene
gli eventi significativi della simulazione. La seconda categoria di simulatori presenta un maggiore livello di astrazione, lo scopo è quello di simulare
lesecuzione di un algoritmo su ogni nodo, la simulazione di come avviene
la trasmissione è generalmente poco realistica ed affidabile. Un’altra distinzione interessa la modalità di funzionamento dei simulatori. Essi possono
essere orientati agli eventi ed ai processi. Nei simulatori orientati agli eventi
(cambiamento dello stato del sistema in un determinato istante di tempo),
il tempo simulato avanza al verificarsi del prossimo evento. Nei simulatori
orientati ai processi (istanza di un programma in esecuzione che emula il
flusso di un’entità del sistema da simulare), il tempo di simulazione avanza
al processo successivo, quando il flusso di esecuzione del processo corrente è
bloccato, ritardato o terminato. Per operare la scelta del simulatore, sono
state considerate un insieme di caratteristiche generali:
tipo di licenza indica se il simulatore è free software o è disponibile solo in
versione commerciale
linguaggio dei componenti dei nodi indica il linguaggio di programmazione usato per implementare i componenti dei nodi
44
tipo di simulazione indica se la simulazione è ad eventi discreti o tempo
continuo
emulazione indica se è supportata lemulazione
simulazione parallela indica se è presente un supporto allesecuzione parallela in multithreading e se è consentito allutente, configurare tale
funzionalità mediante la gestione dei thread
Una classificazione di maggior dettaglio riguarda le caratteristiche qualitàtive, per illustrare in dettaglio il modo in cui è condotta la simulazione.
Le caratteristiche qualitàtive sono:
interfaccia grafica indica se è presente unadeguata interfaccia grafica per
lavvio, lesecuzione e la terminazione della simulazione, indispensabile
per studiare il comportamento del sistema
estensibilità e modificabilità è la possibilità di estendere e modificare i
moduli del simulatore specializzando le funzionalità in base alle proprie
esigenze di modellazione
modularità è la possibilità di comporre tra loro le entità della simulazione,
per formare entità più generali
tipologia di guasti indica il tipo di guasto che lutente può simulare durante la simulazione
L’attenzione è stata rivolta alla perdita dei pacchetti ed alla corruzione dei bit
dei pacchetti; statistiche finali: indica la possibilità di produrre agevolmente
statistiche finali. [14]
4.3
I simulatori adottati
Durante lo svolgimento del lavoro, sono stati presi in esame due simulatori
in particolare: Ns-2 ed Omnet. La scelta finale è ricaduta sul secondo poiché
possiede maggiori requisiti e funzionalità richieste, per una simulazione. Inoltre rispetto ad Ns-2 possiede una quantità di tool maggiore, soprattutto dal
punto di vista grafico, che facilitano e velocizzano la scrittura del codice. Di
seguito verràno comparati.
45
4.3.1
Ns-2
Ns-2 è un simulatore comportamentale, ad eventi, scritto in C++, con interfaccia utente in Otcl per configurare le simulazioni, nasce per studiare il
traffico di messaggi sulla rete. E’ tra i simulatori di reti più usati per l’eterogeneità d’uso e la varietà di modelli offerti, ma manca una documentazione
rigorosa ed organizzata. Ns-2 è open-source e non supporta nè l’esecuzione parallela, nè l’emulazione. Non c’è uninterfaccia grafica per impostare
agevolmente lambiente di simulazione, inoltre l’utilizzo del simulatore non è
semplice. Gli output sono prodotti in diversi formati. Un’utility che consente di seguire la simulazione graficamente è la Network Animator, essa legge
il file di tracing degli eventi e lo visualizza. Presenta vari modelli per rappresentare i link, consentendo di impostare caratteristiche della topologia di
rete come ampiezza di banda, ritardo di propagazione, perdita di pacchetti.
NS-2 presenta un’ampiù scelta di algoritmi di routing. Il comportamento di
un nodo è specificato mediante lo script Otcl, specificando gli oggetti che lo
compongono ed il modo in cui sono collegati. La scrittura di moduli C++
offre lopportunità di implementare nuove caratteristiche. Poco funzionali le
API offerte, non c’è una netta distinzione tra librerie di simulazione e modelli implementati. Non produce dati statistici in output, ma l’utente può
inserire nello script OTCL operazioni per il prelievo di dati di interesse. Tra
i motivi che lo rendono poco consono alle nostre esigenze, si segnala l’assenza
di modularità, l’assenza di un’interfaccia grafica, statistiche finali difficili da
gestire. [8]
4.3.2
Omnet
OMNeT++ [2] è un simulatore ad eventi discreti, non commerciale, scritto
in C++, è dotato di uninterfaccia grafica di alto livello, è classificato fra
i simulatori comportamentali. Esso supporta lesecuzione parallela, ma non
lemulazione. Il simulatore è dotato di un tool (NED) per la definizione della
topologia e delle caratteristiche della rete, offrendo sia un supporto grafico
che testuale. Le entità definite sono dei moduli che possono estendere le proprie funzionalità mediante codice C++, ogni modulo può contenere al suo
interno sottomoduli. Un file di configurazione consente di settare i parametri iniziali del modello. Consente una modellazione dei guasti introducendo
soltanto la corruzione dei pacchetti. Al termine della simulazione fornisce
un servizio di base di statistiche finali, con la possibilità da parte dellutente di estenderle. Diversi framework consentono di utilizzare OMNeT++ in
svariati domini applicativi, quello che risponde alle esigenze del modello da
simulare è INET che modella diversi stack protocollari, fra i quali UDP/IP.
46
Da segnalare inoltre, che Omnet è una versione custom di Eclipse, il noto
IDE per svariati linguaggi di programmazione tra cui Java, C e C++.
4.4
Scelta di omnet
La scelta di OMNeT++ e del suo framework INET (implementa strati protocollari per l’interconnessione di calcolatori su rete) tra la vastità di simulatori
presenti sul mercato, è stata guidata dalla combinazione di molteplici esigenze. È un simulatore comportamentale, i moduli sono facilmente riusabili ed
assemblabili fra loro, consente di visualizzare i pacchetti sulla rete ed il loro
contenuto durante l’esecuzione e come variano i parametri all’evolvere dell’esecuzione, inoltre, la presenza del framework INET offre un buon supporto
per la gestione ed il settaggio della topologia della rete anche per reti di notevoli dimensioni. L’unico limite è rappresentato dalla memoria del calcolatore
in uso. Inoltre, esso offre funzionalità per supportare l’instradamento. Queste funzionalità fornite dal simulatore sono comunque estendibili dall’utente
che può imporre delle varianti al comportamento di default, potendo introdurre algoritmi di instradamento alternativi, o settare nuove route scrivendo
direttamente gli hop per il percorso da seguire mediante appositi file.
4.5
Il simulatore OMNeT++
OMNeT++ (Objective Modular Network Testbed in C++) è un simulatore
di rete modulare component-oriented ad eventi discreti basato sul linguaggio
C++ ed open source che nasce nel 2003. Tale simulatore è modulare perché
ogni entità presente o da realizzare è rappresentata mediante un modulo e
tutti i moduli sono organizzati gerarchicamente, comunicano mediante scambio di messaggi che viaggiano attraverso porte e connessioni. Componentoriented indica che larchitettura del simulatore è costituita da componenti
che interagendo tra loro, consentono lesecuzione del programma di simulazione. Un sistema ad eventi discreti è un sistema in cui lo stato cambia quando
accade un evento ad istanze discrete nel tempo. Il simulatore può essere
utilizzato per:
• modellazione del traffico nelle reti di telecomunicazioni
• modellazione di protocolli
• modellazione di code nelle reti
• modellazione di sistemi multiprocessore
• modellazione di sistemi distribuiti
47
• validazione di architetture hardware
• valutazione delle prestazioni di sistemi software complessi
• modellazione di sistemi rappresentabili con eventi discreti
L’innovazione principale di OMNeT++ è quella di essere componentoriented, facilita luso di modelli strutturati e riusabili, supporta l’esecuzione
parallela (in sistemi multiprocessore), gli ambienti di esecuzione supportano
la simulazione interattiva. Questo simulatore fornisce per lo sviluppo ed
il debugging delle topologie da simulare, un ambiente grafico abbastanza
intuitivo (GNED), il quale contiene anche una rappresentazione testuale della
topologia del modello, uninterfaccia grafica (Tkenv) per lesecuzione della
simulazione, mediante questa interfaccia è possibile visionare i moduli del
modello e vedere levolvere dello stato della simulazione, uninterfaccia da linea
di comando (Cmdenv), tool grafici (PLOVE e SCALARS) per visualizzare il
contenuto degli output della simulazione scritti su appositi file dati generati
automaticamente, ma estendibili dallutente.
Figura 12: File Omnet++
48
OMNeT++ non è un simulatore commerciale, è rivolto principalmente alluso accademico ed alla ricerca, la sua versione commerciale è OMNEST. Fra
i simulatori esistenti, OPNET rappresenta il migliore simulatore sul mercato,
ma è commerciale. I simulatori commerciali offrono una vasta gamma di modelli di protocolli, mentre quelli non commerciali offrono una minore scelta.
Un limite principale di OMNeT++ è proprio la mancanza di una vasta scelta
di protocolli, (ne esistono diversi, ma in scarso numero), limite dovuto al fatto che è un simulatore nato da poco; con la diffusione delle community questo
limite dovrebbe essere superato in pochi anni. Il livello di astrazione è molto
elevato, ha una notevole facilità d’uso per l’utente (interfaccia user-friendly),
la documentazione offerta e le prestazioni durante l’esecuzione sono di livello
eccellente. OMNeT++ è disponibile sia per macchine Windows che Linux, la
versione per Linux è la stessa per distribuzioni diverse, inoltre la portabilità
è garantita, previa modifica dei makefile per la simulazione da effettuare. Un
modello OMNeT++ è costituito da moduli organizzati gerarchicamente e caratterizzati attraverso parametri, i moduli comunicano mediante scambio di
messaggi (che possono anche contenere strutture dati complesse) attraverso
i canali, inoltrando i messaggi direttamente verso una destinazione o lungo
un percorso, usando porte e connessioni. Le connessioni possono essere caratterizzate da tre parametri: ritardo di propagazione, tasso di errore per
bit, tasso di trasmissione. Gli oggetti della simulazione sono rappresentati
da classi C++, le principali sono quelle per moduli, porte, connessioni, parametri, messaggi, container, raccolta dati, stima statistica e distribuzione.
Un modello OMNeT++ si compone di: file per la descrizione della topologia
(. ned), file per la definizione dei messaggi (. msg), tradotti in codice C++
mediante compilazione, moduli del codice sorgente (. h/. cc) che devono essere compilati e collegati con il simulation kernel, esso contiene il codice per
gestire la simulazione, le classi di libreria (. a/. lib) e le interfacce utente (.
a/. lib) per formare il programma di simulazione eseguibile. Il file eseguibile
necessita del file di configurazione omnetpp. ini che contiene informazioni di
controllo, esso è utilizzato per costruire un file binario per consentire lesecuzione anche su macchine sulle quali non è installato OMNeT++. Loutput
della simulazione è scritto in file dati: output scalar e vector file (vector
file è opzionale), visualizzabili anche graficamente con gli strumenti forniti
da OMNeT++ o importabili da software diffusi sul mercato come MatLab,
Microsoft Excel, OpenOffice calc.
4.5.1
Il linguaggio NED
Il linguaggio NED specifica la topologia di un modello, facilitando la descrizione modulare di una rete ed offre la possibilità di costruire una rete con
49
sottomoduli innestati. I possibili componenti di un modello NED sono:
direttive import, usate per importare dichiarazioni da un
altro file per la descrizione di
una rete:
import ’’ethernet’’;
definizioni dei canali, specificano un tipo di connessione,
il nome del canale può essere usato per la creazione di
connessioni, gli attributi possono essere assegnati
anche nel corpo della dichiarazione del canale:
channel ChannelName
//. . .
endchannel
simple module, blocco di base per la costruzione dei
moduli, è definito dalla
dichiarazione di parametri e porte:
simple SimpleModuleName
parameters:
//. . .
gates:
//. . .
endsimple
compound module, moduli composti di uno o più sottomoduli,
che possono avere porti e parametri:
module CompoundModule
parameters:
//. . .
gates:
//. . .
submodules:
//. . .
connections:
//. . .
endmodule
definizione della rete, dichiara un modello di simulazione
come una istanza di un tipo
di modulo definito precedentemente:
network wirelessLAN: WirelessLAN
parameters:
numUsers=10,
50
httpTraffic=true,
ftpTraffic=true,
distanceFromHub=truncnormal(100, 60);
endnetwork
4.5.2
Il sistema di simulazione ad eventi discreti
OMNeT++ utilizza una struttura dati per mantenere linsieme degli eventi
futuri e prende il nome di FES (Future Event Set) o FEL (Future Event
List) implementato in OMNeT++ con lheap binario. I simple module sono
i componenti attivi nel modello perché in essi accadono gli eventi, essi creano, inviano, ricevono, memorizzano, modificano, schedulano e distruggono i
messaggi, sono programmati in C++ come sottoclassi di cSimpleModule con
funzioni membro virtuali ridefinite per definire le caratteristiche, tale codice
genera e reagisce agli eventi, usano OMNeT++ class library e le funzioni
membro sono le seguenti:
• void initialize()
• void handleMessage(cMessage *msg)
• void activity()
• void finish()
Nella fase di inizializzazione (funzione initialize()) si costruisce la rete, si
creano i simple e compound module e sono connessi in base alle definizioni
del file NED e del file di configurazione omnetpp. ini. Durante il processamento degli eventi sono chiamate le funzioni handleMessage() (chiamata da
ogni messaggio che arriva al modulo oppure in seguito a schedulazione ad
un fissato istante di tempo) oppure activity(), nelle quali sono implementate
dallutente le caratteristiche del modello. La funzione activity() non necessita
della preventiva esecuzione della funzione initialize(), ma presenta limiti notevoli dal punto di vista della scalabilità: questa funzione crea un sovraccarico
dello stack, quindi in presenza di centinaia di simple module, crea difficoltà
nella gestione della memoria, inoltre introduce un maggiore overhead a runtime, nonché una maggiore lentezza nella chiamata della coroutine rispetto
ad una normale chiamata a funzione. Solo nella fase finale è possibile memorizzare i dati statistici raccolti durante la simulazione (durante linvocazione
della funzione finish()). Gli eventi sono rappresentati mediante i messaggi
da unistanza della classe cMessage. I messaggi sono inviati da un modulo ad
un altro, quindi il posto dove occorre un evento è il modulo destinazione del
messaggio. Gli eventi in ingresso al buffer del FES sono consumati in base
51
#include <omnetpp. h>
class HelloModule : public cSimpleModule
{
protected:
virtual void initialize();
virtual void handleMessage(cMessage ∗msg);
};
Define Module(HelloModule);
void HelloModule: : initialize()
{
ev << ’’Hello World!\n’’;
}
void HelloModule: : handleMessage(cMessage ∗msg)
{
delete msg; }
allordine darrivo, dati due messaggi, quello con il tempo darrivo più basso è
eseguito prima, se tali valori sono uguali, si esegue prima quello con il valore
di priorità più basso, se le priorità sono le stesse si valuta quello schedulato o inviato prima. Un dettaglio tecnico interessante nel funzionamento di
OMNeT++ riguarda le porte, infatti esse hanno associate code per memorizzare messaggi in attesa di essere trasmessi, i messaggi sono però memorizzati
nei buffer della FES. Questo tipo di approccio dovrebbe essere più veloce
rispetto ad una soluzione che fa uso delle code, perché evita loverhead dovuto allaccodamento (ed al disaccodamento), eventi e messaggi sono trattati
come ununica entità. Altri simulatori (come ad esempio OPNET) assegnano
code di pacchetti alle porte in ingresso prima di bufferizzare i messaggi, in
questo modo gli eventi sono gestiti da unentità equivalente alla FES, mentre
i messaggi dalle porte, quindi eventi e messaggi risultano essere due entità
separate. La registrazione della classe con OMNeT++ avviene mediante la
macro Define Module() inserita nel codice C++:
4.5.3
La macchina a stati finiti
La macchina a stati finiti fa parte del modello di programmazione supportato
dallambiente di simulazione, è attivata con il metodo handleMessage(), OMNeT++ fornisce una classe ed un insieme di macro per costruire una FSM
in cui sono possibili due stati: transient e steady. Lo stato transient indica
una condizione temporanea della FSM che si verifica durante la transizione
da un evento al successivo; lo stato steady indica una condizione in cui levento è accaduto. Il modello di programmazione di OMNeT++ comprende
52
anche una soluzione basata sulle coroutine che implementa linterazione tra i
processi mediante la funzione activity(). Ad ogni evento la FSM transita da
uno stato costante attraverso uno o più transitori per poi ritornare in uno
stadio costante. Nel codice del metodo è possibile inserire i punti di ingresso
e di uscita da uno stato. La FSM è memorizzata in un oggetto cFSM.
4.5.4
I messaggi
L’oggetto cMessage rappresenta messaggi, eventi, pacchetti, frame, bit, segnali (o altre entità) che viaggiano attraverso la rete. Tale oggetto ha degli
attributi, alcuni usati dal simulation kernel, altri di utilità per il programma
di simulazione, ecco alcuni di essi: nome del messaggio, tipo, lunghezza, bit
error flag (settato ad uno quando la probabilità derrore supera una certa
soglia), priorità usata dal kernel per ordinare i messaggi in ingresso al FES,
timestamp usato in caso di accodamento o reinvio, lista parametri, messaggio
incapsulato per modellare il passaggio attraverso i livelli della pila protocollare, informazioni di controllo, indicatore di contesto, infine attributi per la
memorizzazione di informazioni come moduli e porte sorgente e destinazione,
tempo di invio e di ricezione.
Questo oggetto può essere esteso per aggiungere nuovi campi ed OMNeT++ fornisce un modo molto conveniente per la definizione dei messaggi
creando file con estensione *. msg, dal quale in seguito ad una compilazione, è generato codice C++ che fornisce i metodi allutilizzatore per settare i
campi dei messaggi definiti dallutente.
4.5.5
Architettura
Larchitettura di OMNeT++ è realizzata mediante i seguenti componenti:
Sim è il simulation kernel ed una libreria di classi che lutente può collegare
alla propria simulazione. Questo componente gestisce gli eventi futuri,
istanzia simple module ed altri componenti allinizio dellesecuzione della
simulazione
Envir è un’altra libreria contenente il codice comune a tutte le interfacce
utente, consente di estendere le interfacce di base, mediante plug-in
aggiuntivi. Esso mantiene il controllo di cosa accade durante la simulazione. Il metodo main() è localizzato in questo componente e determina
quali modelli richiamare durante la simulazione
Cmdenv e Tkenv sono implementazioni di interfacce utente specifiche da
collegare alla propria simulazione: la prima agisce da linea di comando,
53
la seconda è grafica. Mediante queste interfacce l’utente ha la possibilità di iniziare e terminare la simulazione, nonchè seguire l’evolvere
della simulazione;
Model component library consiste di definizioni di simple module e relativa implementazione in C++, tipi di compound module, canali, reti,
messaggi ed altre entità legate alla simulazione
Executing model è il modello che è stato impostato per la simulazione. Esso contiene oggetti (moduli, canali) che sono tutte istanze di
componenti appartenenti al Model Component Library
Figura 13: Componenti Omnet++
Sim ¡-¿ Executing Model: Sim invoca i moduli nellExecuting Model come
eventi accaduti memorizzandoli nelloggetto principale di Sim: simulation
(della classe cSimulation, che memorizza i moduli del modello in esecuzione
e tiene traccia degli eventi nella FES), mentre Executing Model chiama le
funzioni nel Sim ed usa le sue classi di libreria. Sim ¡-¿ Model Component
Library: Sim fa riferimento al Model Component Library quando è usata
la creazione dinamica dei moduli (durante la fase di inizializzazione della
simulazione). Executing Model ¡-¿ Envir: loggetto ev (unica istanza della
classe cEnvir, serve a gestire le funzionalità per lI/O e fornire metodi per
accedere a Sim), è usato per visualizzare informazioni durante la simulazione
e per la scrittura sul file di log. Sim ¡-¿ Envir: invoca Sim per le funzionalità
legate allo scheduling ed allesecuzione degli eventi, mentre Sim usa Envir
per produrre i risultati della simulazione. Envir ¡-¿ Tkenv e Cmdenv: Envir
definisce una classe per linterfaccia utente: TOmnetApp, Tkenv e Cmdenv
54
sono sue sottoclassi che consentono allutente di scegliere quale usare mediante
il metodo main() che crea unistanza e la esegue. Envir fornisce anche delle
funzionalità di base per le sottoclassi di TOmnetApp che usano i suoi stessi
metodi essendo sue sottoclassi.
4.6
INET framework
INET framework è un modello di simulazione per alcuni strati protocollari
per l’interconnessione di calcolatori su rete. Esso contiene limplementazione di protocolli come TCP/IP ed UDP/IP, è stato scritto per l’ambiente di
simulazione OMNeT++/OMNEST, utilizzando i moduli attraverso i quali
sono scambiati i messaggi. Include anche MPLS con RSVP-TE e segnalazione LDP. I modelli del livello di collegamento sono PPP, Ethernet e 802. 11.
Si osserva che la distribuzione dell’INET framework presenta delle differenze
tra Linux e Windows, infatti la distribuzione Windows offre una scelta dellinsieme di protocolli più limitati, poichè nasce come una versione dimostrativa
e non di sviluppo. Esso contiene alcuni esempi di reti da simulare, modelli
di entità di rete, classi C++ per la definizione di messaggi che viaggiano
sulla rete. Rispetto ad altri concorrenti, come già detto, presenta pochi modelli, questo framework fornisce alcuni modelli che per lo scopo del nostro
lavoro sono più che sufficienti, consentendo di sfruttare al meglio i pregi del
simulatore. I protocolli sono rappresentati mediante simple module. Linterfaccia esterna del modulo è descritta mediante file NED, limplementazione
corrispondente è contenuta in file C++ con lo stesso nome del file NED.
Questi moduli possono liberamente essere combinati fra loro con il linguaggio NED per formare host o altri device, senza effettuare la ricompilazione.
Sono comunque presenti host preassemblati, router, switch, access-point utilizzabili dallutente, ma è possibile crearne di nuovi. Le interfacce di rete sono
compound module, composti da una coda, un MAC, ed eventualmente altri
simple module. Non tutti i moduli implementano protocolli, esistono molti
moduli che servono a facilitare la comunicazione con altri moduli, consentire
l’autoconfigurazione della rete, spostare un nodo mobile. I protocolli sono
dotati di specifici messaggi, sono descritti dai file con estensione *. msg di
OMNeT++. Essi sono rappresentati da classi C++, estensioni della classe
cMessage, generate automaticamente quando è compilato lINET framework.
Ci sono alcuni moduli in comune a modelli di host, router e device che è
opportuno segnalare:
InterfaceTable contiene la tabella delle interfacce di rete nell’host. Questo
modulo non invia né riceve messaggi, è acceduto da altri moduli, nella
fattispecie quelli che implementano interfacce di rete, per determinare
55
linterfaccia attraverso la quale inviare il pacchetto, usando chiamate a
funzioni membro C++
RoutingTable contiene la tabella di routing del protocollo IP v. 4 (RoutingTable6 ha la tabella IP v. 6), si affida all’interfaccia di rete per
effettuare le sue operazioni. Questo modulo è acceduto da altri moduli
attraverso chiamate a funzioni membro C++. Sono presenti funzioni
membro per fare query, aggiungere e rimuovere percorsi nonché per
trovare il miglior percorso
NotificationBoard per fornire la comunicazione in modalità
publish-subscribe. Se ad esempio un modulo modifica il suo stato, se
ha sottoscritto una notifica, questa sarà consegnata agli altri nodi che
hanno sottoscritto quella categoria di notifica
FlatNetworkConfigurator assegna indirizzi IP agli host ed ai router
NetworkConfigurator assegna indirizzi IP agli host ed ai router ma a
differenza del precedente opera anche oltre gli ambienti LAN
ScenarioManager supporta gli scripting per implementare l’interfaccia
IscriptableC++
ChannelControl serve per simulazioni wireless, tiene traccia di quali nodi
sono nel raggio di interferenza di altri nodi
Questo framework offre supporto al multicast, ma le funzioni di instradamento utilizzate nella modalità unicast, non funzionano per il multicast. Il
motivo risiede nel fatto che le funzioni di instradamento utilizzate per unicast, sono definite nei moduli FlatNetworkConfigurator e NetworkConfigurator
che assegnano indirizzi IP solo a nodi e non a gruppi, nel caso del multicast
non essendo loro ad assegnare lindirizzo multicast, non consentono neppure
luso delle funzioni di instradamento. L’utente è costretto a creare degli appositi file di routing di semplice costruzione (con estensione *. rt, *. irt, *.
mrt) in cui configurare i nodi della rete per specificare lappartenenza ad un
gruppo multicast e specificare il percorso da seguire per raggiungere una data
destinazione. Questi file possono essere utilizzati anche per configurare i nodi
di rete e specificare un percorso nel funzionamento unicast, ma solo nel caso
non si voglia utilizzare il NetworkConfigurator o il FlatNetworkConfigurator.
Quando un protocollo di livello superiore vuole inviare un pacchetto dati
ad un protocollo di livello inferiore, invia l’oggetto messaggio che rappresenta
il pacchetto incapsulandolo. Il processo di invio dal basso verso l’alto, prevede l’operazione inversa a quella di incapsulamento del pacchetto. Spesso è
56
necessario trasportare informazioni aggiuntive con il pacchetto, ad esempio
inviando dati su TCP o UDP serve un identificatore della connessione TCP o
informazioni utilizzate da UDP nel messaggio inviato dal livello applicativo.
TCP o UDP a loro volta inviano un segmento su IP, il messaggio a livello
trasporto necessita di un indirizzo destinazione ed altri parametri come TTL,
analogamente IP effettua l’invio di datagrammi verso un’interfaccia Ethernet, anche qui nel messaggio di livello rete bisogna specificare un indirizzo
MAC. Queste informazioni aggiuntive sono attaccate al messaggio oggetto
come informazioni di controllo che sono piccoli oggetti attaccati ai pacchetti
con la relativa funzione membro.
All’interno di host e router sono presenti diverse entità (possono essere
sia simple che compound module), ad esempio un possibile modello di host
client contiene: un’interfaccia Ethernet, il livello rete, un’applicazione (ping),
un modello UDP ed uno TCP, un modello applicativo (soprastante TCP), la
tabella di routing ed un modulo per consentire possibili estensioni future.
57
5
5.1
Modellazione del protocollo IDM
su Omnet
Gli argomenti trattati nella simulazione
Di tutti gli aspetti considerati sin’ora, bisogna astrarne soltanto alcuni di essi.
La simulazione adottata con Omnet su un protocollo in sviluppo come IDM,
è in grado di simulare alcuni aspetti genarali che risultano basilari per lo
sviluppo del protocollo. Primo fra tutti l’header di ogni possibile messaggio
mandato in una inter-rete di questo tipo. Successivamente bisogna astrarre
il concetto di nodo riguardante il protocollo IDM. Si è detto nel Capitolo 1,
come mostra l’immagine numero 5, che un nodo è un insieme di entità che
interagiscono tra di loro(oggetto remoto, client, servizio ALP, router IDM,
EP, adattatori). Quindi si creeranno varie entità che interagiranno tra di
loro per simulare in primis il concetto di nodo, e successivamente un’implementazione completa all’interno di una rete. L’obiettivo finale sarà quello
di implementare vari scenari con un numero crescente di nodi, all’interno
dei quali viaggiano i pacchetti IDM e misurare in base al numero di nodi,
le statistiche fornite da Omnet, per rilevare eventuali limiti e attuare una
comparazione col il modello di prototipo sviluppato fin’ora.
Successivamente, sfruttando il framework INET, sarà possibile attuare
un simulazione su un’implementazione completa di protocolli quali TCP ed
UDP.
Questo scenario può essere rappresentato dalla figura 6 .
L’idea di base è quella di riprodurre fedelmente un cammino illustrato
nella figura , che coinvolge gli aspetti che si devono astrarre per la simulazione.
5.2
La progettazione del network
Una prima implementazione comprende 3 elementi: client, router, oggetto
remoto.
Nella figura routerIDM[3] sta a significare che ci sono 3 router di tipo
IDM lungo il cammino. Bisogna però distinguere correttamente i nodi, come
detto precedentemente il concetto di nodo in IDM è completamente differente
dal significato che gli si attribuisce convenzionalmente, ad esempio quando
gli si associa il concetto di host di rete (in una rete TCP/IP). In questo caso
con 3 router IDM un client ed un oggetto remoto, abbiamo in totale 4 nodi.
Nella figura seguente c’è una rappresentazione più chiara.
L’obiettivo di una semplice simulazione basata su questo schema, mira
ad inviare uno o più pacchetti dal client all’oggetto remoto. Ciò simula
58
Figura 14: Scenario 1
59
Figura 15: Scenario 2
su di esso una invocazione di un determinato servizio richiesto dal client,
che l’oggetto soddisfa grazie al protocollo IDM. Il client quindi invia una
richiesta di un determinato servizio verso l’oggetto remoto, la quale viene
inviata (forward) attraverso i router presenti nel cammino. Successivamente
la richiesta viene processata dall’oggetto che fornisce il servizio al client. Una
volta arrivato il pacchetto a destinazione si attua il procedimento inverso
(reply), che consegna la risposta al client.
L’esempio proposto va esteso per protocolli eterogenei. Per questa ragione
si colloca nel percorso un numero arbitrario di router che non siano IDM e
quindi un numero arbitrario di reti. Nella figura seguente è mostrata una
implementazione possibile:
A differenza di prima, qui si hanno 3 reti differenti. Due reti IDM e una
rete generica, che può essere anche l’internet stessa, o comunque un protocollo
differente da IDM. Il procedimento in questo caso non si limita a forwardare
il pacchetto ed a riceverlo, ma IDM si deve occupare dell’instradamento al
di fuori della sua rete stessa. Su questo punto vanno fatte due osservazioni
importanti:
• ogni router IDM deve supportare l’instradamento dinamico e quindi
deve essere versatile a seconda del ruolo che gli spetta. Ergo ogni router
60
Figura 16: Scenario 3
IDM deve avere di base la medesima implementazione per adattarsi a
qualunque punto della rete
• essendo IDM un protocollo multilivello, un router deve occuparsi di
encapsulare i messaggi per poi inviarli sulla rete
Figura 17: Scenario 3.1
5.3
Implementazione
L’implementazione di questo scenario, prevede l’utilizzo di alcuni file che rappresentano delle entità. Prima di analizzare le varie entità che compongono
la rete, va dato uno sguardo alla topologia della rete stessa per mezzo del file
61
. ned. Il file . ned in Omnet permette di realizzare facilmente una qualsiasi
topologia di rete, sia con un meccanismo punta e clicca molto semplice che
con un editor testuale integrato. Di seguito il file che rappresenta lo scenario
precedente:
simple RouterIDM
{
parameters:
@display(’’i=abstract/router’’);
gates:
inout gate[];
}
simple GenericRouter
{
@display(’’i=abstract/db’’);
gates:
inout gate[];
}
simple ClientIDM
{
@display(’’i=abstract/penguin’’);
gates:
inout gate[];
}
simple ObjectIDM
{
@display(’’i=block/socket’’);
gates:
inout gate[];
}
network idm1
{
@display(’’bgb=669, 361;bgl=2’’);
types:
62
channel A extends ned. DatarateChannel
{
datarate = 50Mbps;
delay = 100ms;
}
channel C extends ned. DelayChannel
{
delay = 50ms;
}
submodules:
routerIDM[2]: RouterIDM {
}
clientIDM: ClientIDM {
@display(’’p=35, 138;i=device/pc;is=l’’);
}
objectIDM: ObjectIDM {
@display(’’p=612, 125;is=l’’);
}
genericRouter: GenericRouter {
@display(’’p=292, 32’’);
}
genericRouter1: GenericRouter {
@display(’’p=477, 71’’);
}
connections:
clientIDM. gate++ <--> C <--> routerIDM[0]. gate++;
routerIDM[0]. gate++ <--> A <--> genericRouter. gate++;
genericRouter. gate++ <--> A <--> genericRouter1. gate++;
genericRouter1. gate++ <--> A <--> routerIDM[1]. gate++;
routerIDM[1]. gate++ <--> A <--> objectIDM. gate++;
}
Con la keyword simple sono definiti i moduli base che compongono la rete,
in questo caso sono quattro: il client, il router IDM, il router generico ed infine
l’oggetto remoto. Ciascuno dei quali può inviare e ricevere messaggi, definito
nella keyword inout gate[]. Nel modulo composto network, ci sono i vari
moduli che interagiscono tra di loro per mezzo di alcuni canali (channels). In
questo caso, per differenziare al meglio la qualità della transazione dei dati,
63
class ClientIDM : public cSimpleModule
{
private:
long numSent; //numero pacchetti mandati
long numReceived; //numero pacchetti ricevuti
cLongHistogram hopCountStats; //oggetto creato per le statistiche
cOutVector hopCountVector; //oggetto creato per le statistiche
protected:
virtual
virtual
virtual
virtual
virtual
};
IDMGenMsg ∗generateFMessage();
void sendMessage(IDMGenMsg ∗msg);//forward
void initialize();
void handleMessage(cMessage ∗msg);
void finish();
si è preferito usare due canali differenti. Essendo il primo nodo composto
da due oggetti tra loro strettamente correlati, si è preferito usare il Delay
Channel che simula un ritardo di 50 ms. L’altro canale, il Datarate Channel,
in Omnet supporta oltre al ritardo un datarate che rappresenta la bandwidth
massima nella rete. Se il parametro è settato a zero la bandwidth è pari a
infinito.
Passando ad analizzare il client, si citano le intestazioni delle sue funzioni
principali:
• La funzione generateFMessage() crea il pacchetto da inviare, settando
tutti i possibili campi dell’header
• La funzione sendMessage() si occupa di inviare il messaggio al router
IDM
• La funzione initialize() è predefinita in Omnet. Va invocata nel primo modulo che da lo start all’invio dei pacchetti. In questa funzione
vengono descritti i parametri dichiarati nel campo private, che servono per collezionare le statistiche in vari formati, per poi analizzarle
successivamente.
• La funzione handleMessage è un’altra funzione predefinita di Omnet
e viene invocata ogni qual volta un pacchetto viene processato. Tutti
i moduli di una rete Omnet devono avere questa funzione (oppure la
64
funzione activity()). Quando attraverso lo script ned i pacchetti arrivano a destinazione di ogni modulo, questa funzione va personalizzata in
base all’uso del modulo. Solitamente in questa funzione sono presenti
le operazioni principali di ogni modulo della rete. Per analizzare un
solo pacchetto che transita nella rete è possibile implementare questa
funzione in modo tale che non crei altri pacchetti, in caso contrario
è possibile fare un loop o ciclare all’infinito. Spetterà poi all’utente
interrompere il flusso con la chiamata finish
• Infine, c’è la funzione finish(). La quale è chiamata se la simulazione
viene interrotta dall’utente oppure se la simulazione termina poiché
non vi sono più pacchetti da processare. Raccoglia tutti i dati e crea
le statistiche.
Si è detto precedentemente che la funzione generateFMessage() crea il
pacchetto riempiendo tutti i campi dell’header. È presentata qui di seguito
l’implementazione in Omnet dell’header IDM:
enum IDMGenMsgType
{
IDM_CONN_REQ = 0;
IDM_CONN_ACK = 1;
IDM_DISC_REQ = 2;
IDM_DISC_ACK = 3;
IDM_DATA = 4;
};
//header IDM
packet IDMGenMsg
{
char magic_I;
char magic_D;
char magic_M;
int source;
int destination;
int hopCount = 0;
int messageType; //0 forward 1 reply
int encap; //0 no 1 yes mode
//int messageSize; in Omnet Library setByteLength
int routerId;
int requestId;
65
//char tos; //depends to the service
//int flow; //depends to the tos
}
// an extention of the previous packet to send raw data
packet IDMData extends IDMGenMsg
{
string payload;
};
• La sezione enum enumera i tipi di pacchetti disponibili. A seconda dei
pacchetti che supporterà IDM questa sezione è facilmente implementabile poiché è sufficiente aggiungere il nome del pacchetto e la funzione
predefinita di Omnet getKind() per processarlo.
• La sezione packet contiene l’header IDM. Ciascuno dei campi presenti è
implementato nella funzione generateFMessage del client o generateRMessage dell’oggetto remoto. Questo perchè si è assegnato ai router
IDM il solo incarico di processare i pacchetti e la creazione solo agli
EP, poichè sono i principali attori della comunicazione
• Infine c’è la sezione che consente l’invio di dati raw. Questa è un’estensione del pacchetto precedentemente dichiarato e consente l’invio di un
payload arbitrario.
L’oggetto IDM a differenza del client, è sprovvisto dei metodi finish() e
inizialize() poiché nella simulazione presa in esame, si è deciso di analizzare
il transito di tutti i pacchett che partono ed arrivano su un solo nodo.
L’implementazione di un router normale è molto semplice: deve limitarsi
a smistare i pacchetti quindi nel momento in cui gli arriva un pacchetto, la
funzione handle message non fa altro che smistarlo al router successivo o
precedente, a seconda del messaggio.
Infine si analizza il router IDM. Precedentemente si è detto che IDM è
un protocollo multi-layer e per questo deve adattarsi ad ogni tipo di rete.
Nello scenario di base è stato preso in esame un router generico per simulare
il comportamento dei router IDM in base ad un qualsiasi router presente
su una rete. Un router IDM incapsula il pacchetto e lo spedisce al router
che è presente al di fuori della sua rete. Successivamente quando attraverso
il percorso, il pacchetto giunge sull’ultimo router (IDM) che deve inviarlo
all’oggetto, questo lo decapsula e successivamente lo invia come normale
pacchetto IDM. Nel caso in cui l’oggetto remoto manda la risposta al client
viene eseguito lo stesso procedimento.
66
6
Analisi dei risultati
6.1
I risultati in Omnet
Lo strumento Omnet fornisce una varia gamma di tool atti ad analizzare
i risultati. Nel caso preso in considerazione è stato usato event-log poiché
risulta essere il più dettagliato in ogni istante di tempo della simulazione.
Grazie a ciò è possibile misurare con facilità la latenza ed il throughput,
che sono i due parametri essenziali per poter confrontare il seguente modello
simulativo col precedente prototipo. Di seguito sono listati dei grafici con
associate delle tabelle che riassumono i loro dati.
6.2
Latenza
La latenza dipende soprattutto dal numero di hop presenti in una rete. Per
effettuare questa misurazione di solito si usano pacchetti null oppure pacchetti molto piccoli. In questo caso è stato utilizzato un pacchetto che invia
semplicemente la stringa hello. Nelle due figure seguenti sono stati utilizzati
rispettivamente 3 hop e 2 hop.
Figura 18: Statistiche
Di seguito la tabella con i risultati completi:
67
Pacchetti Totali
100431
100271
Secondi
6242
5003
Hop
3
2
Delay
100ms
50ms
Considerando che il prototipo usando EP di tipo TCP, con un solo hop
da remoto esegue il tutto in 2537 secondi, raddoppiùndo il numero di hop
ed i secondi, ci si rende conto che il risultato ottenuto non si discosta molto
da quello ottenuto dal prototipo. Con l’incremento degli hop il numero dei
secondi e del ritardo accumulato sale, ma non cosı̀ eccessivamente tale da
ritardare la comunicazione.
6.3
Throughput
Per quanto riguarda il throughput di seguito è mostrata la tabella per un
ciclo di 1000 iterazioni che inviano messaggi di 500KB
Pacchetti Totali
10926
8781
Secondi
117420
87032
Hop
3
2
Delay
100ms
50ms
Anche in questo caso i valori non si discostano molto dal prototipo e la
simulazione conferma che i risultati ottenuti precedentemente, sono accettabili poiché non si discostano molto sia dal protocollo TCP che dallo stesso
ICE, su cui è basato il codice reale di IDM.
Conclusioni e sviluppi futuri
Comparando le tabelle della simulazione con quelle del prototipo, le quali
promettono dei miglioramenti in prestazioni, si può concludere dicendo che il
protocollo IDM a livello di prestazioni è ottimale. Non si discosta molto dai
protolli come il TCP, inoltre i test usati fin’ora hanno sempre penalizzato le
prestazioni di IDM sia nel test del codice reale, che utilizza solo EP di tipo
TCP, sia la simulazione che offre in ogni caso risultati approssimativi che dipendono soprattutto dall’hardware in uso. Per queste ragioni, se IDM venisse
implementato completamente offrirebbe sicuramente prestazioni migliori.
Uno sviluppo futuro, è testare il funzionamento di IDM sfruttando il framework INET o anche INETMANET. Soprattutto quest’ultimo framework
che simula le reti MANET, come spiegato nel Capitolo 1, una rete MANET
è il terreno più fertile per poter implementare al meglio una rete IDM.
68
Conclusioni e sviluppi futuri
A prima vista, la progettazione e l’implementazione di un protocollo di rete
incluso il livello di trasporto, può sembrare un concetto contraddittorio e
uno sforzo vano, ma resta il fatto che le prestazioni che offre IDM possono
risultare molto produttive in molti scenari. Alcune fra le più importanti sono:
• Instradamento logico universale indipendente dalla tecnologia
• Trasporto trasparente da estremo ad estremo
• Prestazioni addizionali trasparenti e disaccoppiate dal trasporto come
cifratura, contabilità, autenticazione, autorizzazione.
• Routing funzionale
• Migrazione di nodi e router
Approfittando delle possibilità che offre IDM, viene valutata la sua applicabilità in vari settori:
• Reti MANET. Ogni nodo della rete ad-hoc può includere un router
IDM,
omogeneizzando l’accesso dalla rete principale. Tutto ciò permette di
costruire reti ad-hoc ibride, ad esempio una rete IP e una rete di sensori.
• Implementazione del router IDM nei sistemi embedded basati su microcontrollori e/o in FPGA per lo sviluppo di router di reti SAN.
• Reti virtuali che forniscono servizi QoS.
[9]
Riferimenti bibliografici
[1] http://arco.esi.uclm.es/idm.
[2] http://www.omnetpp.org.
[3] http://www.ece.gatech.edu/research/labs/bwn/actors/.
[4] http://it.wikipedia.org/wiki/Storage Area Network.
[5] http://it.wikipedia.org/wiki/Tunneling.
69
[6] http://it.wikipedia.org/wiki/Wireless sensor network.
[7] F.Moya G. Urzaiz-F.Rincòn D. Villa, F.J.Villanueva and J.C.Lopez.
Object oriented multi-layer router with application on wireless sensoractuator networks. In 16th IEEE International Conference on Networks
- Nuova Delhi(India), 2008.
[8] Jesús Martı́n de la Cruz. Estudio de algoritmos de enrutado en redes
móviles ad-hoc. Master’s thesis, Universidad de Castilla-La Mancha
Escuela superior de informàtica, 2007.
[9] ARCO Research Group Università della Castilla-La Mancha. Integraciòn
de redes heterogéneas, chapter 7. 2008.
[10] ARCO Research Group Università della Castilla-La Mancha. Interdomain messaging. http://arco.esi.uclm.es/en/idm, 2008.
[11] Angelo Dell’Aera. Quality of service:
discipline. Linux & co., (70), 2010.
introduzione alle queueing
[12] F.J.Villanueva F.Moya F.Rincon-J.C.Lopez and L.A.Munoz G. Urzaiz,
D.Villa. A novel communication platform to enable the collaboration of autonomous underwater vehicles. In 16th IEEE International
Conference on Networks - Nuova Delhi(India), 2008.
[13] Object Management Group. CORBA Messaging in Common Object
Request Broker Architecture Specification, chapter 17. 2008.
[14] Francesco Melillo. Modellazione dello standard omg rtps mediante omnet++. Master’s thesis, Università degli Studi di Napoli - Federico II,
2007.
Elenco delle tabelle
1
2
3
Tabella di routing . . . . . . . . . . . . . . . . . . . . . . . . . 37
Latenza su Socket, ICE, IDM . . . . . . . . . . . . . . . . . . 41
Throughput su Socket, ICE, IDM . . . . . . . . . . . . . . . . 42
Elenco delle figure
1
2
Una inter-rete IDM composta da 4 differenti network IDM . . 7
Elenco di protocolli di rete secondo ISO/OSI . . . . . . . . . . 10
70
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Esempio di instradamento . . . . . . . . . . . . . . . . . . .
Livello IDM . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gerarchia di classi in QoS . . . . . . . . . . . . . . . . . . .
Mappatura delle varie tipologie di traffico nelle bande messe
a disposizione della qdisc pfifo fast . . . . . . . . . . . . . .
Token bucket filter queueing discipline: i token arrivano a
cadenza regolare ed ogni pacchetto inviato ne consuma uno .
Scenario possibile . . . . . . . . . . . . . . . . . . . . . . . .
Scenario possibile . . . . . . . . . . . . . . . . . . . . . . . .
Il nodo in IDM . . . . . . . . . . . . . . . . . . . . . . . . .
Invocazione dell’oggetto remoto . . . . . . . . . . . . . . . .
File Omnet++ . . . . . . . . . . . . . . . . . . . . . . . . .
Componenti Omnet++ . . . . . . . . . . . . . . . . . . . . .
Scenario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scenario 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scenario 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Scenario 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . .
Statistiche . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
. 20
. 21
. 25
. 27
.
.
.
.
.
.
.
.
.
.
.
.
28
32
34
36
39
48
54
59
60
61
61
67