CAPITOLO 6. PROTOCOLLI DI ACCESSO 43 A token B C Figura 6.2: Rete token. Ció é quella che viene chiamata collisione. I vari protocolli di accesso casuale si distinguono per il modo in cui cercano di evitare le collisioni. Nel seguito discuteremo brevemente le caratteristiche dei principali protocolli di tale tipo. 6.2.1 Aloha L’Aloha é storicamente il primo protocollo ad accesso casuale (1970), nato appositamente per comunicazioni tra terminali e/o calcolatori. É stato progettato per evitare le caratteristiche che rendono il TDMA costoso da implementare, ovvero • la necessitá di sincronismo (che richiede anche la trasmissione di sequenze di bit non di informazione), • l’occupazione del canale anche nei periodi in cui gli host non hanno niente da trasmettere. Soprattutto il fatto di evitare il sincronismo porta ad un hardware semplice ed economico. Quando devono essere trasmessi dei dati, l’host forma una serie di pacchetti. Questi pacchetti contengono una parte dei dati che devono essere trasmessi, un preambolo contenente un qualcosa che identifichi i terminali sorgente e destinazione (ossia il loro indirizzo) e dei bit di paritá, utilizzati CAPITOLO 6. PROTOCOLLI DI ACCESSO preambolo dati 44 bit di parità Figura 6.3: Contenuto di un pacchetto del protocollo aloha. tempo di andata e ritorno (attesa dell’ACK) D T host A tempo pacchetto ritrasmesso host B parte distrutta tempo Figura 6.4: Collisione e ritrasmissione di pacchetti secondo il protocollo aloha. per rilevare errori di trasmissione (codifica di canale) (Fig. 6.3). I singoli pacchetti sono trasmessi appena generati, senza controllare se altri treminali stanno trasmettendo (occupando il canale). Se il canale non é utilizzato in quel momento da altri host, il pacchetto arriva a destinazione senza errori. In tal caso l’host di destinazione invia all’host sorgente un ACK (acknowledgement), ossia una sequenza di bit utilizzata per notificare la corretta ricezione e il terminale sorgente puó inviare un altro pacchetto. Se peró ci sono piú host che trasmettono contemporaneamente, il segnale relativo a parte dei pacchetti viene alterata (Fig. 6.4). Gli host di destinazione rivelano l’errore o non ricevono il pacchetto, e non trasmettono quindi l’ACK. Non ricevendo l’ACK entro un tempo di time–out, gli host sorgenti ritrasmettono i pacchetti. Provvedono peró a generare a caso l’istante di ritrasmissione per evitare un’ulteriore collisione. Come evidenziato dalla Fig. 6.4, l’istante di ritrasmissione viene generato casualmente nell’intervallo [0, T ], dove T sará scelto per mantenere bassa la probabilitá di collisione e non rendere eccessivamente alto il ritardo di ritrasmissione. Il tutto funziona nel caso di traffico altamente impulsivo. É comunque un sistema instabile, in quanto all’aumentare del traffico le collisioni possono divenire cosı́ frequenti da congestionare il canale. Per ridurre la probabilitá di collisione é stato ideato l’Aloha slotted. Secondo tale protocollo la trasmissione dei pacchetti puó avvenire solo all’istante inziale di un certo intervallo temporale (slot) (Fig. 6.5). Viene cosı́ inserita una minima sincronizzazione, ma che puó essere non molto precisa. CAPITOLO 6. PROTOCOLLI DI ACCESSO 45 host A pacchetto generato pacchetto trasmesso tempo host B pacchetto generato pacchetto trasmesso tempo Figura 6.5: Trasmissione di pacchetti secondo il protocollo aloha slotted. 6.2.2 CSMA La tecnica CSMA (Carrier Sense Multiple Access) é utilizzabile solo nelle LAN, dove i ritardi di propagazione del segnale tra i vari host che la compongono sono molto piccoli. Secondo tale tecnica un host controlla il canale prima di trasmettere, verificando che non ci sia nessun altro che sta trasmettendo (ad esempio tramite la rilevazione di un segnale portante). Se il canale é in uso attende, altrimenti trasmette il pacchetto. Una collisione avviene se due host vogliono trasmettere in istanti distanti meno del tempo di propagazione del segnale. Dopo la trasmissione, gli host rimangono in attesa di un segnale di ACK da parte degli host di destinazione. Se tale ACK non giunge dopo un tempo di time–out, gli host devono ritrasmettere i pacchetti. Dopo una collisione il canale é inutilizzabile per il tempo di trsmissione dei pacchetti. Tale ritardo puó essere ridotto nel caso della tecnica CSMA–CD che vedremo nel prossimo paragrafo. 6.2.3 CSMA–CD Secondo la tecnica CSMA–CD (Carrier Sense Multiple Access–Collision Detection), gli host sorgenti controllano il canale anche dopo aver iniziato la trasmissione del pacchetto, per verificare se ci sono collisioni. Quindi, quando un host deve trasmettere un pacchetto controlla il canale e, se lo trova libero, trasmette il pacchetto continuando a controllare il canale. Se viene rilevata una collisione durante la trasmissione (ad esempio tramite oscillazioni dell’ampiezza del segnale, oscillazioni causate dalla sovrapposizione di un secondo segnale), il terminale trasmette un breve segnale di disturbo (jamming) per assicurarsi che tutti gli host rilevino la collisione ed CAPITOLO 6. PROTOCOLLI DI ACCESSO 46 interrompano la trasmissione. L’host sorgente aspetta quindi un tempo casuale, verifica che il canale sia libero e, in tal caso, ritrasmette il pacchetto. Il tempo di inutilizzazione del canale nel caso di una collisione é limitato alla durata del pacchetto. Il tempo di ritardo di ritrasmissione viene generato casualmente in [0, T ], dove T viene via via aumentato se continuano a verificarsi collisioni, fino a notifiare un errore di trasmissione e rinunciare alla trasmissione del pacchetto, per evitare l’instabilitá dovuta alla congestione della rete. 6.2.4 Ethernet Sul CSMA–CD é basata la tecnologia Ethernet per l’accesso di computer a LAN. In alcuni tipi di sistemi possono essere diffuse reti basate su altri protocolli, ad esempio in ambito IBM possiamo trovare delle reti di tipo Token Ring. Comunque, Ethernet é il tipo di rete piú diffusa, soprattutto per quanto riguarda il mondo dei Personal Computer. I computer portatili, nella maggior parte dei casi, oltre ad avere a bordo un modem con cui un utente puó collegarsi ad Internet attraverso la rete telefonica ed un provider, hanno a bordo una scheda Ethernet o Fast Ethernet, ossia una scheda (o adattatore) di rete per interfacciarsi ad ad una rete Ethernet. Ethernet nasce alla fine degli anni settanta, da un consorzio (DIX consortium) formato da Digital Equipment, Intel e Xerox. Partita con l’utilizzo del cavo coassiale, é stato previsto l’utilizzo di doppini, sia schermati (STP: Shielded Twisted Pair) che non schermati (UTP: Unshielded Twisted Pair), fino alla fibra ottica. I cavi sono intrecciati (twisted) per diminuire la sensibilitá alle interferenze. Allo stato attuale vengono comunemente utilizzate schede a 100 Mbit/sec, ed il costo delle schede Gigabit Ethernet (1 Gbit/sec) comincia a diminuire. Nella sua evoluzione é stata posta particolare attenzione alla standardizzazione, (comitato IEEE 802.3) in modo da garantire l’interoperabilitá tra prodotti di case diverse. Il comitato di standardizzazione ha dettato varie implementazioni. Le principali caratteristiche di alcune di esse sono riassunte di seguito. 10BASE5 10BASET 100BASETX (Ethernet) (Ethernet) (Fast Ethernet) Velocitá 10 Mbit/s 10 Mbit/s 100 Mbit/s Mezzo cavo coassiale UTP 2 coppie UTP o STP (cat. 5) Trasmissione Manchester Manchester MLT–3 Topologia Bus Stella Stella Lunghezza max. 500 m 100 m 100 m CAPITOLO 6. PROTOCOLLI DI ACCESSO bit: 0 47 bit: 1 Figura 6.6: Modulazione manchester. La lunghezza massima é detrminata sia da considerazioni di attenuazione del segnale che di ritardi di propagazione (per assicurare una corretta rilevazione delle collisioni). La modulazione di tipo Manchester é rappresentata in Fig. 6.6, mentre la modulazione MLT–3 é appositamente progettata per concentrare la banda del segnale entro i 30 MHz, evitando potenziali problemi di emissione elettromagnetica da parte della linea utilizzata come mezzo di trasmissione. Capitolo 7 Tecniche di commutazione Consideriamo due utenti (A e B) collegati a due diverse LAN e che vogliono comunicare (Fig. 7.1). I collegamenti tra le due LAN sono generalmente ridondanti, ossia esistono piú percorsi che le collegano. I nodi C indicano dei nodi di commutazione, ossia che sono in grado di indirizzare il traffico a seconda della destinazione. Abbiamo visto come é possibile trasmettere informazione tra due nodi, ed una particolare tecnologia, la Ethernet. In questo caso i due utenti appartengono a LAN diverse, ed il traffico deve essere indirizzato attraverso una serie di nodi di commutazione. Il modo in cui viene stabilito il collegamento e viene trasferita l’informazione tra gli utenti é definito dalla particolare tecnica di commutazione. Ne esistono essenzialmente tre tipi: • Commutazione di circuito (c.c.); • Commutazione di messaggio (c.m.); • Commutazione di pacchetto (c.p.). La prima (c.c.) é piú adatta al traffico di tipo telefonico. L’ultima (c.p.) é piú adatta ad un traffico di tipo impulsivo come quello fra calcolatori. 7.1 Commutazione di circuito In questo caso viene stabilito un collegamento ininterrotto tra A e B e completamente dedicato ad essi per tutta la durata della comunicazione (anche nei periodi di assenza di traffico). La comunicazione secondo tale tecnica avviene in tre fasi. 1. Instaurazione del circuito. Viene stabilito il circuito tra A e B. Per far ció A invia una richiesta 48 CAPITOLO 7. TECNICHE DI COMMUTAZIONE 49 LAN 1 LAN 2 C3 A C1 C2 C5 C7 B C6 C4 Figura 7.1: Utenti collegati a diverse LAN connesse tra loro. I nodi C hanno capacitá di commutazione (indirizzamento del traffico). LAN 1 LAN 2 C3 A C1 C2 C5 C7 B C4 C6 Figura 7.2: Commutazione di circuito: Trasmissione sul circuito. di connessione (call request) con B a C1. C1 invia la richiesta di connessione ad un nodo successivo, scelto in base alla destinazione (B) e, eventualmente, alla situazione attuale di traffico. Ad esempio la invia a C2. Il processo continua finché la richiesta di connessione non giunge a B. L’informazione di B pronto ad accettare o meno il collegamento fa il percorso inverso e, nel caso di B pronto, si passa al trasferimento dati. 2. Trasferimento dati. L’informazione viene trasferita sul percorso (circuito) assegnato (Fig. 7.2). Il percorso rimane assegnato alla comunicazione tra A e B per tutto il tempo richiesto, anche nei periodi in cui gli host non hanno niente da trasmettere. É da sottolineare che nei tratti in comune con altri percorsi, possono transitare altre informazioni seguendo una tecnica di multiplexing o di accesso. La particolare linea é comunque comple- CAPITOLO 7. TECNICHE DI COMMUTAZIONE 50 tamente dedicata alla comunicazione tra A e B, anche nei periodi di silenzio. 3. Sconnessione del circuito. Alla fine della comunicazione, uno dei due host (A o B) chiude la comunicazione, inviando segnali di rilascio della connessione assegnata ai vari nodi coinvolti. La commutazione di circuito é scarsamente efficiente nel caso di traffico dati. Infatti, si ha un ritardo iniziale nella comunicazione, necessario all’instaurazione del circuito, e la mancata utilizzazione delle risorse di rete nei periodi di silenzio. 7.2 Commutazione di messaggio La tecnica di commutazione di messaggio (c.m.) é una tecnica di tipo store and forward (memorizzazione ed inoltro). In tal caso, il messaggio (ossia l’intero blocco dati che costituisce la totalitá dell’informazione che A vuole trasferire a B) viene inviato successivamente ai vari nodi che si incontrano nel percorso per giungere all’host di destinazione. Nei nodi intermedi, il messaggio viene memorizzato in una coda (area di memoria in cui si trovano i messaggi che devono essere inviati su una determinata linea connessa al nodo intermedio) in attesa di essere inviato. Nel nostro esempio, A, visto che B non gli é direttamente connesso, determina C1 come prima destinazione intermedia. A invia quindi una richiesta a C1 per trasferire il messaggio. Quando C1 é pronto, lo notifica ad A che trasferisce l’intero messaggio. C1, verificato che il destinatario é B (informazione che andrá scritta in un’opportuna intestazione, o header, del messaggio stesso), sulla base della conoscenza dello stato dei nodi a lui vicini e sulla base della destinazione (B), chiede di inviare il messaaggio alla successiva destinazione intermedia (C2). Il processo si ripete verso i nodi incontrati lungo un percorso che giunge a B, finché il messaggio non giunge a destinazione. I nodi devono quindi avere una capacitá di memorizzazione. In particolare, saranno presenti delle code (una per ogni linea connessa al nodo) in cui memorizzare i vari messaggi da inviare. La presenza di piú messaggi nella coda causerá un ritardo nella trasmissione del messaggio rispetto al solo tempo di propagazione tra A e B. I nodi devono poi saper determinare verso quale nodo successivo instradare il messaggio in base alla destinazione dello stesso. Ai dati informativi veri e propri del messaggio devono essere aggiunte una serie di informazioni di servizio (ad esempio, l’identificazione dell’host sorgente e destinazione), che non costituiscono informazioni utili al CAPITOLO 7. TECNICHE DI COMMUTAZIONE 51 destinatario. Aumenta peró l’utilizzazione della rete, in quanto i singoli rami interessati al collegamento tra A e B possono essere utilizzati da altri utenti nei periodi di silenzio. 7.3 Commutazione di pacchetto La commutazione di messaggio non ha peró grande applicazione (ad esempio le reti telegrafiche). Nel caso della trasmissione dati tra calcolatori, é invece utilizzata la tecnica di commutazione di pacchetto (c.p.). É anch’essa una tecnica di tipo store and forward ma, a differenza della c.m., i dati da trasmettere vengono divisi in piccoli blocchi (i pacchetti) contenenti sia informazioni di controllo che una parte dei dati che devono essere trasferiti. É da sottolineare che il trasferimento di blocchi di dati di lunghezza fissata é infatti piú vantaggioso del trasferimento di singoli blocchi di lunghezza variabile, come é stato dimostrato, anche teoricamente. Se A deve trasmettere una certa quantitá di dati a B, li frammenta in un certo numero di pacchetti, ai quali aggiunge una serie di informazioni di controllo (header) necessarie al trasferimento. Si hanno cosı́ una serie di pacchetti che devono essere trasferiti da A a B. Come vedremo, il modo di trasferire tali pacchetti dipende dalla particolare tecnica di commutazione di pacchetto. In ogni caso, possiamo affermare che una rete a c.p. é costituita da un insieme di nodi a c.p.. Tali nodi, per poter operare l’instradamento dei pacchetti, devono essere in grado di determinare se l’host di destinazione é direttamente connesso a loro, o la successiva destinazione intermedia a seconda del destinatario del pacchetto. Inoltre, per un migliore instradamento, i nodi dovrebbero conoscere lo stato della rete (ad esempio situazioni di congestione, ecc.). A tale proposito, si deve notare che la trasmissione di informazioni tra i nodi riguardanti il loro stato impiega risorse. Cosı́ i nodi non potranno avere istante per istante lo stato dell’intera rete, ma baseranno il loro funzionamento su un ridotto numero di informazioni. Una linea tra due nodi puó essere condivisa da diversi collegamenti, e ció risulta in un aumento dell’utilizzo della rete. Inoltre la tecnica c.p. puó operare automaticamente una conversione di velocitá di trasmissione, in quanto su ogni tratto i nodi scambieranno pacchetti alla propria velocitá di trasmissione. Infine, all’aumentare del traffico di rete, aumenta il ritardo di trasmissione, ma i pacchetti vengono comunque inviati. Per l’instradamento delle serie di pacchetti si hanno due approcci: CAPITOLO 7. TECNICHE DI COMMUTAZIONE 7.3.1 52 Datagramma Nell’instradamento a datagramma ogni pacchetto é trattato individualmente, senza tenere conto di quelli inviati in precedenza. L’instradamento viene cosı́ deciso pacchetto per pacchetto, e pacchetti con la stessa origine e la stessa destinazione possono seguire strade diverse e possono quindi arrivare a destinazione con un ordine diverso da quello di trasmissione. Ad esempio, riferendoci alla Fig. 7.1, supponiamo che A debba inviare a B tre pacchetti. A inizia a trasmettere i pacchetti al nodo C1, che li trasmetterá a sua volta a C2. Per il primo pacchetto, C2 puó decidere di instradarlo verso C4 osservando, per esempio, che in quell’istante la propria coda dei pacchetti che devono essere inviati a C4 é la piú breve tra le code relative alle possibili destinazioni successive per B. Lo stesso puó accadere per il secondo pacchetto, mentre il terzo puó essere instradato verso C5, se la coda dei pacchetti che devono essere inviati a tale nodo é, nel frattempo, divenuta la piú corta. Nel singolo pacchetto dovranno essere inserite, in un apposito header, le informazioni di indirizzo sorgente e destinazione, nonché un’indicazione sul numero d’ordine del pacchetto, per consentire il loro corretto riordinamento da parte di B. É compito del destinatario riordinare i pacchetti nel caso arrivino in un ordine diverso da quello di trasmissione, e richiedere l’eventuale ritrasmissione dei pacchetti deteriorati o andati perduti. 7.3.2 Circuito virtuale Nell’instradamento a circuito virtuale viene pianificato un percorso prima dell’invio dei pacchetti, percorso che sará seguito da tutti i pacchetti. Nel nostro esempio, A invierá un pacchetto di controllo (Call request, richiesta di connessione) a C1 chiedendo una connessione con B. C1 invierá tale richiesta a C2. C2, verificando, ad esempio, lo stato delle proprie code, invierá tale pacchetto di richiesta a C4, e cosı́ via finché il Call request non giunge a B. Se B é pronto ad accettare la connessione, invia un pacchetto di accettazione (Call accept), che giunge ad A tramite il percorso inverso. I pacchetti vengono quindi inviati da A, e giungono a B tramite il percorso concordato, lo stesso per tutti i pacchetti. Anziché l’indirizzo (ossia l’identificativo) della destinazione, l’header dei pacchetti contiene un identificatore del particolare circuito virtuale. Ogni nodo indirizzerá i pacchetti secondo tale indicatore, senza operare scelte di instradamento, ma mantenendo quella fatta all’apertura del collegamento. Come conseguenza, i pacchetti giungono a destinazione nello stesso ordine con CAPITOLO 7. TECNICHE DI COMMUTAZIONE A sorgente C1 C2 53 B destinazione Figura 7.3: Utenti collegati tramite due nodi di commtazione. cui sono stati trasmessi. Alla fine, una delle due stazioni decide di chiudere la connessione inviando un pacchetto di Clear request (richiesta di chiusura). Si deve notare che l’instradamento a circuito virtuale non implica l’assegnazione esclusiva di un percorso (e delle relative risorse di rete) per il dato collegamento, come invece avviene nella commutazione di circuito. Altri circuiti virtuali possono condividere i collegamenti. Il circuito virtuale ha il vantaggio che i pacchetti giungono nell’ordine di trasmissione. Inoltre i nodi intermedi possono effettuare un controllo e richiedere la trasmissione al nodo precedente in caso di errore. Infine i pacchetti dovrebbero transitare dai nodi piú rapidamente, poiché non é richiesta una decisione sul loro instradamento. Per contro l’instradamento a datagramma evita la fase di apertura della connessione, risultando generalmente in un sistema piú veloce nel caso della trasmissione di pochi pacchetti. Il datagramma si adatta inoltre alle situazioni di congestione della rete, indirizzando il traffico verso i nodi meno utilizzati. Molte delle reti utilizzano, per il traffico interno, i circuiti virtuali. Nell’interconnessione di reti (internetworking) é invece comune operare tramite datagramma. Per chiarire al meglio le operazioni nelle diverse tecniche di commutazione, confrontiamo la trasmissione di una certa quantitá di dati considerando il transito attraverso due nodi di commutazione (Fig. 7.3). Disegnando il diagramma degli eventi temporali per le varie tecniche di commutazione, otteniamo quanto riportato nelle Figg. 7.4, 7.5, 7.6, 7.7. Infine, per chiarire come la divisione dei dati da trasmettere in pacchetti puó risultare vantaggiosa, consideriamo il caso schematizzato in Fig. 7.8, in cui si considera la trasmissione dell’intero blocco dati e la divisione dello stesso in due pacchetti. Fare pacchetti troppo piccoli diventa peró sconveniente, poiché la presenza degli header del pacchetto implica la trasmissione di un gran numero di bit non informativi. CAPITOLO 7. TECNICHE DI COMMUTAZIONE A call request C1 C2 54 B propagazione ritardo di elaborazione call accept non c’è ritardo di elaborazione (il collegamento è già stabilito) Dati clear request tempo Figura 7.4: Trasferimento dati tramite commutazione di circuito. CAPITOLO 7. TECNICHE DI COMMUTAZIONE A call request C1 C2 55 B call accept Header Dati ritardo di elaborazione (si cerca il nodo successivo migliore) tempo Figura 7.5: Trasferimento dati tramite commutazione di messaggio. CAPITOLO 7. TECNICHE DI COMMUTAZIONE A C2 C1 56 B pkt1 pkt1 pkt2 ritardo per la coda di C2 pkt2 pkt1 pkt3 pkt3 Header pkt2 Dati pkt3 tempo Figura 7.6: Trasferimento dati tramite commutazione di pacchetto a datagramma. CAPITOLO 7. TECNICHE DI COMMUTAZIONE A call request C2 C1 57 B call accept ritardo per la coda di C2 pkt1 pkt1 pkt2 Header pkt2 pkt1 Dati pkt3 pkt3 pkt2 pkt3 clear request tempo Figura 7.7: Trasferimento dati tramite commutazione di pacchetto a circuito virtuale. CAPITOLO 7. TECNICHE DI COMMUTAZIONE 58 C2 B Header pkt1 Dati pkt2 pkt1 pkt2 pkt1 pkt2 tempo tempo Figura 7.8: Divisione in pacchetti dei dati da trasmettere.