Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
sull'indirizzo del mittente. Trattandosi di una modifica fa-<br />
cilmente implementabile, viene lasciata come esercizio al<br />
lettore.<br />
In teoria si potrebbe usare connect( ) anche in questo ca-<br />
so. Ciò innanzitutto fa sì che lo stack associ al socket an-<br />
che l'indirizzo e la porta di destinazione, rendendo quindi<br />
possibile l'uso di send( ) e recv( ). Non solo: diventa suo<br />
compito filtrare pacchetti da indirizzi e porte indesiderate.<br />
I1 grande svantaggio, però, è legato alla natura stessa di<br />
UDP. Inviando per esempio dati ad un indirizzo non esi-<br />
stente o a una porta non allocata da nessuno, send( ) ri-<br />
tornerà immediatamente lo stesso, non essendo contem-<br />
plato da UDP alcun controllo sull'arrivo dei dati. Lo stack<br />
ricevente, però, riconoscerà il pacchetto come avente de-<br />
stinazione invalida e invierà un messaggio di errore ICMP<br />
di basso livello allo stack mittente.<br />
Quest'ultimo, grazie alla chiamata fatta a connect( ), sa<br />
qual è il socket responsabile e notificherà l'errore alla pri-<br />
ma chiamata di funzione relativa a quel socket successiva<br />
all'am'vo dell'errore ICMP. Il che vuol dire che in teoria<br />
l'errore potrebbe essere generato anche dopo due o tre<br />
chiamate di rete. Per non complicare le cose e per evitare<br />
di fare troppe assunzioni sugli effetti collaterali di certi<br />
meccanismi TCPiIP, quindi, si è preferito non usare con-<br />
nect( ).<br />
Tra le chiamate a sendto( ) e recvfrom( ) è stato inserito<br />
un ritardo, il cui valore può essere specificato da riga<br />
comandi, che simula altre attività dell'applicazione (ela-<br />
borazione dei dati, aggiornamento video, etc.). Le altre<br />
righe di codice si occupano di stampare un messaggio<br />
per ogni blocco di dati ricevuto e per ogni chiamata di<br />
recvfrom( ) che non abbia restituito dati. E' possibile<br />
provare con AmiTCP il programma usando lo script lo-<br />
calnet descritto nel n. 80 di <strong>Amiga</strong> <strong>Magazine</strong>, senza bi-<br />
sogno di collegarsi al proprio provider. Con Miami, in-<br />
vece, basta caricare il programma senza andare in linea.<br />
In due Shell distinte si lancerà il comando seguendo la<br />
sintassi<br />
UDPTest Host/A, Port/N, LocalPort/N, Delay/N<br />
Per esempio:<br />
Shell.l> UDPTest 127.0.0.1 4000 4001 20<br />
She11.22 UDPTest 127.0.0.1 4001 4000 20<br />
L'indirizzo 127.0.0.1, noto anche come localbost, corri-<br />
sponde sempre al proprio <strong>Amiga</strong>. Si possono simulare<br />
problemi di carico della rete interrompendo con Ctrl-C<br />
una delle diie copie e rilanciandola dopo pochi secondi,<br />
oppure specificando per le due copie ritardi diversi me-<br />
diante il parametro Delay.<br />
[...l<br />
Byte letti: 200<br />
Byte letti: 200<br />
Non ricevo più dati ...<br />
Byte letti: 200<br />
Non ricevo più dati ........<br />
Byte letti: 200<br />
[...l<br />
I1 programma presentato è alquanto primitivo. Per esem-<br />
pio, non è previsto alcun meccanismo per eventuali pac-<br />
chetti "chiave" che debbano essere recapitati a tutti i co-<br />
sti. Un approccio primitivo potrebbe essere quello di in-<br />
viarne più copie a intervalli ristretti di tempo per avere<br />
più probabilità che essi arrivino a destinazione. Tecniche<br />
più sofisticate prevedono il ricorso a timeout e ritrasmis-<br />
sione dei pacchetti. Un buon esempio è descritto in Ua-<br />
cobsonl o nella sezione 8.4 di [Stevensl. Tali pacchetti<br />
chiave potrebbero essere marcati come speciali da un ap-<br />
posito flag che, se impostato indica all'altro lato di resti-<br />
tuire un pacchetto di conferma.<br />
In luogo della singola chiamata di recvfrom( ), infine, per<br />
applicazioni come il gioco descritto sopra sarebbe preferi-<br />
bile usare un ciclo che ignori pacchetti obsoleti e recuperi<br />
solo l'ultimo presente in coda.<br />
Il futuro: MBone e RTP<br />
A partire dal 1992 è stata attivata MBone, abbreviazione<br />
di IP Multicast Backbone, una rete virtuale per applicazio-<br />
ni realtime. Si tratta di una serie di computer e worksta-<br />
tion visibili anche come "normali" host Internet, ma che<br />
hanno un secondo indirizzo nell'intervallo 224.0.0.0 -<br />
239.25 5.2 5 5.255 (la cosiddetta clsse D) e comunicano tra<br />
loro con collegamenti che assicurano trasferimenti ad alta<br />
velocità. Essa sfrutta il concetto di comunicazione UDP<br />
multicast, ossia rivolta a più interlocutori: uno-a-molti, al-<br />
cuni-a-molti, molti-a-molti. Nel 1996 è stato introdotto un<br />
protocollo, RTP, che cerca di aumentare l'affidabilità delle<br />
comunicazioni introducendo ritrasmissioni occasionali,<br />
adattandosi ai ritardi e alla banda disponibile, senza però<br />
il carico eccessivo di un responso per ogni dato inviato.<br />
Una applicazione tipica è quella delle conferenze<br />
videoiaudio, offerte dagli host nell'intervallo 224.2.*.*: più<br />
o meno come in TV, una organizzazione o una società ri-<br />
chiede l'uso per un determinato numero di minuti o ore<br />
di un "canale" MBone, per la trasmissione di filmati, inter-<br />
viste e manifestazioni. Tra gli eventi più gettonati, già pri-<br />
ma della Marte-mania, le tante trasmissioni NASA con do-<br />
cumentari, reportage e persino interviste con astronauti in<br />
orbita(!).<br />
Un esempio di output è il seguente: (segue a pag.50)