left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)

Agents

 

Oltre a nodi e links, una terza classe di oggetti fondamentale per realizzare una topologia di rete è quella degli agents. Gli agents vengono posti sui nodi e sono gli oggetti che guidano attivamente la simulazione: essi rappresentano i processi e/o le entità di trasporto che si trovano su host e router.

Per creare un agent di tipo <TYPE> bisogna creare un oggetto appartenente alla sottoclasse "Agent/<TYPE>" . Ad esempio per creare un agent chiamato tcp1 di tipo TCP si deve usare il comando:

set tcp1 [new Agent/TCP]

Una volta che l'agent è stato creato, bisogna porlo su un nodo. Ad esempio, supponendo che sia già stato creato un nodo n1, vi si può porre l'agent tcp1 usando il seguente comando:

$ns attach-agent $n1 $tcp1

In questo modo all'agent tcp1 viene automaticamente assegnato un numero di porta che sarà unico tra quelli di tutti gli agent che verranno posti sul nodo n1.

Sugli agents possono essere definite delle applicazioni. Ad esempio un agent di tipo tcp può  avere "attaccata" un'applicazione telnet o ftp.

Ogni agent ha dei parametri di configurazione ad esso associati che possono essere impostati. Ad esempio si può stabilire quale debba essere la dimensione dei pacchetti dell'agent tcp1 con il seguente comando: $tcp1 set packetSize_ 500. Oppure si può impostare la dimensione della finestra di tcp1 con il seguente comando: $tcp1 set window_ 25.

Si può anche impostare il valore di default di un certo parametro prima che vengano creati gli agent. Ad esempio con il comando Agent/TCP set window_ 30 si ottiene che tutti gli agent di tipo TCP che verranno creati avranno di default una dimensione della finestra pari a 30 segment.

 

Segue una lista degli AGENTS più interessanti SUPPORTATI DAL SIMULATORE NS:

  1. TCP: sorgente TCP che realizza un controllo di congestione ed una stima del round-trip-time come le reali sorgenti TCP "Tahoe". La finestra di congestione viene aumentata di un segment per ogni ACK ricevuto durante slow-start, poi viene aumentata di 1/(dimensione_corrente_della_finestra).
  2. TCP/Sack1: sorgente TCP che implementa selective repeat.
  3. TCP/Sink: destinatario di segment TCP che invia alla sorgente un ACK per ogni segment ricevuto.
  4. TCP/Sink/DelAck: destinatario di segment TCP che invia alla sorgente un ACK ogni interval_ ms, confermando quindi in una sola volta l'arrivo di più segment. Un segment "fuori-ordine di sequenza" causa la trasmissione immediata di un ack.
  5. TCP/FullTcp: sorgente che, a differenza delle altre sorgenti TCP disponibili, stabilisce la connessione scambiando i pacchetti SYN/FIN, supporta il trasferimento bidirezionale di dati, e numera i byte invece dei segment. Non è compatibile con le sorgenti TCP dei punti precedenti che supportano un flusso monodirezionale di dati.
  6. UDP: sorgente UDP, che differisce da quelle reali perché assegna ai pacchetti numeri di sequenza e timestamp.
  7. Null: agent che scarta tutti i pacchetti che riceve; può essere usato come semplice destinatario di pacchetti.
  8. CBR: sorgente che emette pacchetti di dimensione costante con rate costante (CBR = Constant Bit Rate).

 

Tra due agents <src> e <dest> bisogna creare una connessione perché essi si possano scambiare dei dati:

$ns connect <src> <dest>

Ad esempio supponiamo di aver creato un agent di tipo TCP chiamato tcp1 posto sul nodo n1 e un agent di tipo Null chiamato null0 posto sul nodo n0; per connetterli scriveremo: $ns connect $tcp1 $null0.

La connessione tra una sorgente e un destinatario è unica. Supponiamo ad esempio di volere che due sorgenti tcp1 e tcp2 trasmettano verso lo stesso nodo destinatario: dovremo creare su questo nodo due diversi destinatari snk1 e snk2 e connettere ognuno di essi con una delle due sorgenti. Infatti se si richiede una connessione su un destinatario che ne ha già in piedi un'altra, il destinatario abbandona la prima connessione e stabilisce quella nuova.

 

E' possibile assegnare un colore al flusso di pacchetti generato da un agent. Supponiamo ad esempio di voler assegnare il colore blu al flusso generato da un agent tcp1 e il colore rosso al flusso generato da un agent tcp2. Dopo aver creato tcp1 e tcp2 ed averli posti sui loro nodi, scriveremo:

$ns color 1 Blue

$ns color 2 Red

$tcp1 set fid_ 1

$tcp2 set fid_ 2

La assegnazione dei colori ai flussi va effettuata sempre richiamando i relativi agent e non le eventuali applicazioni poste su di essi.

left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)