cerca
Temi d'esame di Sistemi - 20/04/2006
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.TemiEsameSED11 History

Hide minor edits - Show changes to output

Changed line 342 from:
[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
to:
[[Torna alla pagina di Sistemi per l'elaborazione delle informazioni->Sistemi]]
Changed line 2 from:
[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
to:
[[Torna alla pagina di Sistemi per l'elaborazione delle informazioni->Sistemi]]
Changed lines 337-344 from:
''Un nome a dominio è costituito da una serie di stringhe separate da punti, ad esempio it.wikipedia.org. A differenza degli indirizzi IP, dove la parte più importante del numero è la prima partendo da sinistra, in un nome DNS la parte più importante è la prima partendo da destra. Questa è detta dominio di primo livello (o TLD, Top Level Domain), per esempio .org o .it.

Un dominio di secondo livello consiste in due parti, per esempio wikipedia.org, e così via. Ogni ulteriore elemento specifica un'ulteriore suddivisione. Quando un dominio di secondo livello viene registrato all'assegnatario, questo è autorizzato a usare i nomi di dominio relativi ai successivi livelli come it.wikipedia.org (dominio di terzo livello) e altri come some.other.stuff.wikipedia.org (dominio di quinto livello) e così via.''(fonte Wikipedia)\\\

Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia.
Anche secondo me è possibile: posso raggiungere la stessa macchina con nomi diversi, non è un problema, che i nomi siano distinti dal top level piuttosto che da un'altra etichetta. Vedi [[la paginetta sul DNS -> SistemiDNS]].

Attach:dns.jpg
to:
Sì. [[http://www.google.it | google.it]] e [[http://www.google.de | google.de]] mappano lo stesso indirizzo IP. Veramente non mappano un solo IP perchè google ne usa più di uno, ed è sensato pensare che ciò avvenga per distribuire il traffico, ma la sostanza non cambia: è possibilissimo che digitando i suddetti nomi, vengano tradotti nello stesso IP address.
Changed lines 187-188 from:
serverid = socket (PF_INET, SOCK_STREAM, 0);
to:
serverid = socket (PF_INET, SOCK_STREAM, 0);\\

//controllo socket
Changed line 193 from:
sockaddr_in addr = new sockaddr_in;
to:
sockaddr_in addr{
Changed lines 196-197 from:
addr.sin_addr = localhost; //non ho ancora capito che addresso mettere qui
to:
addr.sin_addr = localhost;} //non ho ancora capito che address mettere qui
Changed lines 206-207 from:
int list_status = listen(serverid, 1);
to:
int list_status = listen(serverid, 1);\\

//altro controllo
Changed line 212 from:
for (;;) {
to:
for (;;) { //andrebbe bene mettere anche un while(1)
Changed lines 214-215 from:
sockaddr client_addr;
to:
sockaddr_in = new client_addr; %green%chiedere per conferma%none%
Changed line 227 from:
//ora devo pseudo-scansionare la stringa comando in due parti:
to:
//ora dovrei pseudo-scansionare la stringa comando in due parti:
Changed line 236 from:
send(chi, &file, length(file), 0);
to:
send(chi, &file, length(file), 0);//qui gli ho mandato l'indirizzo del file "nomefile"\\
Changed line 239 from:
send(chi, "errore", ......);
to:
send(chi) = printf "errore" // manda a ''chi'' il messaggio d'errore \\
Changed line 250 from:
send(chi, "errore",.....);
to:
send(chi, "errore",.....); // stessa roba di prima\\
Changed lines 175-176 from:
%green% E' comunque incoerente come esercizio. Se qualcuno ha ipotesi di spiegazione le tiri fuori.
to:
Changed lines 308-309 from:
{+ ''Proxy-Connection'' +}:\\
to:
{+ ''Proxy-Connection'' +}:Dovrebbe riferirsi al proxy-server però non sono sicuro. I valori possibili dovrebbero essere ''close'' e ''keep-alive''.
Probabilmente si riferisce anche in questo caso alla possibilità di avere una connessione persistente o non-persistente però non col server, ma col proxy-server.
\\
Changed lines 315-318 from:
%warning%'''WARNING'''\\
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3. Dovrebbe riferirsi al proxy-server però non sono sicuro. I valori possibili dovrebbero essere ''close'' e ''keep-alive''.
Probabilmente si riferisce anche in questo caso alla possibilità di avere una connessione persistente o non-persistente però non col server, ma col proxy-server. Chiedere al Supremo.
to:
Changed lines 334-335 from:
No, perché la struttura del database DNS è ad albero rovesciato (con la radice in alto e le foglie in basso).\\
Questa immagine riassume come è strutturato in generale e non ci sono casi in cui un computer ha distinti Top Level Domain.\\\
to:
Changed lines 339-342 from:
%green%Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia penso, oppure finchè voglio.

%green%Anche secondo [[me -> Utenti.Dario]] è possibile: posso raggiungere la stessa macchina con nomi diversi, non è un problema, secondo me
, che i nomi siano distinti dal top level piuttosto che da un'altra etichetta. Vedi [[la paginetta sul DNS -> SistemiDNS]].
to:
Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia.
Anche secondo me è possibile: posso raggiungere la stessa macchina con nomi diversi, non è un problema
, che i nomi siano distinti dal top level piuttosto che da un'altra etichetta. Vedi [[la paginetta sul DNS -> SistemiDNS]].
Deleted lines 344-346:
%warning%'''WARNING'''\\
Da chiedere a Dario domattina
Changed lines 143-145 from:
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa.
\\Quindi: '''(dest - next hop - dist) G - F - 2'''.
to:
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa.\\
Quindi: '''(dest - next hop - dist) G - F - 2'''.
Changed lines 103-104 from:
In questo caso avrei una distanza pari a quella già presente nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router. Quindi devo ricordare che: '''(dest - next hop - dist) B - A - 3'''.
to:
In questo caso avrei una distanza pari a quella già presente nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router.\\
Quindi devo ricordare che: '''(dest - next hop - dist) B - A - 3'''.
Changed lines 110-111 from:
Non avendo in tabella informazioni per raggiungere A, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) A - B - 4'''.
to:
Non avendo in tabella informazioni per raggiungere A, aggiungo sicuramente questa.\\
Quindi: '''(dest - next hop - dist) A - B - 4'''.
Changed lines 115-116 from:
Non avendo in tabella informazioni per raggiungere F, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) F - B - 6'''.
to:
Non avendo in tabella informazioni per raggiungere F, aggiungo sicuramente questa.\\
Quindi: '''(dest - next hop - dist) F - B - 6'''.
Changed lines 136-137 from:
Anche in questo caso avrei una distanza pari a quelle già presenti nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router. Quindi devo ricordare che: '''(dest - next hop - dist) B - F - 3'''.
to:
Anche in questo caso avrei una distanza pari a quelle già presenti nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router.\\
Quindi: '''(dest - next hop - dist) B - F - 3'''.
Changed lines 143-146 from:
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) G - F - 2'''.

Quindi la tabella d'instradamento risultante per C sarebbe:
to:
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa.
\\Quindi: '''(dest - next hop - dist) G - F - 2'''.

La tabella d'instradamento risultante per C sarebbe:
Changed lines 18-19 from:
NOTA: ''la soluzione proposta è quella considerata corretta da Damiani (oggi 21 Gennaio 2008) (non garantiamo che domani la consideri altrettanto esatta), ma rimangono ancora troppi dubbi e incongruenze con il buonsenso e con la teoria vista. Ad ogni modo, eccola qua. Riporto anche le domande poste al prof, con annesse risposte. Chissà che a voi illuminino.''
to:
NOTA: ''la soluzione proposta è quella considerata corretta da Damiani (oggi 21 Gennaio 2008) (non garantisco che domani la consideri altrettanto esatta), ma rimangono ancora troppi dubbi e incongruenze con il buonsenso e con la teoria vista. Ad ogni modo, eccola qua. Riporto anche le domande poste al prof, con annesse risposte. Chissà che a voi illuminino.''
Changed lines 18-32 from:
%green%Dubbi + risposte di Damiani:\\\

* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
->''no tra adiacenti valgono 1''
* '''nelle informazioni passate nelle varie righe "da A: (B, 2)
...", i router indicati tra parentesi presumo siano le destinazioni. Devo quindi desumere che non mi vengono passate informazioni sui next hop?'''
->''infatti, deve presumerlo anche perche' questo e' il protocollo. Ogni router passa al vicino le info sulle destinazioni raggiungibili TRAMITE LUI, quindi lui e' il next hop''
* '''se per arrivare in un router destinazione devo passare per un next
hop, è giusto sommare le distanze? (in classe veniva aggiunto sempre +1 alla distanza col next hop, ma in questo caso otterrei valori incoerenti)'''
->''deve sommare, certo, la distanza nel messaggio con 1 che e' la distanza tra il mittente del messaggio (un router adiacente) e chi lo riceve m(il nss. router)
''
--> ma se mi arrivano messaggi solo da router adiacenti, vuol dire che TUTTI i server che mi hanno mandato messaggi sono adiacenti...
* '''del router G non so nulla?'''
->''se non arrivano messaggi che lo nominano, no.''
--> e infatti arriva almeno un messaggio che parla di G...

%green% E' comunque incoerente come esercizio. Se qualcuno ha una soluzione la
tiri fuori.
to:
NOTA: ''la soluzione proposta è quella considerata corretta da Damiani (oggi 21 Gennaio 2008) (non garantiamo che domani la consideri altrettanto esatta), ma rimangono ancora troppi dubbi e incongruenze con il buonsenso e con la teoria vista. Ad ogni modo, eccola qua. Riporto anche le domande poste al prof, con annesse risposte. Chissà che a voi illuminino.''

'''Domanda a Damiani
''': "Nelle informazioni passate nelle varie righe "da A: (B, 2) ...", i router indicati tra parentesi presumo siano le destinazioni. Devo quindi desumere che non mi vengono passate informazioni sui next hop?"\\
'''Risposta''': "Infatti, deve presumerlo anche perche' questo e' il protocollo. Ogni router passa al vicino le info sulle destinazioni raggiungibili TRAMITE LUI, quindi lui e
' il next hop"

I messaggi ricevuti dai vari router vanno quindi così interpretati:

(:table width=40% border=0 cellpadding=5 cellspacing=0:)
(:cellnr bgcolor=#d9e4f2 align=center:) '''Destinazione'''
(:cell bgcolor=#d9e4f2 align=center:) '''Next Hop'''
(:cell bgcolor=#d9e4f2 align=center:)
'''Distanza'''
(:cellnr align=center:)B
(:cell align=center:) A
(:cell align=center:) 2
(:cellnr bgcolor=#f5f9fc align=center:)E
(:cell bgcolor=#f5f9fc align=center:) A
(:cell bgcolor=#f5f9fc align=center:) 6
(:cellnr align=center:)A
(:cell align=center:) B
(:cell align=center:) 3
(:cellnr bgcolor=#f5f9fc align=center:)C
(:cell bgcolor=#f5f9fc align=center:) B
(:cell bgcolor=#f5f9fc align=center:) 5
(:cellnr align=center:)F
(:cell align=center:) B
(:cell align=center:) 5
(:cellnr bgcolor=#f5f9fc align=center:)C
(:cell bgcolor=#f5f9fc align=center:) D
(:cell bgcolor=#f5f9fc align=center:) 3
(:cellnr align=center:)F
(:cell align=center:) D
(:cell align=center:) 6
(:cellnr bgcolor=#f5f9fc align=center:)A
(:cell bgcolor=#f5f9fc align=center:) E
(:cell bgcolor=#f5f9fc align=center:) 5
(:cellnr align=center:)C
(:cell align=center:) E
(:cell align=center:) 4
(:cellnr bgcolor=#f5f9fc align=center:)F
(:cell bgcolor=#f5f9fc align=center:) E
(:cell bgcolor=#f5f9fc align=center:) 7
(:cellnr align=center:)B
(:cell align=center:) F
(:cell align=center:) 2
(:cellnr bgcolor=#f5f9fc align=center:)D
(:cell bgcolor=#f5f9fc align=center:) F
(:cell bgcolor=#f5f9fc align=center:) 7
(:cellnr align=center:)E
(:cell align=center:) F
(:cell align=center:) 3
(:cellnr bgcolor=#f5f9fc align=center:)G
(:cell bgcolor=#f5f9fc align=center:) F
(:cell bgcolor=#f5f9fc align=center:) 1
(:tableend:)

Mentre la tabella del router C sarà così formata:

(:table width=40% border=0 cellpadding=5 cellspacing=0:)
(:cellnr bgcolor=#d9e4f2 align=center:) '''Destinazione'''
(:cell bgcolor=#d9e4f2 align=center:) '''Next Hop'''
(:cell bgcolor=#d9e4f2 align=center:) '''Distanza'''
(:cellnr align=center:)B
(:cell align=center:) B
(:cell align=center:) 3
(:cellnr bgcolor=#f5f9fc align=center:)C
(:cell bgcolor=#f5f9fc align=center:) C
(:cell bgcolor=#f5f9fc align=center:) 0
(:cellnr align=center:)D
(:cell align=center:) D
(:cell align=center:) 6
(:cellnr bgcolor=#f5f9fc align=center:)E
(:cell bgcolor=#f5f9fc align=center:) E
(:cell bgcolor=#f5f9fc align=center:) 1
(:tableend:)

'''Domanda a Damiani''': "Ma se la distanza tra router adiacenti è 1, come si interpreta l'informazione che per arrivare a B il next hop è proprio B ed ha costo 3?"\\
'''Risposta''': "La distanza tra adiacenti e' un valore fisso (e.g., dipendente dalla banda) ma non necessariamente 1 (se non specificato dall'esercizio) quindi l'incremento da applicare alla distanza tra nodo mittente il messaggio e destinazione e' , se nota la distanza tra nodo ricevente il messaggio e nodo mittente; la stimo a 1 se non precisato altrimenti."

'''Domanda a Damiani''': "Come posso ricevere le tabelle dei router A, B, D, F se l'unico router adiacente è E? Le tabelle sono inviate in broadcast a tutti i router della rete, o solo agli adiacenti (ai vicini)?"\\
'''Risposta''': "I messaggi arrivano a tutti nei protocolli link state, solo agli adiacenti nei protocolli distance vector. qui e' un link state, quindi il nodo riceve messaggi da tutti (ovviamente gli sono inoltrati dagli adiacenti)" (piano piano piano: è un link-state??????) (turiamo il naso e andiamo avanti come vuole lui)

Considero uno alla volta i messaggi inviati a C dagli altri router. Li posso interpretare in questo modo:

* se '''A''' è il next-hop, allora posso arrivare a:
***'''B''' con distanza 2+1\\
In questo caso avrei una distanza pari a quella già presente nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router. Quindi devo ricordare che: '''(dest - next hop - dist) B - A - 3'''.
***'''E''' con distanza 6+1\\
In tabella arrivo ad E con costo 1, quindi questa informazione mi è del tutto inutile.

* se '''B''' è il next-hop, allora posso arrivare a:
***'''A''' con distanza 3+1\\
Non avendo in tabella informazioni per raggiungere A, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) A - B - 4'''.
***'''C''' con distanza 5+1\\
Dal momento che stiamo riempendo la tabella di instradamento del router C, non avrò sicuramente bisogno di conoscere da altri router come raggiungere me stesso. Quindi, anche in casi futuri, ignorerò informazioni che riguardano percorsi diretti a C.
***'''F''' con distanza 5+1\\
Non avendo in tabella informazioni per raggiungere F, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) F - B - 6'''.

* se '''D''' è il next-hop, allora posso arrivare a:
***'''C''' con distanza 3+1\\
Ignoro.
***'''F''' con distanza 6+1\\
Abbiamo visto prima che passando da B arrivo ad F con costo 6, quindi questa informazione mi è del tutto inutile.


* se '''E''' è il next-hop, allora posso arrivare a:
***'''A''' con distanza 5+1\\
Abbiamo visto prima che passando da B arrivo ad A con costo 4, quindi questa informazione mi è del tutto inutile.
***'''C''' con distanza 4+1\\
Ignoro.
***'''F''' con distanza 7+1\\
Abbiamo visto prima che passando da B arrivo ad F con costo 6, quindi questa informazione mi è del tutto inutile.


* se '''F''' è il next-hop, allora posso arrivare a:
***'''B''' con distanza 2+1\\
Anche in questo caso avrei una distanza pari a quelle già presenti nella tabella di C. Pur non migliorando il costo del tragitto, il professore consiglia comunque di aggiungerla in tabella, così da conoscere percorsi differenti in caso di interruzione della connessione tra due router. Quindi devo ricordare che: '''(dest - next hop - dist) B - F - 3'''.
***'''D''' con distanza 7+1\\
Dalla tabella iniziale sappiamo che passando da D arrivo a D con costo 6 (!!!), quindi questa informazione mi è del tutto inutile.
***'''E''' con distanza 3+1\\
Dalla tabella iniziale sappiamo che passando da E arrivo ad E con costo 1, quindi questa informazione mi è del tutto inutile.
***'''G''' con distanza 1+1\\
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa. Quindi: '''(dest - next hop - dist) G - F - 2'''.

Quindi la tabella d'instradamento risultante per C sarebbe:

(:table width=40% border=0 cellpadding=5 cellspacing=0:)
(:cellnr bgcolor=#d9e4f2 align=center:) '''Destinazione'''
(:cell bgcolor=#d9e4f2 align=center:) '''Next Hop'''
(:cell bgcolor=#d9e4f2 align=center:) '''Distanza'''
(:cellnr align=center:)A
(:cell align=center:) B
(:cell align=center:) 4
(:cellnr bgcolor=#f5f9fc align=center:)B
(:cell bgcolor=#f5f9fc align=center:) A / B / F
(:cell bgcolor=#f5f9fc align=center:) 3
(:cellnr align=center:)C
(:cell align=center:) C
(:cell align=center:) 0
(:cellnr bgcolor=#f5f9fc align=center:)D
(:cell bgcolor=#f5f9fc align=center:) D
(:cell bgcolor=#f5f9fc align=center:) 6
(:cellnr align=center:)E
(:cell align=center:) E
(:cell align=center:) 1
(:cellnr bgcolor=#f5f9fc align=center:)F
(:cell bgcolor=#f5f9fc align=center:) B
(:cell bgcolor=#f5f9fc align=center:) 6
(:cellnr align=center:)G
(:cell align=center:) F
(:cell align=center:) 2
(:tableend:)

%green% E' comunque incoerente come esercizio. Se qualcuno ha ipotesi di spiegazione le
tiri fuori.
Added lines 198-200:

%green%Anche secondo [[me -> Utenti.Dario]] è possibile: posso raggiungere la stessa macchina con nomi diversi, non è un problema, secondo me, che i nomi siano distinti dal top level piuttosto che da un'altra etichetta. Vedi [[la paginetta sul DNS -> SistemiDNS]].
Changed line 42 from:
/ creo il socket
to:
// creo il socket
Deleted lines 32-33:
Changed lines 41-44 from:
...

----
to:
[@
/ creo il socket
serverid = socket (PF_INET, SOCK_STREAM, 0);

if (serverid ==
-1) exit(CON_VERGOGNA);

// creo la struttura contenente l'indirizzo locale
sockaddr_in addr = new sockaddr_in;
addr.sin_family = PF_INET;
addr.sin_port = 666; //SÌ è un esercizio diabolico!
addr.sin_addr = localhost; //non ho ancora capito che addresso mettere qui

//bindo il socket all'indirizzo
//OCIO: length(addr) è pseudocodice per indicare la lunghezza di addr, probabilmente
//si può anche non metterlo
int status = bind (serverid, &addr, length(addr));

//ascoltiamo sulla porta
//1 indica che mantengo 1 solo client in coda. Infatti non voglio forkare né niente
//perché l'esercizio non ne parla: servo 1 client alla volta e vaffanculo
int list_status = listen(serverid, 1);

if (list_status ==
-1) exit(CON_VERGOGNA);

//Ora parte il ciclo infinito del grande puffo
for (;;) {
//creo una sockaddr che manterrà l'indirizzo del cliente
sockaddr client_addr;

//accept
int chi = accept(serverid, &client_addr, length(client_addr));

if (chi !=
-1) {
//creo una string ausiliaria che conterrà ciò che il client mi manda
string comando;

//ricevo ciò che il client mi manda
//128 è la lunghezza di ciò che ricevo, la invento.
recv(chi, &comando, 128, 0)

//ora devo pseudo
-scansionare la stringa comando in due parti:
//cmd = contiene il comando, che deve essere CHKIN o CHKOUT se no è errore
//nomefile = contiene il nomefile passatomi dal client

if (cmd == "CHKOUT") {
if (!exists(nomefile + ".lock") {
//creo nomefile.lock

//Qui file è un buffer contenente i dati del file chiamato nomefile
send(chi, &file, length(file), 0);
}
else {
send(chi, "errore", ......);
}
}
else if (cmd == "CHKIN") {
if (exists(nomefile + ".lock") {
//pseudo-cancello il file nomefile.lock

//anche qui file contiene il buffer di nomefile etc.
send(chi, &file, .....);
}
else {
send(chi, "errore",.....);
}
}
else {
//Il comando inviato dal client non è buono
send(chi, "errore", ...);
}
}

//chiudo il socket e tutti a nanna!
close(chi);
// chiudo il ciclo for infinito
}
@]
Changed line 28 from:
->''se non arrivano messaggi che lo nominano, no.''\\\
to:
->''se non arrivano messaggi che lo nominano, no.''
Added line 26:
--> ma se mi arrivano messaggi solo da router adiacenti, vuol dire che TUTTI i server che mi hanno mandato messaggi sono adiacenti...
Changed lines 29-30 from:
to:
--> e infatti arriva almeno un messaggio che parla di G...
Changed line 55 from:
All’ottava riga crea un’altra classe java che chiama ''server1''. In questa classe utilizza la funzione ''Socket'' per implementare il client.\\
to:
All’ottava riga crea un’altra classe java che chiama ''server1'' che serve per la comunicazione. In questa classe utilizza la funzione ''Socket'' per implementare il client.\\
Changed lines 57-58 from:
Nella ''try'' crea due oggetti ''InputStreamReader'' e ''PrintStream'' per attivare uno stream di comunicazione con il client (''InputStreamReader'' serve per leggere le richieste del client mentre ''PrintStream'' per inviare risposte al client).
La ''while'' non si ferma fino a che non viene inserito un carattere vuoto o uno spazio e quindi la ''System.out.println(from)'' continua a stampare il
carattere inserito.\\
to:
Nella ''try'' crea due oggetti ''InputStreamReader'' e ''PrintStream'' per attivare uno stream di comunicazione con il client: ''InputStreamReader'' serve per leggere le richieste del client mentre ''PrintStream'' per inviare risposte al client e dirgli se è connesso, dopodichè entra in un ciclo while. La ''while'' non si ferma fino a che non viene inserito un carattere vuoto e quindi la ''System.out.println(from)'' continua a stampare il carattere inserito. Finchè è in questo ciclo è connesso.\\
Added lines 61-62:
Se si è capito giusto dovrebbe essere il server di una chat... em... '''pseudo'''chat.
Changed lines 53-54 from:
Nella terza riga crea la classe java ''chatserver1'', all’interno di questa classe apre un server socket che chiama ''conn'' sulla porta ''888''. Con la ''accept()'' attiva la client request (l’attesa da parte del server della richiesta del client) e con la ''run'' richiama la funzione ''public void run()'' che si trova sotto.\\
to:
Nella terza riga crea la classe java ''chatserver1'', che è quella principale del main, che servirà per far funzionare il tutto. All’interno di questa classe apre un server socket che chiama ''conn'' sulla porta ''888''. Quindi ascolterà su questa porta.\\
Con la ''accept()'' attiva la client request (l’attesa da parte del server della richiesta del client) e con la ''run'' richiama la funzione ''public void run()'' che si trova sotto.\\
Changed lines 125-126 from:
Non sono sicuro al 100% di queste domande, provate a vedere se trovate materiale che smentisce quanto scritto.
to:
Da chiedere a Dario domattina
Changed lines 95-96 from:
Probabilmente si riferisce anche in questo caso alla possibilità di avere una connessione persistente o non-persistente però non col server, ma col proxy-server.
to:
Probabilmente si riferisce anche in questo caso alla possibilità di avere una connessione persistente o non-persistente però non col server, ma col proxy-server. Chiedere al Supremo.
Changed lines 111-112 from:
''Ad uno stesso nome di dominio, possono essere associati contemporaneamente record di tipo diverso, o più record dello stesso tipo. Questo generalmente viene fatto per suddividere il carico di un server molto frequentato su più computer che offrono lo stesso servizio.''(fonte Wikipedia - quindi credo sia esatto)\\
to:
Ad uno stesso nome di dominio, possono essere associati contemporaneamente record di tipo diverso, o più record dello stesso tipo. Questo generalmente viene fatto per suddividere il carico di un server molto frequentato su più computer che offrono lo stesso servizio.(fonte Wikipedia)\\
Changed line 120 from:
Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia penso, oppure finchè voglio.
to:
%green%Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia penso, oppure finchè voglio.
Changed lines 115-116 from:
Questa immagine riassume come è strutturato in generale e non ci sono casi in cui un computer ha distinti Top Level Domain.
to:
Questa immagine riassume come è strutturato in generale e non ci sono casi in cui un computer ha distinti Top Level Domain.\\\
''Un nome a dominio è costituito da una serie di stringhe separate da punti, ad esempio it.wikipedia.org. A differenza degli indirizzi IP, dove la parte più importante del numero è la prima partendo da sinistra, in un nome DNS la parte più importante è la prima partendo da destra. Questa è detta dominio di primo livello (o TLD, Top Level Domain), per esempio .org o .it.

Un dominio di secondo livello consiste in due parti, per esempio wikipedia.org, e così via. Ogni ulteriore elemento specifica un'ulteriore suddivisione. Quando un dominio di secondo livello viene registrato all'assegnatario, questo è autorizzato a usare i nomi di dominio relativi ai successivi livelli come it.wikipedia.org (dominio di terzo livello) e altri come some.other.stuff.wikipedia.org (dominio di quinto livello) e così via.''(fonte Wikipedia)\\\

Secondo quello che dice Wikipedia invece si, suppondendo che io abbia un dominio it.wikipedia.org potrei avere un livello successivo con cioè some.other.stuff.wikipedia.org eccetera.. finchè me lo permette la gerarchia penso, oppure finchè voglio.
Changed lines 109-110 from:
(Vedi pag. 495 del libro)\\
to:
(Vedi pag. 495 del libro)\\\
Changed lines 109-110 from:
(Vedi pag. 495 del libro)
to:
(Vedi pag. 495 del libro)\\

''Ad uno stesso nome di dominio, possono essere associati contemporaneamente record di tipo diverso, o più record dello stesso tipo. Questo generalmente viene fatto per suddividere il carico di un server molto frequentato su più computer che offrono lo stesso servizio.''(fonte Wikipedia - quindi credo sia esatto)\\
Changed line 20 from:
%green%* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
to:
* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
Changed lines 27-30 from:
->''se non arrivano messaggi che lo nominano, no.''
to:
->''se non arrivano messaggi che lo nominano, no.''\\\

%green% E' comunque incoerente come esercizio. Se qualcuno ha una soluzione la tiri fuori.
Changed line 20 from:
* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
to:
%green%* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
Added line 19:
Changed line 18 from:
Dubbi + risposte di Damiani
to:
%green%Dubbi + risposte di Damiani:\\\
Changed line 20 from:
''no tra adiacenti valgono 1''
to:
->''no tra adiacenti valgono 1''
Changed line 22 from:
''infatti, deve presumerlo anche perche' questo e' il protocollo. Ogni router passa al vicino le info sulle destinazioni raggiungibili TRAMITE LUI, quindi lui e' il next hop''
to:
->''infatti, deve presumerlo anche perche' questo e' il protocollo. Ogni router passa al vicino le info sulle destinazioni raggiungibili TRAMITE LUI, quindi lui e' il next hop''
Changed line 24 from:
''deve sommare, certo, la distanza nel messaggio con 1 che e' la distanza tra il mittente del messaggio (un router adiacente) e chi lo riceve m(il nss. router)''
to:
->''deve sommare, certo, la distanza nel messaggio con 1 che e' la distanza tra il mittente del messaggio (un router adiacente) e chi lo riceve m(il nss. router)''
Changed lines 26-29 from:
''se non arrivano messaggi che lo nominano, no.''
to:
->''se non arrivano messaggi che lo nominano, no.''
Changed lines 18-19 from:
...
to:
Dubbi + risposte di Damiani
* '''le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? '''
''no tra adiacenti valgono 1''
* '''nelle informazioni passate nelle varie righe "da A: (B, 2)
...", i router indicati tra parentesi presumo siano le destinazioni. Devo quindi desumere che non mi vengono passate informazioni sui next hop?'''
''infatti, deve presumerlo anche perche' questo e' il protocollo. Ogni router passa al vicino le info sulle destinazioni raggiungibili TRAMITE LUI, quindi lui e' il next hop''
* '''se per arrivare in un router destinazione devo passare per un next hop, è giusto sommare le distanze? (in classe veniva aggiunto sempre +1 alla distanza col next hop, ma in questo caso otterrei valori incoerenti)'''
''deve sommare, certo, la distanza nel messaggio con 1 che e' la distanza tra il mittente del messaggio (un router adiacente) e chi lo riceve m(il nss. router)''
* '''del router G non so nulla?'''
''se non arrivano messaggi che lo nominano, no.''
Changed lines 35-36 from:
Attach:Uni/SED11.jpg
to:
Attach:Uni/SocketJava.jpg
Changed lines 39-40 from:
...
to:
Le prime due righe servono per importare i pacchetti ''.net'' e ''.io''.\\
Nella terza riga crea la classe java ''chatserver1'', all’interno di questa classe apre un server socket che chiama ''conn'' sulla porta ''888''. Con la ''accept()'' attiva la client request (l’attesa da parte del server della richiesta del client) e con la ''run'' richiama la funzione ''public void run()'' che si trova sotto.\\
All’ottava riga crea un’altra classe java che chiama ''server1''. In questa classe utilizza la funzione ''Socket'' per implementare il client.\\
Successivamente definisce la funzione ''run()'' che permette la gestione del servizio.\\
Nella ''try'' crea due oggetti ''InputStreamReader'' e ''PrintStream'' per attivare uno stream di comunicazione con il client (''InputStreamReader'' serve per leggere le richieste del client mentre ''PrintStream'' per inviare risposte al client).
La ''while'' non si ferma fino a che non viene inserito un carattere vuoto o uno spazio e quindi la ''System.out.println(from)'' continua a stampare il carattere inserito.\\
La ''s.close()'' chiude il socket.\\
La ''catch'' coglie l'eccezione e avvisa che è disconnesso.\\\
Changed lines 86-87 from:
...
to:
'''1.'''\\
E’ possibile che ad un solo nome DNS corrispondano più indirizzi IP addresses perché i nomi gerarchici vengono assegnati secondo la struttura delle organizzazioni che ottengono l’autorità per parti dello spazio di denominazione e non necessariamente secondo la struttura delle interconnessioni fisiche
.\\
Quindi può accadere che un singolo gruppo possegga macchine su più reti fisiche.
(Vedi pag. 495 del libro)

'''2.'''\\
No, perché la struttura del database DNS è ad albero rovesciato (con la radice in alto e le foglie in basso).\\
Questa immagine riassume come è strutturato in generale e non ci sono casi in cui un computer ha distinti Top Level Domain.

Attach:dns.jpg


%warning%'''WARNING'''\\
Non sono sicuro al 100% di queste domande, provate a vedere se trovate materiale che smentisce quanto scritto
.
Changed line 13 from:
'''(da F: (B, 2), (D, 7), (E, 3), (G, 1))'''\\
to:
'''(da F: (B, 2), (D, 7), (E, 3), (G, 1))'''\\\
Changed lines 14-15 from:
Al router C risultano il costo verso B a 3, verso D a 6 e verso E a 1. Calcolate la tabella di instradamento da C verso gli altri router.
to:
'''Al router C risultano il costo verso B a 3, verso D a 6 e verso E a 1. Calcolate la tabella di instradamento da C verso gli altri router.'''
Changed lines 14-15 from:
to:
Al router C risultano il costo verso B a 3, verso D a 6 e verso E a 1. Calcolate la tabella di instradamento da C verso gli altri router.
Changed lines 74-75 from:
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3
to:
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3. Dovrebbe riferirsi al proxy-server però non sono sicuro. I valori possibili dovrebbero essere ''close'' e ''keep-alive''.
Probabilmente si riferisce anche in questo caso alla possibilità di avere una connessione persistente o non-persistente però non col server, ma col proxy-server.
Added line 72:
Changed lines 74-75 from:
Manca il campo proxy-connection
to:
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3
Changed line 72 from:
%warning% '''WARNING'''
to:
%warning%'''WARNING'''\\
Changed lines 32-33 from:
!!Esercizio 2
to:
!!Esercizio 3
Changed line 66 from:
NOTA: questo campo può essere solo ‘’open’’(persistente) o ‘’close’’(non persistente).\\
to:
NOTA: questo campo può essere solo ''open''(persistente) o ''close''(non persistente).\\
Changed lines 72-74 from:
to:
%warning% '''WARNING'''
Manca il campo proxy-connection
Changed lines 58-59 from:
...
to:
{+ ''GET'' +}: il GET richiede qualunque oggetto sia stato identificato dalla URL di richiesta. In questo caso viene utilizzata una versione http/1.0 quindi utilizza connessioni non persistenti, cioè ogni sessione TCP viene chiusa dopo che il server ha risposto alla richiesta del client.\\
{+ ''Host'' +}: questo campo specifica l’host e il numero di porta della risorsa richiesta. Se il numero di porta non è specificato, viene utilizzata la porta di default per il servizio richiesto (ex: la porta 80 per un HTTP URL).\\
{+ ''User-Agent'' +}: contiene informazioni (ex: nome / versione) riguardo all’user agent (il browser web) che ha eseguito la richiesta. Le informazioni sono inserite in ordine di importanza. Usato principalmente per fini statistici.\\
{+ ''Accept'' +}: viene utilizzato per indicare la lista dei dati che il client può trattare, in formato MIME.
;q=numero il valore di q ( che va da 0 a 1) si definisce la preferenza relativa al tipo indicato. Se non è indicato q gli viene attribuito il valore 1, cioè la preferenza massima.\\
{+ ''Accept-Encoding'' +}: Indica il tipo di encoding che il client può accettare.\\
{+ ''Accept-Charset'' +}: Indica i charset (set di caratteri per le diverse lingue) che il client accetta e in che ordine.\\
{+ ''Connection'' +}: indica una connessione non persistente.\\
NOTA: questo campo può essere solo ‘’open’’(persistente) o ‘’close’’(non persistente).\\
{+ ''Proxy-Connection'' +}:\\
{+ ''Referer'' +}: è l’URL di un elemento che conduce all’elemento corrente. Rappresenta la fonte dal quale un utente è venuto a conoscenza di una pagina.\\
{+ ''If-Modified-Since'' +}: se la pagina richiesta non è stata modificata dalla data che è inserita in questo campo il server restituisce 304(not modified) senza nessun dato nel body e viene caricata la copia memorizzata nella cache. Se invece la pagina è stata modificata dalla data inserita nel campo allora la pagina viene caricata.\\
NOTA: il valore di questo campo usato insieme alla richiesta GET viene utilizzato per creare un CONDITIONAL GET. Questo viene fatto per migliorare le prestazioni delle risposte, restituendo la copia memorizzata in cache anziché effettuare ricerche sul server.\\\
Changed line 8 from:
'''Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:'''
to:
'''Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:'''\\
Changed line 64 from:
# '''E' possibile che a un solo nome DNS corrispondano più indirizzi IP addressess? Perché si o perché no?'''
to:
# '''E' possibile che a un solo nome DNS corrispondano più indirizzi IP addresses? Perché si o perché no?'''
Changed line 64 from:
# '''E' possibile che a un solo nome DNS corrispondano più indirizzi IP adressess? Perché si o perché no?'''
to:
# '''E' possibile che a un solo nome DNS corrispondano più indirizzi IP addressess? Perché si o perché no?'''
Changed lines 35-47 from:

''import java
.net.*'' \\
''import java.io.*'' \\
''class chatserver1 {'' \\
'' public static void main(String args[]) throws Exception {'' \\
'' ServerSocket conn = new ServerSocket( 888 );'' \\
'' new server1(conn.accept()).run(); }'' \\
''}'' \\
''class server1 {'' \\
'' Socket s; '' \\
'' '' \\
'' '' \\
to:
Attach:Uni/SED11.jpg
Changed lines 73-74 from:
[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
to:
[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
Added lines 32-52:
!!Esercizio 2

'''Commentate brevemente il codice che segue, spiegando il significato delle principali chiamate che utilizza:'''\\

''import java.net.*'' \\
''import java.io.*'' \\
''class chatserver1 {'' \\
'' public static void main(String args[]) throws Exception {'' \\
'' ServerSocket conn = new ServerSocket( 888 );'' \\
'' new server1(conn.accept()).run(); }'' \\
''}'' \\
''class server1 {'' \\
'' Socket s; '' \\
'' '' \\
'' '' \\

%red%[-'''SOLUZIONE'''-]

...

----
Changed lines 35-49 from:
''GET http://www.dti.unimi.it/'' \\
''Content-Lenght: 83492'' \\
''Content-Type: text/html'' \\
''Content-Location: http://olaf.crema.unimi.it:80/Default.htm'' \\
''Last-Modified: Tue
, 10 Jan 2007 16:37:51 GMT'' \\
''Accept-Ranges: bytes'' \\
''ETag: "b327d632416c61:242"'' \\
''Server: ''Microsoft-IIS/6.0 \\
''X-Powered-By: ASP.NET'' \\
''Date: Sun, 29 Jan 2006 16:30:54 GMT'' \\
''Connection: close'' \\\

# '''Fornite la richiesta HTTP che più probabilmente ha causato la risposta'''
# ''''''
to:
''GET http://www.dti.unimi.it/~sistemi/esame.html HTTP/1.0'' \\
''Host: www.dti.unimi.it'' \\
''User-Agent: Mozilla/5.0'' \\
''Accept
: text/html, application/xml, application/xhtml+xml, text/html; q=0.9, text/plain; q=0.8, image/png, */*; q=0.5'' \\
''Accept-Encoding: gzip, deflate'' \\
''Accept-Charset: ISO-8859-1, utf-8'' \\
''Connection: close'' \\
''Proxy-Connection: close \\
''Referer: http://olaf.crema.unimi.it/sistemi'' \\
''If-Modified-Since: Thu, 09 Sept 2006 20:35:32 GMT'' \\\
Changed lines 32-35 from:
!!Esercizio 3
'''L'accesso ad un sito restituisce il seguente header:'''

''HTTP/1.1 200 OK'' \\
to:
!!Esercizio 4
'''Spiegate il significato dei campi della seguente richiesta HTTP:'''

''GET http://www.dti.unimi.it/'' \\
Changed lines 48-49 from:
# '''Spiegate il significato di almeno cinque campi dello header ricevuto'''
to:
# ''''''
Changed lines 58-62 from:
# '''Il protocollo RPC si basa su UDP o TCP? Quali sono le possibili motivazioni della scelta?'''
# '''Spiegare cosa è il protocollo CHAP e quando si usa'''
# '''Spiegare cosa è il formato MIME ed elencare almeno due protocolli applicativi che ne fanno uso
'''
to:
# '''E' possibile che a un solo nome DNS corrispondano più indirizzi IP adressess? Perché si o perché no?'''
# '''Un computer può avere due nomi DNS che appartengono a distinti Top Level Domain? Se sì fornite un esempio, altrimenti spiegate perché no'''
Changed line 23 from:
'''Siete stati incaricati di scrivere usando la socket library un server remoto in grado di ricevere i comandi CHKOUT nomefile e CHKIN nomefile. Il primo comando se nella directory del server non è già presente il file ausiliario nomefile.lock, lo crea e poi trasferisce il file nomefile al chiamante; altrimenti stampa un messaggio d'errore. Il secondo se nella directory del server è presente il file ausiliario nomefile.lock lo cancella e trasferisce il file nomefile dal chiamante al server e cancella il file; altrimenti stampa un messaggio d'errore.\\
to:
'''Siete stati incaricati di scrivere usando la socket library un server remoto in grado di ricevere i comandi ''CHKOUT nomefile'' e ''CHKIN nomefile''. Il primo comando se nella directory del server non è già presente il file ausiliario ''nomefile.lock'', lo crea e poi trasferisce il file ''nomefile'' al chiamante; altrimenti stampa un messaggio d'errore. Il secondo se nella directory del server è presente il file ausiliario ''nomefile.lock'' lo cancella e trasferisce il file ''nomefile'' dal chiamante al server e cancella il file; altrimenti stampa un messaggio d'errore.\\
Added lines 1-69:
(:title Temi d'esame di Sistemi - 20/04/2006:)
[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
----

%titolo%''':: Temi d'esame di Sistemi - 20/04/2006 ::'''

!!Esercizio 1
'''Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:'''
'''(da A: (B, 2), (E, 6))'''\\
'''(da B: (A, 3), (C, 5), (F, 5))'''\\
'''(da D: (C, 3), (F, 6))'''\\
'''(da E: (A, 5), (C, 4), (F, 7))'''\\
'''(da F: (B, 2), (D, 7), (E, 3), (G, 1))'''\\


%red%[-'''SOLUZIONE'''-]

...

----

!!Esercizio 2
'''Siete stati incaricati di scrivere usando la socket library un server remoto in grado di ricevere i comandi CHKOUT nomefile e CHKIN nomefile. Il primo comando se nella directory del server non è già presente il file ausiliario nomefile.lock, lo crea e poi trasferisce il file nomefile al chiamante; altrimenti stampa un messaggio d'errore. Il secondo se nella directory del server è presente il file ausiliario nomefile.lock lo cancella e trasferisce il file nomefile dal chiamante al server e cancella il file; altrimenti stampa un messaggio d'errore.\\
Specificate lo pseudocodice del server mettendo in rilievo le chiamate della socket library che utilizzate.'''

%red%[-'''SOLUZIONE'''-]

...

----

!!Esercizio 3
'''L'accesso ad un sito restituisce il seguente header:'''

''HTTP/1.1 200 OK'' \\
''Content-Lenght: 83492'' \\
''Content-Type: text/html'' \\
''Content-Location: http://olaf.crema.unimi.it:80/Default.htm'' \\
''Last-Modified: Tue, 10 Jan 2007 16:37:51 GMT'' \\
''Accept-Ranges: bytes'' \\
''ETag: "b327d632416c61:242"'' \\
''Server: ''Microsoft-IIS/6.0 \\
''X-Powered-By: ASP.NET'' \\
''Date: Sun, 29 Jan 2006 16:30:54 GMT'' \\
''Connection: close'' \\\

# '''Fornite la richiesta HTTP che più probabilmente ha causato la risposta'''
# '''Spiegate il significato di almeno cinque campi dello header ricevuto'''

%red%[-'''SOLUZIONE'''-]

...

----

!!Domande:

# '''Il protocollo RPC si basa su UDP o TCP? Quali sono le possibili motivazioni della scelta?'''
# '''Spiegare cosa è il protocollo CHAP e quando si usa'''
# '''Spiegare cosa è il formato MIME ed elencare almeno due protocolli applicativi che ne fanno uso'''


%red%[-'''SOLUZIONE'''-]

...

----

[[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]