Benvenuto a Computer Science & Co

di Daniele Santamaria

domenica 1 novembre 2009

TCL\OTCL (Tool Command Language\Object TCL)

1.0 Fondamenti

Tcl/Otcl è un linguaggio di scripting position-based, solitamente usato su sistemi embedded costituito da una sequenza di comandi separati dal carattere “newline” o ; . Ogni comando è composto da una o più parole che rappresentano la direttiva e i parametri presi in input. Ogni comando genera un suo output costituito da una stringa stampata a video. A differenza di molti linguaggi di scripting il Parser non assegna significati agli argomenti. Ad esempio il comando

% set y 4

Assegna alla variabile y il valore 4

% set x y+5

Assegna alla variabile x il valore stringa “y+5”

%set w $y+10

Assegna alla variabile w il valore stringa “4+10”. Il simbolo $ permette di accedere alla variabile memorizzata con il nome indicato subito dopo il carattere stesso.
Per effettuare le operazioni aritmetiche si ricorre al comando

%expr espressione

Dove espressione rappresenta l’espressione aritmetica che vogliamo calcolare. Il nome di una variabile può contenere lettere , numeri e underscore. Non è necessario definire variabili prima del loro uso. Con la sintassi [ comando ] è possibile inserire comandi come parametri di altri comandi. Ad esempio

%set x [ set y 10]

Assegnerà ad x ed a y il valore 10. In alternativa si può usare “ ”.

%set b 5
%set x “ b-5 vale [ expr $b-5] ”

Ora x varrà “b-5 vale 0”.
I caratteri speciali come $ possono essere ignorati se preceduti dal caratter \ . Ad esempio

%set x \$

Assegnerà ad x il valore stringa $ . Può anche permettere di scrivere un comando su più linee ignorando il carattere “invio”.
Il comando puts permette la scrittura su un determinato device. Per stampare su schermo scriviamo

%puts “ Esempio di stampa su schermo”

I commenti vanno preceduti dal carattere #
Adesso lavoriamo con le stringhe. Possiamo utilizzare i tradizionali caratteri speciali

* zero o più caratteri
? un singolo carattere
[ x-y] un carattere del set compreso dalle lettere qui indicate come x e y
[ ] un set tra i caratteri presenti all’interno delle parentesi.

Le stringhe possono essere manipolate mediante il comando

%String option ?args? ?args?

Vediamo alcune opzioni.


%string first pattern stringa2 ?start_index?

Cerca pattern in stringa2 a partire da start_index se specificato. Ritorna la posizione della prima occorrenza trovata, altrimenti ritorna -1. Possiamo usare l’opzione last al posto di first per avviare la ricerca a partire dall’ultimo carattere.

%string length stringa

ritorna il numero di caratteri presenti in stringa.

%stringa match ?-nocase? pattern stringa

verifica se pattern corrisponde a stringa, altrimenti ritorna -1. Con –nocase è possibile il match è case-unsensitive.

%string range stringa inizio fine

ritorna il range di caratteri trovati in stringa a partire dal pattern inizio e a finire con il pattern fine.

%string tolower stringa ?first? ?last?

ritorna la conversione in minuscolo di stringa a partire da first e a finire con last se questi sono specificati. Al posto di tolower si può specificare toupper per convertire in maiuscolo.

%scan string_format var_name ?var_name2?....

Effettua il parsing dei parametri indicati come var_name secondo la convenzione specificata da string_format. Ad esempio si può usare

%d per intero decimale
%o per intero ottale
%x per intero esadecimale
%b per intero binario
%c per singolo carattere

%format format_string ?arg1? ?arg2?...

Formatta arg1,arg2…. Second la convenzione specificata da format_string
Per ulteriori comandi potete consultare il manuale.

2.0 Liste e Array

Adesso vediamo come usare le liste. In tcl gli elementi di una lista vanno racchiusi tra {}. È possibile annidare più liste per creare matrici. Per creare una lista useremo il comando
%set nome_lista { elemento1 elemento2 ….}

mentre con il comando

%list nome_lista { elemento1 elemento2 ….}

si ottiene la stampa a video della lista ma non viene memorizzata.
Il primo elemento di una lista viene indicato con l’indice 0 mentre l’ultimo con l’indice end. Il comando

%lindex nome_lista ?indice?

restituisce l’elemento di indice ‘indice’ se specificato, altrimenti restituisce tutta la lista. Possiamo ordinare alfabeticamente una lista con il comando

%lsort nome_lista

Il comando supporta diverse opzioni.
Il comando

%lappend nome_lista elemento

inserisce ‘elemento’ alla fine della lista. In questo comando non va specificato il simbolo $ quando ci si riferisce ad una lista memorizzata . Ad esempio se creiamo la lista chiamata elenco e vogliamo inserire l’elemento ‘ultimo’ useremo

%lappend elenco ultimo

E non %lappend $elenco ultimo

Possiamo inserire un elemento nella posizione desiderata con il comando
%linsert nome_lista posizione elemento
Per sapere quanti elementi contiene una lista impartiamo

%llength nome_lista

Passiamo ora agli array. In tcl gli array sono associativi. Ciò vuol dire che l’indice è una stringa che possiamo scegliere a nostro piacere. Per creare una lista o per inserire un elemento usiamo il comando

%set array nome_array(indice) valore

Possiamo creare un array a partire da una lista con il comando

%set array nome_array [ list indice1 elemento1 indice2 elemento2 …]

Possiamo ottenere l’insieme delle coppie indice-valore con il comando

%array get nome_array

Qui non bisogna specificare $.Non otteniamo gli indici ordinati alfabeticamente ne secondo l’ordine di inserimento, ma secondo uno schema utilizzato da tcl per memorizzare la struttura dati. Per ottenere una lista di indici a partire da un pattern specifico usiamo

%array names nome_array ?pattern?

Se pattern non è specificato ritorna tutti i valori. Anche qui non va utilizzato il $.

3.0 Strutture di Controllo

Le strutture di controllo non differiscono molto dagli altri linguaggi. Qui però è importante rispettare la spaziatura tra un carattere e l’altro. Per maggiore chiarezza guardare gli esempi allegati.
Per la selezione:

if {espressione} {
body
} elseif {condizione} {
body
} else {
body
}

Per switch:

Switch ?option? string {
pattern1 body1
…..
}

Per while:

while {espressione} {
body
}

Per for:
for {variabile} {condizione} {cond_progr} {
body
}
Per foreach

foreach variabile { elem1 elem2 … } {
body
}


4.0 I/O su file

Adesso occupiamoci di I/O su file. I file possono essere acceduti mediante una variabile.
Per aprire un file impartiamo

%open nome_var [ open "nome_file" "mod"]

dove mod indica la modalità di accesso e può essere:
w+ per lettura e scrittura, crea il file se non esiste
r+ per lettura e scrittura, il file deve esistere
r per lettura
w per scrittura
..

Per scrivere un file usiamo il comando puts con parametro la nostra variabile.

%puts nome_var stringa

Chiudiamo il file con il comando

%close nome_var

Per leggere una riga usiamo il comando gets:

%gets nome_var

Per leggere byte usiamo il comando read

%read nome_var n

Dove n è il numero di byte che vogliamo leggere. La scrittura e la lettura verrà effettuata nella posizione in cui si trova il puntatore al file. Per muovere il puntatore nella posizione 'n' usiamo il comando:

%seek nome_var n

Per conoscere l'attuale posizione del puntatore invece diamo:

%tell nome_var

5.0 Procedure

In tcl le procedure possono essere definite per accettare un numero predefinito di elementi oppure un numero variabile. Inoltre possono essere richiamate ricorsivamente, possono ritornare valori o essere "void". Si definisce una procedura mediante la sintassi

proc nome_procedura args1... {

body

}

Se si decide di accettare un numero variabile di parametri, quando la procedura sarà invoca bisognerà racchiudere tutti i parametri tra " " oppure passarli come lista altrimenti l'interprete non sarà in grado di riconoscerli. Una procedura può anche accedere a variabile globali ma queste vanno prima definite prima della procedura, e poi bisognerà indicare all'interprete di cercare quella variabile fuori dalla procedura definita mediante il comando "%global var_name". Se ad esempio vogliamo usare la variabile globale "ciao" nella procedura "saluti" dobbiamo scrivere:

%set ciao ciao

%proc saluti tuo_nome {

global ciao

puts "$ciao $tuo_nome"

}


6.0 OTCL


Otcl è l’estensione ad oggetti di TCL. Anche se si parla di programmazione ad oggetti, OTCL non va pensato come un normale linguaggio Object Oriented come java o C++. In OTCL le classi possono essere definite in maniera incrementale, ovvero i metodi possono essere aggiunti in runtime. Ogni oggetto è un comando, ogni sottocomando è un argomento dell’oggetto. Possiamo definire una classe con il comando

%Class Nome_classe

e un oggetto con il comando

%Nome_classe nome_oggetto


Tutti le variabili e i metodo sono pubblici e tutte le classi ereditano dalla superclasse Object. Questa superclasse fornisce alcuni metodo per reperire informazioni sulle classi o sugli oggetti. Un oggetto può essere distrutto con il comando

%nome_oggetto destroy


Una variabile di un oggetto può essere instanziata con il comando


%nome_oggetto set nome_variabile valore

Se non specifichiamo il valore il comando fornità come risultato il valore attuale della variabile.
Una variabile di classe può essere instanziata con il comando

%nome_classe set nome_variabile valore

e può essere richiamata all'interno delle procedure mediante il comando

%class instvar nome_variabile

Da questo momento in poi, all'interno della procedura, la variabile di classe sarà disponibile.
Possiamo aggiungere un metodo ad una classe con il comando

%nome_classe instproc nome_metodo args1…. {
body
}

I metodi possono essere richiamati con il comando:

%nome_oggetto nome_metodo ?args?

La parola chiave $self può essere utilizzata per riferirsi all’interno di un metodo all’attuale oggetto instanziato . Il comando

%$self instvar nome_variabile

Permette di accedere alla variabile definita da qualche parte all’interno della classe grazie al comando 'instavar'. Un metodo particolare è il costruttore. Serve all’interprete per poter richiamare il costruttore di Object. Se non viene definito dal programmatore verrà implementato dall’interprete. Un metodo costruttore ha la forma:

%nome_classe instproc init {args} {
……body….
eval $self next $args
}

L’ultimo rigo di comando permette all’interprete di richiamare il costruttore della superclasse.
Otcl ammette l'ereditarietà multipla. Per per ereditare da una serie di classi usiamo:

%Class nome_classe -superclass {nome_superclasse1 nome_superclasse2....}

Nel caso in cui le superclassi implementassero metodi con stess prototipo e firma, uno soltanto dei metodi verrà ereditato. Sarà l'ordine con cui sono indicate le superclassi a stabilire quale sarà il metodo ereditato. Le classe indicata per prima avrà priorità maggiore rispetto alle successive. E' possibile scrivere classi in file script diversi. Basta scrivere il codice su file, ad esempio, un file per ogni classe, scrivere il "main" su di un file aggiungendo come primissime istruzioni i comandi

%source nome_script

uno per ogni file che abbiamo scritto. Il "main" sarà l'unico file che dovremmo eseguire direttamente.

Download1

Download2

Archivio Download1 aggiornato il 07/11/2009 alle 14.15

Archivio Download2 inserito il 10/11/2009 alle 19.55

Correzione post il 12/11/2009 alle 12.26

lunedì 24 agosto 2009

K

Known Iusses: insieme di problemi noti agli sviluppatori, posti all'attenzione degli utenti. Tali problemi possono rappresentare bugs non ancora risolti oppure emergono in corrispondenza di cattivi utilizzi da parte degli utenti o in presenza di software con problemi di compatibilità.

G

Good Practise: Insieme di buone norme da tenere in considerazione quando si programma in un determinato linguaggio o quando si utilizza un determinato software.

Grid Computing: infrastruttura informatica costituita da numerosi calcolatori distribuiti, distanti geograficamente, basata sulla condivisione organizzata delle risorse hardware, al fine di risolvere un problema comune all'intera struttura.

lunedì 10 agosto 2009

Fondamenti di HTML parte terza

Terza e ultima parte di fondamenti di html.

Download

martedì 4 agosto 2009

Fondamenti di HTML parte seconda

Seconda parte di fondamenti del linguaggio HTML (4.0)

Download

domenica 2 agosto 2009

Fondamenti di HTML parte prima

Prima parte di fondamenti del linguaggio html ( v4.0).

Download

sabato 27 giugno 2009

VIM Editor

Questo post riassume le principali funzioni del famoso editor VIM. VIM si basa su due modalità di funzionamento, una a "comandi" e una ad "inserimento". Con la prima modalità è possibile inviare comandi di gestione del programma, con la seconda è possibile modificare il file.All'avvio viene sempre eseguita la modalitàa comandi, per passare a quella ad inserimento premiamo 'i'. Per tornare al prompt dei comandi premiamo ESC. Occupiamoci dei comandi principali. In modalità comandi, inseriamo un comando preceduto dal simbolo ":" e seguito dalla pressione del tasto enter. I comandi preceduti da : sono comandi di fine riga,praticamente quelli che troverete nel 'menù file' di un moderno editor, tutti gli altri ci permettono di operare con il testo.Ad esempio impartiamo

:w per salvare le modifiche al file o:w nome_file se abbiamo aperto un nuovo file e vogliamo salvarlo.
:q per abbandonare la sessione di VIM.

I comandi possono anche essere concatenati. Ad esempio con

:wq nome_file salviamo ed usciamo dalla sessione di VIM.
:q! usciamo senza salvare le modifiche o il file.

Per operare con il testo useremo i seguenti comandi.Ad esempio:

w per spostare il cursore sul primo carattere della parola successiva.
b per spostarci sul primo carattere della parola precedente.
e per spostarci sull'ultimo carattere della parola successiva.
ge per spostarci sull'ultimo carattere della parola precedente.
$ per spostarci alla fine della riga.
^ per spostarci sul primo carattere (non di spaziatura) della riga.
0 per spostarci all'inizio della riga.
G per spostarci alla fine del documento.
gg per spostarci all'inizio del documento.
zz per centrare la schermata sulla riga dove è situato il cursore.
zt per far diventare la riga dove è situato il cursore la prima riga della schermata.
zb per far diventare la riga dove è situato il cursore l'ultima riga della schermata.

Per marcare una riga in modo da poterci tornare rapidamente usiamo il comando

mx dove x rappresenta una lettera.Per tornare su quella riga basterà usare il comando

'x dove x rappresenta la lettera marcatrice.


Il comando di fine riga
:marks mostra tutte le righe marcate con i rispettivi marcatori. I comandi

Ctrl+b e Ctrl+f si usano come i comandi page-up e page-down.
Ctrl+u e Ctrl+d compiono le stesse operazioni ma con metà schermata.


Il comando % permette di raggiungere, se il cursore è situato su una parentesi aperta o chiusa, la rispettiva parentesi chiusa o aperta. Altri comandi per l'editing sono

a passa alla modalità inserimento dopo aver spostato il cursore a destra dell'ultimo carattere sulla stessa riga.
I passa alla modalità inserimento dopo aver spostato il cursore a inizio riga.
o passa alla modalità inserimento dopo aver aggiunto una riga sotto il cursore .
O come o ma sulla riga sopra il cursore.
x cancella il carattere su cui si trova il cursore.
X cancella il carattere a sinistra del cursore.
dw per cancellare una paroladd per cancellare una intera riga.
D cancella tutto quello che segue il cursore fino alla fine della riga.
c(seguito da spazio) come d ma passa alla modalità inserimento.
cc(seguito da spazio) come dd ma passa alla modalità inserimento.
C(seguito da spazio) come D ma passa alla modalità inserimento.
u effettua un "undo".
CTRL+r effettua l'annullamento di un "undo".
. effettua un "redo".

Per cercare una stringa impartiamo

/stringa_da_cercare per cercare avanti nel testo.
?stringa_da_cercare per cercare indietro nel testo.

Per sostituire una stringa str con un'altra str2 impartiamo.

:s/str/str2 per sostituire una sola occorrenza.
:s/str/str2/g per sostiture tutte le occorrenze.

venerdì 26 giugno 2009

Configurazione delle Reti

1.0 Configurare le reti

In questo post vedremo come configurare reti tra macchine GNU-Linux. Utilizzeremo per semplicità macchine virtuali la cui installazione è stata vista in un post precedente. Partiremo da un semplice esempio per poi vederne di più complessi. Cominciamo dalla figura sotto:





Ci viene mostrata una semplice rete locale tra quattro macchine che potranno comunicare tra loro. Dalle impostazioni di una delle quattro macchine virtuali selezioniamo "Rete", e nel menù relativo alla voce "Connessa a" selezioniamo "Rete Interna" e diamo il nome lan0. Per le macchine rimanenti effettuiamo la stessa operazione e colleghiamole alla stessa rete lan0. A questo punto ci basta avviare tutte le quattro macchine, e in ciascuna di essa impartiamo il comando ifconfig eth0 xxx.xxx.xxx.y , dove eth0 indica la prima schede di rete, (eth1 la seconda e così via) e xxx.xxx.xxx.y indica l'indirizzo ip. Affichè le macchine possano comunicare devono appartenere alla stessa rete. Ad esempio se vogliamo che la nostra rete abbia indirizzo 192.168.10.0 impartiamo i seguenti comandi, uno per ogni macchina.


macchina1 -> ifconfig eth0 192.168.10.1/24


macchina2-> ifconfig eth0 192.168.10.2/24


macchina3-> ifconfig eth0 192.168.10.3/24


macchina4->ifconfig eth0 192.168.10.4/24



Con il comando ping xxx.xxx.xxxx.y controlliamo se la rete sta in effetti funzionando. Memorizziamo le modifiche effettuate agli indirizzi IP delle macchine modificando per ciascuna di esse il file di configurazione /etc/rc.d/rc.inet1.conf e inserendo l'indirizzo nella relativa scheda di rete. Adesso passiamo a qualcosina di più complicato. Guardiamo lo schema in basso


La figura ci mostra due host connessi tra loro attraverso un gateway (anche questo è un macchina virtuale slackware). In questo caso dobbiamo configurare diversamente le schede di rete. Aggiungiamo per la macchina a sinistra una scheda di rete connessa ad una lan interna che chiamiamo lan0. Per la macchina a destra aggiungiamo una schede di rete connessa ad una lan interna che chiamiamo lan1. La macchina al centro avrà ben due schede di rete, la prima (eth0) connessa alla lan0, e la seconda (eth1) connessa alla lan1. E' importante tenere a mente l'ordine delle schede se non vogliamo fare pasticci. A volte le macchine possono rinominare le schede di rete. Cancelliamo il file /etc/udev/rules.d/70-persistent-net.rules e riavviamo per risolvere. Adesso passiamo agli indirizzi IP. Assegniamo alla macchina a sinistra 192.168.10.2/24, al gateway sul dispositivo eth0 192.168.10.1/24 e su eth1 192.168.11.1/24, mentre alla macchina a destra assegnamo l'indirizzo 192.168.11.2/24. Come al solito se tutto è stato configurato per bene, dovremmo pingare il gateway sia dalla macchina a sinistra che da quella a destra. Adesso dobbiamo inserire le nuove regole di routing statico. Per prima cosa assicuriamoci che l'ip fowarding sia abilitato.Posizioniamoci sul gateway ed impartiamo i comandi


chmod +x /etc/rc.d/rc.ip_forward


e riavviamo il servizio con


/etc/rc.d/rc.ip_forward restart


Siamo già a buon punto. Noi vogliamo che la macchina 192.168.10.2 veda la macchina 192.168.11.2 e viceversa. Nella prima macchina impartiamo il comando


route add -net 192.168.11.0/24 gw 192.168.10.1


mentre nella seconda impartiamo


route add -net 192.168.10/24 gw 192.168.11.1


Con il primo comando stiamo semplicemente dicendo di dirottare tutti i pacchetti destinati alla rete 192.168.11.0 al gateway di indirizzo 192.168.10.1. Con il secondo comando facciamo la stessa cosa per la seconda rete e il suo gateway.Proviamo a pingare le due macchine per avere conferma del lavoro fatto. Possiamo attribuire ad ogni indirizzo un nome così da non doverli ricordare ogni volta. Modifichiamo il file /etc/hosts aggiugendo voci del tipo:


xxx.xxx.xxx.xxx nome_host


dove la sequenza di x è l'indirizzo ip dell'host e nome_host è il suo nome. Possiamo richiamare così la macchina ricorrendo ad un nome ASCII piuttosto che al suo indirizzo IP. Le tabelle di route non vengono mantenute al riavvio della macchina. Ovviamo al problema modificando il file di script /etc/rc.d/rc.local aggiungendo alla fine di esso gli stessi comandi così come li abbiamo visti (ricordate la sintassi di bash), oppure creando un apposito file di script e collegandolo a rc.local mediante il comando "source " seguito dal pathname del nostro script. Adesso estendiamo la figura precedente collegando il gateway ad internet come mostrato sotto.




Per raggiungere la configurazione desiderata basta poco. Aggiungiamo una terza scheda di rete (ad esempio eth3) al gateway collegata in NAT ed avviamo la macchina. Possiamo configurare manualmente la terza scheda di rete e per farlo dobbiamo consultare la guida di virtual box per sapere gli indirizzi di dns,gateway e ip della scheda. Otteniamo questi valori direttamente dalla nostra macchina eseguendo il comando


dhcpcd eth3


e attendiamo che termini. Per far sì che le altre due macchine possano collegarsi a internet diciamo loro di usare come gateway predefinito proprio il nostro gateway al centro della figura.Impartiamo il comando


route add default gw 192.168.10.1


per la macchina a destra e


route add default gw 192.168.11.1


per quella a destra. Fatto ciò proviamo a pingare un server remoto.Possiamo salvare la nostra configurazione modificando il file /etc/rc.d/rc.inet1.conf . Se vogliamo ottenere il servizio dhcp all'avvio del sistema, modifichiamo la voce " Use DHCP " della relativa scheda di rete in questo modo:


USE_DHCP[x]="yes"


dove x rappresenta il numero della scheda di rete. Per il gateway predefinito modifichiamo la voce


GATEWAY="xxx.xxx.xxx.xxx"


dove la sequenza di x rappresenta l'indirizzo ip. A volte potremmo desiderare di configurare un collegamento ad internet statico. La procedura è identica a quella vista fino ad ora, dobbiamo solo conoscere gli indirizzi corretti da assegnare al gateway e al dispositivo. Potete trovarli nel paragrafo 9.12 della guida di VirtualBox. Le tre tipologie che abbiamo appena visto rappresentano praticamente le basi per realizzare qualsiasi rete. Le prossime che vedremo saranno topologie un pò più complicate. Non spiegherò tutti i passi necessari a configurare le reti dato che li abbiamo già visti ma affronterò il "modus operandi" di affrontare il problema di una configurazione complessa. Concentriamoci sulla figura in basso.







In questo vi sono due gateway che connetto tra loro e ad internet 5 postazioni. L'approccio utilizzato fino ad ora non è più adatto a queste topologie. Innanzitutto perchè potremmo fare confusione facilmente, inoltre se la rete fosse reale e non virtuale dovremmo spostarci in continuazione tra le varie macchine distanti geograficamente, a volte, per chilometri. Noi dobbiamo ottimizzare la risorsa "fatica" e la risorsa "tempo". Procuriamoci dunque un foglio di carta e ricopiamo lo schema (o stampiamo la figura). Indichiamo tutti i dispositivi di rete affiancati dall'indirizzo ip che abbiamo scelto. Nel caso delle macchine virtuali indichiamo anche il nome della rete interna che abbiamo deciso evitando così di fare confusione. L'approccio migliore in questi casi è quello "top-down". Ricordiamo che dovremmo spostarci su ogni macchina al massimo due volte, una per la configurazione e un'altra, eventualmente, per il test finale. Iniziamo con la macchina collegata ad internet. Configuriamo gli indirizzi ip delle schede e l'accesso alla rete. Aggiungiamo le voci di route che permetteranno di raggiungere le tre macchine collegate al secondo gateway attraverso quest'ultimo. Ricordiamoci le modifiche al file rc.ip_forward. Adesso configuriamo le due macchine collegate al primo gateway, procedendo sempre prima con gli indirizzi di rete e poi con le voci di route per raggiungere le altre macchine collegate al secondo gateway e ad internet. Adesso tocca al secondo router. Sempre gli ip per prima, poi le voci di router per il collegamento ad internet e alle due macchine collegate al primo gateway. Infine i tre pc collegati al secondo gateway. Gli indirizzi ip per primo, il primo gateway e le due macchine a lui collegate,internet, e le rimanenti macchine al secondo gateway. Adesso, a ritroso, posizioniamoci sulle varie macchine per la fase di test. Ricordiamo di pingare tutte le altre macchine per l'assoluta certezza del successo dell'impresa. Ogni topologia di rete può richiedere un approccio diverso. Anche se dovremmo comunque dirigerci su ogni macchina potrebbe essere conveniente per fini logistici partire da alcune macchine piuttosto che da altre. La figura che segue prevede quattro gateway collegati tra loro, ciascuno di essi collegati con una propria macchina.





Dato l'alto numero di gateway, potremmo partire proprio da questi per configurare la rete, e poi successivamente configurare gli host. La figura in basso è un'altro esempio. Stavolta lascio scegliere a voi il punto da cui partire.

Potrebbe essere necessario dover collegare più schede di rete ad un host. L'interfaccia di virtual box permette di collegare fino a 4 dispositivi, gli altri dovremmo aggiungerli dalla console. Utilizziamo in sequenza i comandi

vboxmanage modifyvm [nome_macchina] -nic[num_dispositivo] [tipo_dispositivo]

I parametri sono racchiusi tra []. Il primo rappresenta il nome della macchina alla quale vogliamo aggiungere i dispositivi. Il secondo, [num_dispositivo] rappresenta il numero della scheda di rete ( praticamente da 5 in poi ), l'ultimo indica il tipo di rete, ad esempio "intnet" per la rete interna, "natnet" per la rete NAT ecc. Il secondo comando è:

vboxmanage modifyvm [nome_macchina] -[tipo_dispositivo][num_dispositivo] [nome_rete]

I primi tre parametri sono gli stessi del primo comando, l'ultimo invece rappresenta il nome da dare alla rete, ad esempio per una rete interna , il nome della lan interna. Il secondo e il terzo parametro NON devono essere separati da spazio, ad esempio se colleghiamo il quinto dispositivo di rete ad un rete interna chiamata lan5 nella macchina chiamata A scriveremo in questo modo i due comandi:

vboxmanage modifyvm A -nic5 intnet

vboxmanage modifyvm A -intnet5 lan5

vboxmanage modifyvm


2.0 Assegnare indirizzi ip e sottoreti

Fino ad ora abbiamo assegnato indirizzi ip in modo innaturale. Vediamo adesso come assegnare indirizzi ip e sottoreti quando un provider ci assegna una fascia di indirizzi. Supponiamo di ricevere l'indirizzo di classe B 142.154.0.0/16. Abbiamo a disposizione 2^(32-16)-2 indirizzi cioè 65534. L'azienda per cui lavoriamo ci chiede di realizzare inizialmente 3 sottoreti da 5000 ,5000 e 1000 indirizzi. Una rete da 5000 indirizzi richiede almeno 13 bit per indirizzare tutti gli host. In forma binaria cioè vuol dire


xxxxxxxx xxxxxxxx yyy-00000 00000000


dove la sequenza di x indicano i bit relativi all'indirizzo di rete , la sequenza di y quelli relativi al prefisso univoco di sottorete, gli zeri sono quelli dedicati agli hosts. In questo modo noi otteniamo 8 sottoreti da 2^13 hosts. Ad asempio il prefisso 111 possiamo usarlo per indirizzare una sottorete da 5000 host. Se traduciamo gli indirizzi in formato decimale otteniamo 142.154.224.0./19 .Gli indirizzi da assegnare agli hosts vanno dunque da 142.154.224.1 a 142.154.255.254. Il prefisso 110 lo usiamo per la seconda sottorete da 5000. In questo caso otteniamo l'indirizzo 142.154.192.0/19 cioè la fascia di indirizzi da 142.154.192.1 a 142.154.223.254 . Resta la sottorete da 1000 e la backbone. Prendiamo il prefisso 100 cioè la fascia di indirizzi da 142.154.128.1 a 142.154.159.254. Dividiamo in altre 8 sottoreti da 1024 hosts.


xxxxxxxx xxxxxxxx 100-yyy-00 00000000


Prendiamo il prefisso 111 cioè


xxxxxxxx xxxxxxxx 100111-00 00000000


Alle sottorete da 1000 host va dunque l'indirizzo 142.154.156.0/21 cioè da 142.154.156.1 a 142.154.159.254 . Per la backbone e per espansioni future ci servono sottoreti da pochi numeri. Possiamo dividere ulteriormente la sottorete ad esempio in 32 sottoreti da 8 hosts. Ci servono dunque altri 5 bit per la sottorete ad esempio


xxxxxxxx xxxxxxxx 10000000 00000-000


cioè la fascia 142.154.128.0/29 ovvero da 142.154.128.1. a 142.154.128.7.

Qui troverete lo schema della configurazione.

martedì 23 giugno 2009

Confronti tra Notazioni e Alcune equazioni di ricorrenza

Equazioni di ricorrenza svolte:

Download

Confronti tra Notazioni Asintotiche.

Download