Il sottolivello MAC Il sottolivello MAC si trova direttamente a contatto con il livello fisico (livello1, cablaggio) e, indipendentemente dalla topologia di rete, si occupa delle seguenti problematiche: Regolamentazione dell’accesso al mezzo trasmissivo; Verifica della lunghezza minima del pacchetto, scartando i pacchetti ricevuti che hanno una lunghezza inferiore al valore minimo ammesso (64 byte); Riconoscimento dell’indirizzo di destinazione del pacchetto (frame); Generazione del preambolo: in trasmissione il MAC prepone un preambolo al pacchetto che deve essere trasmesso; Assemblaggio dei dati provenienti dal sottolivello superiore LLC in trame con l’indirizzo sorgente, di destinazione e il campo per il controllo degli errori; Rimozione del preambolo: in ricezione il MAC rimuove il preambolo; Disassemblaggio delle trame ricevute e consegna dei dati al sottolivello LLC; Individuazione degli errori ed eliminazione del frame ritenuto errato. La criticità delle reti locali è dovuta al fatto che utilizzano un unico mezzo condiviso dai calcolatori connessi: reti di questo tipo sono dette reti broadcast, perché i dati trasmessi sul canale da una macchina vengono ricevuti da tutte le altre. Per richiedere l’accesso al canale il livello MAC può usare due protocolli di accesso: Deterministico o protocollo ad accesso controllato: prima di trasmettere è necessario entrare in possesso del controllo esclusivo della risorsa così da evitare qualsiasi tipo di collisione; ogni stazione deve aspettare il proprio turno, che le viene concesso secondo diverse politiche di gestione (tecnica token passing usata da reti Token Ring e FDDI); Non deterministico o protocollo ad accesso casuale: il primo che arriva inizia a trasmettere senza acquisire il controllo esclusivo della risorsa canale e quindi esiste la possibilità di creare delle collisioni che provocano la perdita dell’informazione; il protocollo gestisce le collisioni con un apposito algoritmo, detto CRA (Collision Resolution Algorithm). Questa modalità viene utilizzata da Ethernet ed è chiamata CSMA/CD (Carrier Sense Multiple Access with Collision Detection). Per ridurre il tasso di collisioni si può suddividere la LAN in più porzioni dette “domini di collisione” in modo che la contesa del mezzo avvenga solo tra stazioni appartenenti a un singolo dominio. BIT TIME Indica il tempo durante il quale un bit permane sulla linea, dipende dalla frequenza di trasmissione. Tbit = 1/f [s] SLOT TIME Indica il tempo che impiega uno slot a compiere il tragitto di massima distanza teorica tra due nodi. ROUND TRIP DELAY Se indichiamo con T il tempo massimo di propagazione del segnale tra due stazioni qualsiasi presenti sulla rete, 2T rappresenta il tempo massimo di trasmissione per una stazione prima di accorgersi di una collisione (andata e ritorno). Il tempo 2T prende il nome di round trip delay. SPAZIO INTERFRAME Il minimo spazio tra due frame che non collidono è detto spazio interframe. È fissato a 96 bit time (9,6 microsecondi). Rilevamento delle collisioni Le tre funzioni svolte con il protocollo CSMA/CD sono: trasmettere e ricevere i pacchetti; rilevare gli errori nei pacchetti; decodificare i pacchetti e controllare gli indirizzi prima di passarli ai livelli superiori; è realizzata da due sottosistemi che operano a livello MAC: - CAP (Channel Access Procedure): l’insieme delle procedure che la stazione effettua per realizzare l’accesso al canale; - CRA (Collision Resolution Algorithm): l’insieme delle procedure che la stazione effettua per rilevare ed eventualmente recuperare situazioni di collisione. Il protocollo CSMA/CD opera in questo modo: Se la linea è inattiva (idle) non viene rilevata alcuna portante, quindi: – viene immediatamente inviato il pacchetto di dimensione massima 1500 byte; – si ascolta che nessun altro inizi a trasmettere; – si deve aspettare 9,6 microsecondi tra i frame back to back. Se la linea è occupata (busy) viene rilevata una portante e quindi: – si aspetta un tempo casuale prima di riprovare (strategia di backoff); – si riprova fi no a quando la linea ritorna libera per procedere all’immediata trasmissione del pacchetto. Se viene rilevata la collisione: – si interrompe l’invio e si inserisce il segnale di disturbo (jam signal); – si riprova successivamente. Non appena avviene una collisione (si trova analizzando la dimensione del segnale, che diventa maggiore rispetto allo stato normale) invece di sospendere la trasmissione, si cerca di aumentare le collisioni trasmettendo un segnale di disturbo (un jamming signal composto da 48 bit con un’alternanza di 0 e di 1) in modo che tutti gli utilizzatori del mezzo trasmissivo si accorgano al più presto della collisione. Gli errori in Ethernet Il frame Ethernet è costituito da un preambolo di 8 byte, che ha lo scopo di assicurarsi dell’effettiva disponibilità della linea: se avvengono delle collisioni, queste hanno luogo generalmente sul preambolo, quindi prima che inizi la trasmissione del segnale SFD di inizio messaggio. Non appena la collisione viene rilevata, le schede di rete d’interfaccia di entrambi gli host non interrompono immediatamente la trasmissione, ma continuano a inviare bit fino a raggiungere la dimensione minima di un pacchetto di 64 byte; questo accorgimento è necessario per fare in modo che le altre eventuali macchine presenti sulla rete si accorgano che la collisione è in corso e che la rete è momentaneamente bloccata. Successivamente interrompono la trasmissione e attivano un timer nell’algoritmo di backoff di durata casuale prima di ritentare la trasmissione. Il fatto che il timer sia casuale impedisce che entrambe ripartano nello stesso istante, causando una nuova collisione. Se, nonostante l’uso dei timer, la collisione si verificasse ancora, il timer verrebbe allungato progressivamente fino a un punto in cui il continuare delle collisioni indicherebbe un guasto fisico sulla rete e le singole schede d’interfaccia comunicherebbero al rispettivo computer l’impossibilità di trasmettere. Esempio Vediamo un esempio con due stazioni poste a 60 metri di distanza: 1) alla velocità di 10 Mbit per secondo ci vogliono 100 nanosecondi per inviare un singolo bit: ts = 1/ (10*106 )= 1/107=10-7 = per avere il risultato in una potenza del 10 multipla di 3 = 100*109 (o 0.1*10-6) secondi 2) l’impulso elettrico viaggia alla velocità della luce, ma su un cavo di rame la propagazione non è istantanea per effetto del “ritardo di propagazione” (65%), quindi ≈ 200.000 km/s. Otteniamo lo spazio percorso dalla relazione fisica che lega lo spazio con la velocità: s = v*t = (200*106 ) x (100*10-9 )= 20 m 3) in un nanosecondo il primo bit ha quindi percorso 20 centimetri e prima che il secondo bit sia “uscito dalla scheda di rete” che sta trasmettendo (100 nanosecondi), il primo bit ha percorso circa 20 metri. Prima che tutto il preambolo sia stato trasmesso, cioè 48 bit in 4,8 microsecondi (100*10-9*48), il primo bit ha percorso 960 metri. Se una seconda stazione, a 60 di metri distanza dalla prima, deve iniziare a trasmettere, lo può fare solo 3 nanosecondi dopo l’inizio della prima, altrimenti le arriva il segnale del preambolo che le fa sentire la linea occupata; se le due stazioni iniziassero contemporaneamente la trasmissione dopo la metà del tempo si troverebbero in collisione. Se contemporaneamente una terza stazione, ancora più distante, iniziasse a trasmettere, questa colliderebbe con entrambe, e via di seguito.