• Non ci sono risultati.

3.1. L’importanza della simulazione 3. NETWORK SIMULATOR

N/A
N/A
Protected

Academic year: 2021

Condividi "3.1. L’importanza della simulazione 3. NETWORK SIMULATOR"

Copied!
32
0
0

Testo completo

(1)

3. NETWORK SIMULATOR

In questo capitolo analizzeremo Network Simulator (NS), l’ambiente di simulazione per le reti di telecomunicazioni che abbiamo utilizzato nel nostro lavoro di tesi.

Partiremo da un’analisi molto generale sulla simulazione e sui suoi aspetti per passare poi ad una dettagliata descrizione di NS, dalle sue caratteristiche alle sue funzionalità fino ai moduli già presenti che abbiamo utilizzato per implementare il protocollo RSVP-TE.

3.1. L’importanza della simulazione

La simulazione è l’imitazione del funzionamento di un sistema reale per lo studio di particolari aspetti. Essa si ottiene riproducendo l’evoluzione temporale del processo in questione, e più precisamente generandone un’evoluzione artificiale.

(2)

I mezzi di simulazione oggi a disposizione sono diversi (da carta e penna ai software sui calcolatori), ma in ogni caso un aspetto fondamentale di ogni tecnica è il modello di simulazione, che è una rappresentazione del sistema da analizzare data da un insieme di assunzioni espresse sotto forma di relazioni matematiche, logiche o simboliche fra entità del sistema stesso.

I motivi che spingono all’approccio simulativo sono diversi: • lo studio e la sperimentazione delle interazioni interne di un

sistema complesso;

• una migliore conoscenza del sistema reale come conseguenza della creazione del modello di simulazione; • lo studio dell’impatto sui risultati dei diversi parametri del

modello di simulazione;

• la valutazione del funzionamento e delle prestazioni di un sistema prima della costruzione del prototipo;

• la verifica di soluzioni analitiche;

• la possibilità di valutare eventi e condizioni rare o rischiose.

Altri aspetti fortemente vantaggiosi che spingono verso un processo di simulazione sono:

• la valutazione what-if senza interrompere il funzionamento del sistema;

(3)

• la compressione e l’espansione del tempo per l’analisi dettagliata di fenomeni interessanti;

• l’acquisizione di conoscenze sull’interazione fra le diverse variabili del sistema e sulla maggiore importanza di alcune rispetto ad altre;

• l’identificazione dei punti deboli del sistema;

• la flessibilità nello studio del comportamento del sistema. Naturalmente accanto ai numerosi aspetti positivi ci sono tutta una serie di complicazioni e difficoltà: la creazione del modello e la sua validazione possono richiedere molto tempo, e l’analisi stessa di un sistema complesso può essere molto lunga. Inoltre è necessaria una forte esperienza nelle tecniche di simulazione e i risultati delle prove possono essere comunque di difficile interpretazione.

Per l’organizzazione di uno studio di simulazione sono necessarie varie fasi, come mostra la figura 3.1:

1. fase iniziale: bisogna formulare il problema, definendo gli obiettivi e pianificando lo studio;

2. costruzione del modello e acquisizione dei dati: si deve progettare il modello, acquisire i dati di input ed output dal sistema reale, implementare il modello, verificarlo e validarlo;

(4)

3. simulazioni: bisogna definire le varianti da studiare, progettare le sessioni di simulazione e analizzare i risultati, ed eventualmente pianificare nuove sessioni di simulazione;

NO NO

NO

Formulazione del problema Definizione degli obiettivi

Astrazione del modello Raccolta dati

Esecuzione e analisi dei dati Codifica del modello

Progetto delle sessioni di simulazione

Validazione

Verifica

Documentazione e presentazione dei dati Figura 3.1: fasi del processo di simulazione

(5)

4. documentazione e presentazione dei dati: si deve documentare il modello e le diverse sessioni di simulazione, e infine mostrare i risultati dello studio.

Concludiamo questa veloce panoramica parlando della simulazione ad eventi discreti, che è il tipo di simulazione che ci interessa da vicino.

Ricordiamo innanzitutto che le variabili di stato sono quelle variabili che caratterizzano in modo completo lo stato del sistema e la cui dinamica definisce interamente l’evoluzione del modello. Nei sistemi discreti [8] le variabili di stato cambiano solo in istanti appartenenti appunto ad un insieme discreto; l’evoluzione in un determinato intervallo di tempo di un sistema di questo tipo è data quindi da un numero finito di eventi, e perciò è necessaria esclusivamente la loro simulazione.

Per effettuare uno studio simulativo su questi sistemi bisogna dapprima stabilire lo stato iniziale e le modifiche da apportare alle variabili di stato per ogni evento, e poi ordinare gli eventi stessi in un calendario sulla base dell’istante di occorrenza. La simulazione (come esecuzione del programma) consiste quindi nello scorrere il calendario, eseguire gli aggiornamenti delle variabili di stato in base all’evento verificatosi ed effettuare le misure sulle variabili di uscita che ci interessano.

(6)

3.2. Network Simulator

NS è un simulatore di rete IP-based, nato come variante del simulatore di rete REAL e implementato dall’Università di Berkeley nel 1989. Nel 1995 lo sviluppo fu supportato anche dal gruppo DARPA (una collaborazione tra USC/ISI, Xerox PARC, LBNL e Università di Berkeley) attraverso il progetto VINT (Virtual InterNetwork Testbed), e numerosi continuano ad essere ancora oggi i contributi di altre ricerche, da ACIRI a UCB Daedalus fino a Sun Microsystem, data la natura open-source del simulatore [9].

NS utilizza come linguaggio di programmazione il Tcl (Tool Command Language), per descrivere tutte le operazioni necessarie alla definizione di una simulazione [10]. Mediante comandi Tcl è infatti possibile impostare lo scenario di rete oggetto dello studio di simulazione (la topologia della rete, le proprietà dei collegamenti, i protocolli da usare, ecc.) e la sua evoluzione temporale (la composizione del traffico, la generazione e la terminazione delle sessioni, eventuali modifiche della topologia della rete), elaborare i dati acquisiti e ottenere i risultati cercati. Inoltre, sempre attraverso comandi Tcl, è possibile effettuare operazioni come la gestione dei file o le operazioni di ingresso/uscita.

(7)

NS è stato costruito semplicemente aggiungendo le funzioni specifiche di un simulatore di reti ai servizi di base offerti da Tcl (e da OTcl, che è la versione Tcl orientata alla programmazione di oggetti).

Nel nostro lavoro di tesi abbiamo utilizzato la seconda versione di NS (NS2), e in particolare la versione 2.26 per Linux.

Riportiamo di seguito alcune parti di un programma d’esempio che presenta vari comandi utili alle funzioni appena menzionate.

# Impostiamo la topologia della rete set s1 [$ns node] #sorgenti

set s2 [$ns node]

set G1 [$ns mpls-node] #gateway set r1 [$ns node] #ricevitore

# Impostiamo i collegamenti e le loro proprietà $ns duplex-link $s1 $G1 10Mb 100ms DropTail $ns rsvp-duplex-link $s2 $G1 1Gb 10ms Param Null $ns simplex-link $G1 $r1 10Mb 1ms DropTail

$ns simplex-link $r1 $G1 1Mb 10ms DropTail

# Impostiamo il traffico, creando una sorgente TCP, # una sorgente UDP e un ricevitore TCP

set tcp1 [new Agent/TCP/Reno] $ns attach-agent $s1 $tcp1

(8)

set udp2 [new Agent/UDP] $ns attach-agent $s2 $udp2 set sink1 [new Agent/TCPSink] $ns attach-agent $r1 $sink1 $ns connect $tcp1 $sink1 $ns connect $udp2 $sink1 # Creiamo delle applicazioni set ftp1 [new Application/FTP] $ftp1 attach-agent $tcp1

set ftp2 [new Application/FTP] $ftp2 attach-agent $tcp2

# Scriviamo una procedura per il calcolo del rate proc record {step}

{

global NumBytePrec1 set now [$ns now]

set Byte1 [$mon1 set barrivals_]

set DeltaByte1 [expr $Byte1-$NumBytePrec1] puts $f1 "$now [expr $DeltaByte1/$step*8]" set NumBytePrec1 $Byte1

$ns at [expr $now+$step] "record 0.5" }

# Apriamo i file per i risultati set f1 [open rate w]

(9)

# Definiamo gli istanti di partenza delle sorgenti # e delle procedure $ns at 0.0 "record 0.1" $ns at 0.1 "$ftp1 start" $ns at 1.0 "$udp2 start" $ns at 5.0 "$udp2 stop" $ns at 20.0 "$ftp1 stop" $ns at 20.1 "finish" $ns run

Altri comandi tipici di uno script Tcl di simulazione sono i seguenti:

• set ns [new Simulator]

che genera un oggetto (e un suo handler) della classe Simulator in ambiente C++, e contestualmente uno shadow-object in ambiente Otcl, legato strettamente al primo in modo che una modifica dell’uno comporti automaticamente una modifica sull’altro;

ns-random 67

che fissa il seme del generatore di numeri casuali, in modo che, utilizzando di volta in volta semi diversi, si possano effettuare simulazioni incorrelate;

set file1 [open simulazione.nam w]

(10)

che creano un file per la visualizzazione NAM della simulazione (in figura 3.2 c’è un’immagine generata appunto dall’interfaccia grafica del simulatore);

14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

set file2 [open simulazione.tr w] $ns trace-all $file2

che creano un file di trace con le informazioni sui pacchetti nei vari nodi (istante di generazione, mittente, destinatario, dimensione, ecc.), come mostra la figura 3.3; questo file viene spesso utilizzato per il calcolo di vari parametri tramite appropriate procedure.

(11)

3.2.1. Object-programming

Possiamo immaginare una rete di telecomunicazioni come un insieme di oggetti di diversa natura e con diverse proprietà (router, bridge, link, applicazioni, ecc.) che interagiscono e cooperano per offrire dei servizi agli utenti.

La scomposizione di una rete nei suoi elementi base è utile per costruire sia la struttura interna del simulatore sia l’interfaccia verso l’utente: si può infatti associare ad ogni componente reale un oggetto virtuale nell’ambiente di simulazione che ne rispecchia più o meno fedelmente le caratteristiche. Questa proprietà di modularità permette di creare dei modelli estremamente flessibili, facilmente adattabili cioè al particolare

(12)

problema da studiare. La figura 3.4 esemplifica il concetto: ad ogni oggetto reale che compone la rete da simulare corrisponde un oggetto simulato che ne approssima il comportamento.

Organizzare il codice in questo modo (Object-Oriented Programming) comporta diversi vantaggi:

• è più semplice ed intuitivo costruire una simulazione;

• il codice del simulatore risulta strutturato coerentemente alla realtà, quindi più facile da gestire;

Simulazione Mondo reale Router Ogg. Nodo Ogg. Link Ogg. Link Ogg. Appl. Ogg. Appl. Ogg. Appl. Appl. Appl. Appl.

Figura 3.4: oggetti reali e oggetti simulati Link

(13)

• è più semplice sviluppare nuove funzionalità, grazie alla facilità con cui i diversi oggetti possono essere associati ad entità reali.

3.2.2. Aspetti generali

NS2 è scritto interamente in C/C++ e utilizza un interprete Tcl/OTcl come interfaccia utente. Questo software di simulazione è di pubblico dominio e può essere scaricato gratuitamente all’indirizzo http://www.isi.edu/nsnam/ns/ [9]. Il programma (molto semplice da istallare) è stato progettato e testato su sistemi Unix/Linux, ma può essere utilizzato facilmente anche su piattaforma Windows.

Come detto, il suo motore di simulazione (engine) è scritto in C++ e l'utente interagisce con il simulatore mediante comandi Otcl. I comandi possono essere digitati uno dopo l’altro dal prompt del simulatore oppure raccolti in un file di testo usato come input dal programma. Tcl/OTcl è un linguaggio di scripting (le istruzioni vengono interpretate ed eseguite una linea alla volta), disponibile sia in ambiente Unix/Linux che Windows.

OTcl, come accennato nel paragrafo precedente, è l'interfaccia attraverso cui l'utente descrive il modello di simulazione, indicando topologia della rete, sorgenti di traffico, istanti di

(14)

attivazione e così via. Il programma simula il funzionamento della rete descritta nel file di configurazione della simulazione (uno script Otcl) e produce l’insieme dei file di risultati.

E’ inoltre possibile impostare il simulatore NS2 in modo da generare un file di testo (tipicamente con estensione .nam) in cui vengano registrati tutti gli eventi che avvengono durante la simulazione, ed in particolare gli istanti di generazione e ricezione di ogni singolo pacchetto ed il loro percorso dettagliato nella rete. Questo file può essere successivamente processato da un programma dotato di interfaccia grafica, denominato NAM (Network Animator Module) che permette di ricostruire la simulazione attraverso un’animazione. In questo modo possiamo avere un riscontro visivo del funzionamento della rete e dell'interazione fra i vari componenti; inoltre nel corso dell'animazione è possibile realizzare dei fermo-immagine, aumentare o diminuire la velocità di riproduzione e, “cliccando” sui vari elementi grafici che compongono la simulazione, ottenere informazioni specifiche (ad esempio, cliccando su un collegamento si ottiene il numero dei pacchetti persi su quel link).

Due esempi di animazione NAM sono riportati nelle immagini in figura 3.5, tratte dalla simulazione di reti molto semplici.

(15)

3 7 2 6 1 5 0 4 8 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

(16)

3.2.3. Simulazione ad eventi

NS2 fa parte della classe dei simulatori ad eventi discreti (event-driven simulator), nei quali vengono eseguite delle azioni solo agli istanti in cui si presentano eventi che modificano lo stato del sistema, come ampiamente descritto nel paragrafo 3.1.

Il simulatore dispone di una lista di eventi marcati con l’istante di simulazione. Il centro elaborazione del simulatore accede alla lista di eventi attraverso uno scheduler, che gestisce le operazioni di inserimento e di estrazione dalla lista in base ad un criterio predefinito: ad ogni passo il centro elaborazione seleziona dalla lista l’evento indicato dallo scheduler (figura 3.6-a), esegue le azioni associate a tale evento e genera eventualmente nuovi eventi che passa allo scheduler in modo che siano aggiunti alla lista (figura 3.6-b). Il meccanismo viene avviato da un insieme di eventi decisi dall’utente.

Lo scheduler è implementato attraverso una classe OTcl e viene generato contestualmente alla creazione di un'istanza della classe Simulator.

NS2 dispone di due sottoclassi per lo scheduler:

• Scheduler/List: è lo scheduler predefinito, realizzato da una lista concatenata ordinata cronologicamente; a causa di tale modalità di ordinamento, l'inserzione e la rimozione di un

(17)

evento richiedono una scansione della lista, mentre la scelta del successivo evento da processare comporta semplicemente l'estrazione del primo elemento dalla testa della lista;

• Scheduler/RealTime: permette di sincronizzare gli eventi simulati con il tempo reale; questa funzionalità (attualmente ancora in fase di sviluppo) consente di interfacciare il simulatore con reti a bassa velocità, ottenendo l’emulazione di reti reali.

Selezione dell’evento Step 2

Figura 3.6-a: scelta dell’evento Step 1 Invocazione scheduler Evento 1, t=0.0 Evento 2, t=0.5 Evento 3, t=0.8 Evento 4, t=1.2 Evento 5, t=1.6 Scheduler Centro elaborazione

(18)

3.2. I moduli che abbiamo utilizzato

In questo paragrafo parleremo dei moduli e dei protocolli già implementati in NS2 che abbiamo utilizzato nel nostro lavoro di implementazione e dai quali siamo partiti per sviluppare il modulo di RSVP-TE.

E’ necessario innanzitutto notare che l’implementazione di qualsiasi protocollo differisce in vari punti dai documenti ufficiali del protocollo stesso, perché l’ambiente di simulazione impone diversi limiti all’implementazione, perché alcuni aspetti possono essere più facili da implementare in una simulazione e perché la natura stessa della simulazione e le

Step 4

Step 3 Esecuzione delle azioni

associate all’evento Step 4 Aggiunta di un nuovo evento Evento 1, t=0.0 Evento 2, t=0.5 Evento 3, t=0.8 Evento 4, t=1.0 Evento 5, t=1.2 Scheduler Elaborazione eventi

(19)

risorse disponibili (memoria e CPU) limitano necessariamente il livello di dettaglio.

Bisogna comunque sottolineare che per ogni nuova implementazione si cerca di raggiungere delle caratteristiche ben precise quali la modularità (in modo da poter facilmente aggiungere e sostituire blocchi funzionali), l’estendibilità (per l’inserimento di nuovi oggetti e nuove opzioni), la facilità d’utilizzo (in modo che gli utenti possano imparare ad usare il modulo con semplicità) e la portabilità (per poter utilizzare il modulo con linguaggi e sistemi operativi differenti).

3.2.1. RSVP/ns

RSVP/ns è il modulo che implementa il protocollo RSVP. Creato dal ricercatore dell’Università di Bonn Marc Greis [11], presenta quasi tutti gli oggetti di RSVP, sia nel formato per IPv4 che per IPv6, come mostra la tabella in figura 3.7.

Ci sono alcune piccole differenze tra gli oggetti implementati in RSVP/ns e gli oggetti reali definiti da RSVP; per esempio, nell’oggetto Session di RSVP/ns sono omessi la porta di destinazione e l’identificativo del protocollo, visto che nella simulazione le sessioni sono identificate univocamente dal loro flow-id, mentre per semplificare il processing dei pacchetti è stato aggiunto un campo con l’indirizzo del destinatario.

(20)

Object Class-Num SESSION 1 RSVP_HOP 3 TIME_VALUES 5 ERROR_SPEC 6 STYLE 8 FLOWSPEC 9 FILTER_SPEC 10 SENDER_TEMPLATE 11 SENDER_TSPEC 12 RESV_CONFIRM 15

Gli unici oggetti trascurati in RSVP/ns sono Integrity (nella simulazione non possono esserci messaggi corrotti da utenti maliziosi), Scope (non è implementato lo stile di prenotazione WF), AdSpec (tralasciato per semplicità) e Policy_Data (non è implementato alcun meccanismo di policing).

Per quanto riguarda i messaggi, sono stati tutti implementati, tranne il PathErr Message: la sua unica funzione nel mondo reale, almeno in RSVP, è segnalare errori nati da mismatch coi numeri di porta, ma NS2 non utilizza le porte, rendendone così inutile la realizzazione.

(21)

Altre limitazioni in RSVP/ns sono la presenza di un solo stile di prenotazione (FF) invece dei tre stabiliti dall’RFC e, nell’ambito degli Integrated Services, della sola classe controlled-load.

Gli agent RSVP conservano i path e i reservation state su tutti i nodi RSVP e generano e processano i messaggi. In ogni agent c’è una struttura “session” per ogni sessione: essa contiene vari campi, tra cui i puntatori alle liste di psb e rsb, un flag che segnala il refresh e un flag che segnala la volontà di inviare un ResvConf Message in risposta ad un Resv Message. Le strutture “psb” e “rsb” ricalcano quasi fedelmente la composizione indicata dall’RFC.

Per le sessioni ci sono due liste, come mostra la figura 3.8: tutte le sessioni sono in una session_list e tutte le sessioni con state block (che devono essere quindi rinfrescate) sono in una timer_list, posta in ordine cronologico di refresh.

Il link per RSVP si basa su un duplex-intserv-link, al quale sono stati aggiunti un oggetto RSVPChecker (che ha il compito di intercettare i pacchetti RSVP sul collegamento e inviarli all’agent RSVP del nodo all’estremo del link) e uno scheduler WFQ (che usa gli algoritmi WFQ e WF2Q, con una coda best effort destinata a tutti i pacchetti che il classifier non riconosce

(22)

e, grazie all’opzione “borrow”, anche ai pacchetti delle varie classi che superano i limiti imposti).

Il comando per la creazione del link è:

$ns duplex-rsvp-link $n1 $n2 40Kb 10ms 0.8 1000 500 Param Null

che crea un collegamento bidirezionale tra i nodi n1 e n2 con banda pari a 40 Kbps e tempo di propagazione pari a 10 ms. Il parametro 0.8 sta ad indicare che l’80% della banda può essere allocata ai flussi RSVP e il restante 20% è destinato al traffico best effort. Inoltre 1000 bps sono riservati ai messaggi di segnalazione RSVP e la dimensione del buffer del link è fissata

Session Session Session

psb rsb psb rsb psb psb rsb rsb rsb psb psb rsb s_list t_list

(23)

in 500 byte. Infine sono indicati l’algoritmo di admission control e lo stimatore utilizzato per tale algoritmo, selezionabili tra una lista di opzioni.

Concludiamo la descrizione del modulo RSVP/ns con l’elenco dei vari comandi che mette a disposizione: nella tabella ci sono i comandi e i vari argomenti, e successivamente c’è una breve spiegazione della funzione svolta da ogni comando.

comando argomenti

1 add-rsvp-agent nodo

2 get-rsvp-agent nodo

3 session rsvpagent, destinazione, flowID

4 release rsvpagent, sessionID

5 sender rsvpagent, sessID, rate, bucket, TTL 6 reserve rsvpagent, sID, style, flow descr. list

7 confirm rsvpagent, sessionID

8 sessions rsvpagent

9 set-status rsvpagent, sessionID, valore 10 get-status rsvpagent, sessionID 11 set-handle rsvpagent, sessionID, oggetto 12 get-handle rsvpagent, sessionID

(24)

1. carica l’agent RSVP sul nodo indicato;

2. restituisce un handle per l’agent RSVP del nodo indicato; 3. crea una sessione con i parametri indicati;

4. rilascia una sessione;

5. manda un Path Message per segnalare la creazione di una sessione e i suoi parametri;

6. manda un Resv Message in risposta al messaggio di Path e indica, tra gli altri parametri, la banda da allocare;

7. manda un oggetto Resv_Conf col successivo messaggio di prenotazione;

8. fornisce una lista di tutte le sessioni nell’agent; 9. assegna un valore allo status della sessione; 10. fornisce il valore dello status della sessione;

11. assegna un handle a quell’oggetto di quella sessione; 12. fornisce l’handle di quell’oggetto per quella sessione. Nell’appendice A è inserito uno script di esempio che contiene tutte le più importanti funzionalità di questo modulo.

3.2.2. MNS

Il modulo MNS (MPLS Network Simulator) implementa il protocollo MPLS e le sue funzionalità principali (LDP e label switching). Creato dai ricercatori della Southern California University Gaeil Ahn e Woojik Chun, è stato successivamente

(25)

esteso alla versione 2 (MNS-v2.0), in cui il protocollo CR-LDP ha preso il posto del protocollo LDP.

Un nodo MPLS è formato da vari componenti [12], come mostra la figura 3.10, tra cui:

• LDP: genera e processa i messaggi LDP/CR-LDP;

• MPLS Classifier: esegue le operazioni sulle label dei pacchetti (push, pop e swap);

• Service Classifier: classifica i servizi che devono essere forniti ai pacchetti che arrivano, grazie alle informazioni delle label e delle interfacce, e associa ad ogni pacchetto la relativa prenotazione;

• Admission Control: guarda i Traffic Parameter di CR-LDP e determina se il nodo MPLS ha abbastanza risorse per fornire la QoS richiesta;

• Resource Manager: crea e cancella le code e gestisce le informazioni sulle risorse;

• Packet Scheduler: gestisce i pacchetti nelle code in modo che ricevano il servizio richiesto.

In particolare, per estendere il simulatore NS (IP-based) alle funzionalità MPLS, nel classico nodo IP sono stati aggiunti un classifier MPLS e un agente LDP. Quando un nodo MPLS riceve un pacchetto, il classifier MPLS determina se ha una

(26)

label o meno. Se la label c’è, il classifier esegue il label switching per il pacchetto, se la label non c’è ma il suo LSP esiste, il classifier lo gestisce come un pacchetto con label, altrimenti (né label né LSP) lo invia all’AddrClassifier, che esegue il normale forwarding di livello 3.

Per il Packet Scheduler è selezionato uno scheduling di tipo CBQ; nel mondo reale, tale componente è implementato nei nodi, in NS invece è stato implementato nei link

Per il label switching sono definite tre tabelle:

CR-LDP Messages Information Flooding Packet out Packet in Routing Protocol CR-LDP Address Classifier MPLS Classifier Resource Manager Admission Control Packet Scheduler Service Classifier

(27)

• Partial Forwarding Table (PFT): è la tabella usata per il mapping tra FEC e label; contiene per ogni riga il FEC, il FlowID e un puntatore ad una entry della tabella LIB; • Label Information Base (LIB): ha tutte le informazioni

necessarie al label switching dei pacchetti; in particolare per ogni LSP contiene le label e le interfacce di ingresso e di uscita;

• Explicit Route information Base (ERB): contiene le informazioni per gli ER-LSP attivati, come LSPID e ServiceID.

Quando arriva un pacchetto con label, il classifier trova la giusta entry nella tabella LIB per label e interfaccia d’uscita, in modo da poter effettuare le operazioni di label swapping, e la giusta entry nella tabella ERB per fornire l’appropriato servizio di accodamento. A seconda della classe di appartenenza, il classifier accoda il pacchetto nell’opportuno buffer del CBQ, che lo serve e lo trasmette sull’interfaccia d’uscita (figura 3.11).

Il processo di prenotazione delle risorse nei nodi e nei link MPLS avviene in questo modo: se il componente CR-LDP riceve un messaggio di Request CR-LDP, chiama l’Admission Control per verificare che il nodo abbia le risorse richieste; se così è, l’Admission Control prenota le risorse aggiornando la

(28)

Resource Table, e infine il messaggio di richiesta è inviato al successivo nodo MPLS.

Quando il componente CR-LDP riceve un messaggio di Mapping CR-LDP per il setup di un path con risorse, salva le informazioni sulla label e sull’interfaccia nella tabella LIB e le informazioni sul CR-LSP richiesto nella tabella ERB. Quindi chiama il Resource Manager per creare una coda destinata a servire il CR-LSP e salva il ServiceID nella ERB. Infine invia il messaggio di mapping al nodo successivo.

Packet Scheduler 2 (CBQ) Packet Scheduler 3 (CBQ) Packet Scheduler 1 MPLS Classifier Service Classifier Link 1 Link 3 Link 2 Lookup LIB Table Lookup ERB Table

(29)

Come mostra la figura 3.12, in MNS ci sono tre livelli di classi e quattro tipi di servizio (Signaling Traffic, Real-time Traffic, High priority Best-effort Traffic, Simple Best-effort Traffic).

Concludiamo anche questa sezione con la descrizione dei comandi Tcl messi a disposizione da MNS, elencati nella tabella 3.13:

1. crea un nodo MPLS;

2. configura gli agenti LDP su tutti i nodi creati;

3. attiva sui nodi la modalità control-driven (o data-driven, o on-demand, o ordered-control);

4. invia un messaggio di Release per rilasciare l’LSP con quel FEC; Link ST RT BT RT1 RT2 RTn HBT SBT Livello 3 Livello 1 Livello 2

(30)

comando argomenti 1 mpls-node 2 configure-ldp-on-all-mpls-nodes 3 enable-control-driven 4 send-ldp-release-msg FEC 5 send-ldp-withdraw-msg FEC

6 aggregate-flows FEC1, FEC2

7 setup-erlsp FEC, Explicit Route, LSPID 8 bind-flow-erlsp FEC, flowID, LSPID 9 cfg-cbq-for-SBTS dim. coda, tipo coda, banda, tempo

di coda, extra-delay

10 bind-flowid-to-SBTS flowID

11 bind-ldp-to-SBTS

12 setup-crlsp FEC, Exp.Route, LSPID, rate di traffico, dim. buffer, dim. pkt, setup

prio, holding prio 13 set-flow-prio FEC, flowID, priorità

14 collect-resource-info tempo

15 constraint-based-routing destinazione, banda 16 reroute-lsp-binding LSPID1, LSPID2 17 enable-reroute-egress-lsr

(31)

5. invia un messaggio di Withdraw per rilasciare l’LSP con quel FEC;

6. aggrega un flusso fine con FEC1 in un flusso grosso con FEC2;

7. crea un ER-LSP con i parametri indicati, inviando un messaggio CR-LDP Request;

8. associa un flusso con quel FEC e quel flowID all’ER-LSP con quell’LSPID;

9. configura CBQ su tutti i nodi MPLS con i parametri indicati per supportare la classe SBTS (oppure le altre classi);

10. associa i pacchetti con quel flowID al servizio SBTS (o agli altri servizi);

11. associa i pacchetti LDP al servizio SBTS (o agli altri servizi);

12. crea un CR-LSP con i parametri indicati, inviando un messaggio CR-LDP Request;

13. assegna al traffico con quel FEC e quel flowID la priorità indicata;

14. raccoglie le informazioni sulle risorse dai nodi MPLS con intervalli di tempo regolati dal parametro tempo indicato; 15. calcola un explicit route verso quella destinazione e con

(32)

16. associa ad un LSP primario un LSP alternativo; 17. permette ai nodi MPLS di fare merging.

Anche per il modulo MNS riportiamo uno script d’esempio con le maggiori funzionalità nell’appendice A.

Figura

Figura 3.2: esempio di visualizzazione NAM
Figura 3.3:formato del file di trace
Figura 3.4: oggetti reali e oggetti simulati Link
Figura 3.5: immagini tratte dalle animazioni NAM
+7

Riferimenti

Documenti correlati

Oggi, questo genere di giornalismo è particolarmente attivo a tutela dei diritti e delle libertà dei cittadini della Repubblica Popolare Cinese (RPC), e grazie a esso, anche

Under Article 6 of the Law on Labour Migration, even foreigners and stateless persons and holders of individual permits for labour activities in Azerbaijan, cannot be considered

Existing work displays an effect of the state of the in- frastructure, the availability of adequate rolling stock, as well as the competition with street and air transport on the

The petroleum industry offered many work positions to the local population and, even if the disputes between fishermen and oil companies is still open, many seem to still

Quindi in un corpo umano immerso in un campo magnetico variabile le densità di corrente più elevate sono quelle

Si vede che all’ aumentare dell’ intensit`a I viene a scavarsi un buco nella curva di assorbimento alla frequenza ω; la larghezza di tale buco `e pari alla larghezza di riga

Cypher (1990:123) notes that “the banks were important participants in the process of granting the Mexican government international loans from the private trans- national banks …

Una possibile fonte di errore può essere invece il fatto che può capitare, lavorando con query su diverse tabelle, di dovere estrarre campi con lo stesso nome, in questo caso