Uni.TemiEsameSED11 History
Hide minor edits - Show changes to markup
serverid = socket (PF_INET, SOCK_STREAM, 0);
serverid = socket (PF_INET, SOCK_STREAM, 0);
//controllo socket
sockaddr_in addr = new sockaddr_in;
sockaddr_in addr{
addr.sin_addr = localhost; //non ho ancora capito che addresso mettere qui
addr.sin_addr = localhost;} //non ho ancora capito che address mettere qui
int list_status = listen(serverid, 1);
int list_status = listen(serverid, 1);
//altro controllo
for (;;) {
for (;;) { //andrebbe bene mettere anche un while(1)
sockaddr client_addr;
sockaddr_in = new client_addr; chiedere per conferma
//ora devo pseudo-scansionare la stringa comando in due parti:
//ora dovrei pseudo-scansionare la stringa comando in due parti:
send(chi, &file, length(file), 0);
send(chi, &file, length(file), 0);//qui gli ho mandato l'indirizzo del file "nomefile"\\
send(chi, "errore", ......);
send(chi) = printf "errore" // manda a chi il messaggio d'errore \\
send(chi, "errore",.....);
send(chi, "errore",.....); // stessa roba di prima\\
E' comunque incoerente come esercizio. Se qualcuno ha ipotesi di spiegazione le tiri fuori.
Proxy-Connection :\\
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.\\
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.
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.\\\
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.
Anche secondo me è 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.
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.
WARNING
Da chiedere a Dario domattina
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa. \\Quindi: (dest - next hop - dist) G - F - 2.
Non avendo in tabella informazioni per raggiungere G, aggiungo sicuramente questa.
Quindi: (dest - next hop - dist) G - F - 2.
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.
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.
Non avendo in tabella informazioni per raggiungere A, aggiungo sicuramente questa. Quindi: (dest - next hop - dist) A - B - 4.
Non avendo in tabella informazioni per raggiungere A, aggiungo sicuramente questa.
Quindi: (dest - next hop - dist) A - B - 4.
Non avendo in tabella informazioni per raggiungere F, aggiungo sicuramente questa. Quindi: (dest - next hop - dist) F - B - 6.
Non avendo in tabella informazioni per raggiungere F, aggiungo sicuramente questa.
Quindi: (dest - next hop - dist) F - B - 6.
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.
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.
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:
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:
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.
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.
Dubbi + risposte di Damiani:
- le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi?
- 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?
- 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)
- del router G non so nulla?
E' comunque incoerente come esercizio. Se qualcuno ha una soluzione la tiri fuori.
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.
- B con distanza 2+1
- 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.
- A con distanza 3+1
- 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.
- C con distanza 3+1
- 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.
- A con distanza 5+1
- 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.
- B con distanza 2+1
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:)
E' comunque incoerente come esercizio. Se qualcuno ha ipotesi di spiegazione le tiri fuori.
Anche secondo me è 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.
/ creo il socket
// creo il socket
...
/ 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 }
- ma se mi arrivano messaggi solo da router adiacenti, vuol dire che TUTTI i server che mi hanno mandato messaggi sono adiacenti...
- e infatti arriva almeno un messaggio che parla di G...
All’ottava riga crea un’altra classe java che chiama server1. In questa classe utilizza la funzione Socket per implementare il client.\\
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.\\
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.\\
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.\\
Se si è capito giusto dovrebbe essere il server di una chat... em... pseudochat.
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.\\
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.\\
Non sono sicuro al 100% di queste domande, provate a vedere se trovate materiale che smentisce quanto scritto.
Da chiedere a Dario domattina
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.
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.
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)
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)
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.
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.
Questa immagine riassume come è strutturato in generale e non ci sono casi in cui un computer ha distinti Top Level Domain.
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.
(Vedi pag. 495 del libro)
(Vedi pag. 495 del libro)
(Vedi pag. 495 del libro)
(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)
* le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi?
- le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi?
E' comunque incoerente come esercizio. Se qualcuno ha una soluzione la tiri fuori.
- le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi?
* le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi?
Dubbi + risposte di Damiani
Dubbi + risposte di Damiani:\\\
no tra adiacenti valgono 1
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
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)
se non arrivano messaggi che lo nominano, no.
...
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.


...
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.
...
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.

WARNING
Non sono sicuro al 100% di queste domande, provate a vedere se trovate materiale che smentisce quanto scritto.
(da F: (B, 2), (D, 7), (E, 3), (G, 1))\\
(da F: (B, 2), (D, 7), (E, 3), (G, 1))\\\
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.
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.
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.
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3
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.
Manca il campo proxy-connection
Manca il campo proxy-connection, non riesco a trovarlo in rete e nel sito del W3
WARNING
WARNING\\
Esercizio 2
Esercizio 3
NOTA: questo campo può essere solo ‘’open’’(persistente) o ‘’close’’(non persistente).\\
NOTA: questo campo può essere solo open(persistente) o close(non persistente).\\
WARNING Manca il campo proxy-connection
...
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.
Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:
Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:\\
- E' possibile che a un solo nome DNS corrispondano più indirizzi IP addressess? Perché si o perché no?
- E' possibile che a un solo nome DNS corrispondano più indirizzi IP addresses? Perché si o perché no?
- E' possibile che a un solo nome DNS corrispondano più indirizzi IP adressess? Perché si o perché no?
- E' possibile che a un solo nome DNS corrispondano più indirizzi IP addressess? Perché si o perché no?
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;

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;
SOLUZIONE
...
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
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''
Esercizio 3
L'accesso ad un sito restituisce il seguente header:
HTTP/1.1 200 OK \\
Esercizio 4
Spiegate il significato dei campi della seguente richiesta HTTP:
GET http://www.dti.unimi.it/ \\
- Spiegate il significato di almeno cinque campi dello header ricevuto
- 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
- 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
'''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.\\
'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.\\
(:title Temi d'esame di Sistemi - 20/04/2006:) Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani
:: 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))
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.
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
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
SOLUZIONE
...
Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani