| 1 | [[PageOutline(1-6)]] |
| 2 | = IEEE 802.11 - Definizione dei servizi MAC = |
| 3 | |
| 4 | ,,20061201-0930 SoujaK,,[[BR]] |
| 5 | Il livello MAC comunica con l'hardware utilizzando il livello PHY in qualita' |
| 6 | di tramite, che puo' pertanto essere visto come a lui sottostante. Il trasporto |
| 7 | delle MSDU viene effettuato con trasmissioni ''connectionless'' di tipo |
| 8 | ''best-effort'', non ci sono quindi garanzie ne' sulla effettiva consegna dei |
| 9 | frame, ne', tantomeno, sull'ordine di arrivo degli stessi. Comunicazioni ad |
| 10 | indirizzamento di tipo ''broadcast'' o ''multicast'' possono quindi, a causa |
| 11 | della loro natura, essere soggette a diverse prestazioni e qualita' di servizio. |
| 12 | |
| 13 | == Coordinamento per la trasmissione == |
| 14 | ,,20061207-1902 SoujaK,,[[BR]] |
| 15 | L'accesso al mezzo di trasmissione comune deve essere regolato, poiche', per |
| 16 | sua intrinseca natura non puo` essere utilizzato per trasmissioni simultanee |
| 17 | sulle stesse frequenze. Per questo motivo il livello MAC comprende funzionalita' |
| 18 | in grado di farsi carico della coordinazione delle varie stazioni che operano |
| 19 | sul medesimo canale trasmissivo. Si tratta della funzione di |
| 20 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#CoordinamentodistribuitoDCF coordinamento distribuito] |
| 21 | (piu' brevemente DCF), un componente evidentemente necessario ad ogni stazione, |
| 22 | in qualsiasi modalita' essa operi, ''infrastracture'' come ''ad-hoc''. |
| 23 | [[BR]] |
| 24 | E' inoltre presente un metodo di accesso opzionale, basato sulla funzione di |
| 25 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#CoordinamentocentralizzatoPCF coordinamento centralizzato] |
| 26 | (detto anche PCF) che fa uso di un coordinatore centrale detto PC (i.e. ''Point |
| 27 | Coordinator'') che risiede nell'AP del BSS. |
| 28 | |
| 29 | DCF e PCF devono poter coesistere ed operare in maniera concorrente all'interno |
| 30 | di una BSS, quindi i due metodi di accesso al mezzo si alterneranno, con un |
| 31 | periodo in cui l'accesso e' prestabilito e il mezzo libero dalla contesa |
| 32 | (''Contention-Free Period'' o CFP) in cui il coordinamento e' centralizzato, |
| 33 | seguito da un periodo di contesa (''Contention Period'' o CP), in cui il |
| 34 | coordinamento e' distribuito. |
| 35 | |
| 36 | === Coordinamento distribuito (DCF) === |
| 37 | |
| 38 | ==== CSMA/CA e il meccanismo RTS/CTS ==== |
| 39 | |
| 40 | ,,20061027-1950 SoujaK,,[[BR]] |
| 41 | Il concetto chiave attraverso il quale il protocollo interpreta il meccanismo di |
| 42 | comunicazione CSMA/CA e' la distribuzione di informazioni di prenotazione del |
| 43 | mezzo trasmissivo. Ogni comunicazione fra un nodo sorgente e un nodo |
| 44 | destinazione deve cominciare con lo scambio di due frame RTS (''request to |
| 45 | send'') e CTS (''clear to send'') dalla seguente semantica: "richiesta di invio" |
| 46 | e "pronto alla ricezione". Tali frame RTS e CTS contengono un campo |
| 47 | (Duration/ID) che contiene il tempo durante il quale il mezzo e' riservato per |
| 48 | l'invio del frame (o del frammento) e per la ricezione dell'ACK. Le STA esterne |
| 49 | alla comunicazione imparano, tramite questo meccanismo, che il canale e' |
| 50 | occupato per tale lasso di |
| 51 | tempo evitando le collisioni. La doppia presenza delle informazioni in questione |
| 52 | nei due versi della comunicazione (sia nei frame RTS che in CTS, ad esempio) |
| 53 | permette di raggiungere tutte le STA interessate, scongiurando alcuni problemi, |
| 54 | come quello del nodo esposto). E' importante precisare che il meccanismo RTS/CTS |
| 55 | non e' obbligatorio: deve essere evitato per trasmissioni multicast o broadcast |
| 56 | (chi risponderebbe con il CTS?). Inoltre puo' essere evitato nel caso di frame |
| 57 | piccoli (al fine di limitare l'overhead che si introduce): la soglia e' definita |
| 58 | nell'attributo MAC denominato `dot11RTSThreshold`. |
| 59 | |
| 60 | ==== ''Carrier-sense'' virtuale e il NAV ==== |
| 61 | |
| 62 | ,,20061027-0416 SoujaK,,[[BR]] |
| 63 | La funzionalita' permette di capire lo stato del mezzo trasmissivo (occupato o |
| 64 | libero) ed e' presente non solo nel sottostrato PHY, come e' ovvio, ma anche in |
| 65 | MAC. Qui in MAC il meccanismo e' da considerarsi virtuale, nel senso che |
| 66 | interroga il ''Network Allocation Vector''. Ogni STA ha il compito di tenere |
| 67 | traccia nel NAV delle "prenotazioni" effettuate da altri che indicano la futura |
| 68 | indisponibilita' del canale e, se necessario, rimandare i tentativi di |
| 69 | trasmissione. Il calcolo di questa durata non e' altro che la somma dei tempi |
| 70 | necessari alle fasi della comunicazione: la trasmissione dei vari frame di dati, |
| 71 | degli ''[IEEE802.11/DefinizioneDeiServiziMAC#Acknowledgment acknowledgment]'' e |
| 72 | l'attesa dei vari |
| 73 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#InterframespaceIFSspaceIFS IFS]. Le |
| 74 | citate informazioni necessarie alle stazioni estranee alla comunicazione sono o |
| 75 | prefissate dallo standard (la durata di invio di un ACK o i tempi |
| 76 | ''inter-frame'') oppure sono comunicate dalle stazioni interne alla |
| 77 | comunicazione. Il campo `Duration/ID` e' quindi presente sia nella coppia |
| 78 | iniziale < RTS , CTS > che nelle successive coppie < PDU , ACK > diverse dalla |
| 79 | prima; esso contiene la distanza temporale al termine della comunicazione, i.e. |
| 80 | il primo ''acknowledgment''. |
| 81 | |
| 82 | ==== ''Acknowledgment'' ==== |
| 83 | |
| 84 | ,,20061027-0445 SoujaK,,[[BR]] |
| 85 | La strategia usata e' l'acknowledgment positivo, il che significa che la STA |
| 86 | ricevente ha il compito di confermare alla STA trasmittente la corretta |
| 87 | ricezione del frame (solo in caso di frame unicast, come e' facile intuire). Il |
| 88 | trasmittente attende il frame ACK per un periodo di tempo fissato da |
| 89 | `ACKTimeout` e poi conclude che la trasmissione e' fallita. Lo stesso succede |
| 90 | qualora esso riceva altro che non sia un ACK. Si noti che la mancata ricezione |
| 91 | dell'ACK puo' indistinguibilmente indicare anche un errore durante la |
| 92 | trasmissione dello stesso ''acknowledgment''. |
| 93 | |
| 94 | ==== ''Interframe space'' (IFS) ==== |
| 95 | |
| 96 | ,,20061019-0849 SoujaK,,[[BR]] |
| 97 | Lo standard stabilisce la lunghezza di tempo che deve intercorrere fra le |
| 98 | trasmissioni dei vari frame; lo scopo e' quello di fornire informazioni precise |
| 99 | alle stazioni. Queste ultime, attraverso il meccanismo ''carrier-sense'', |
| 100 | attendono infatti di poter considerare libero il mezzo trasmissivo a seconda |
| 101 | dei periodi di inattivita' rilevati. |
| 102 | |
| 103 | A seconda della situazione viene usato uno dei seguenti 4 periodi: |
| 104 | 1. SIFS (''short interframe space''): |
| 105 | usato per frame ACK, CTS, per frame (eccetto il primo) di una |
| 106 | trasmissione frammentata, per le risposte al ''polling'' del PCF; |
| 107 | 2. PIFS (PCF ''interframe space''): |
| 108 | usato solo dalle STA che, sotto un PCF, tentano di avere accesso al mezzo |
| 109 | trasmissivo all'inizio del CFP; |
| 110 | 3. DIFS (DCF ''interframe space''): |
| 111 | usato sotto DCF dalle STA per i frame dati (MPDU) o per i ''frame'' di |
| 112 | gestione (MMPDU); |
| 113 | 4. EIFS (''extented interframe space''): |
| 114 | usato quando il PHY indica al MAC che l'ultimo ''frame'' MAC non e' stato |
| 115 | ricevuto correttamente e che il campo FCS non e' utilizzabile; |
| 116 | |
| 117 | ==== Random backoff time ==== |
| 118 | |
| 119 | ,,20061209-1941 SoujaK,,[[BR]] |
| 120 | In seguito al rilevamento di inattivita' del mezzo trasmissivo (secondo le |
| 121 | politiche appena descritte), ogni STA e' tenuta a ritardare ulteriormente la |
| 122 | propria trasmissione per un periodo di ''backoff'' di durata casuale, a meno che |
| 123 | non sia gia' stato impostato il relativo timer. L'intento e' quello di evitare |
| 124 | che tutte le STA in attesa collidano nel momento in cui contemporaneamente |
| 125 | effettuino tentativi di trasmissione.[[BR]] |
| 126 | Il periodo di inattivita' che le STA si auto-impongono e' detto CW (''contention |
| 127 | window'') e viene ripetuto ogni volta che si presenti una collisione. Viene |
| 128 | inoltre incrementato a fronte di ogni collisione con andamento esponenziale (per |
| 129 | scongiurare il pericolo di fino al raggiungimento di un valore massimo |
| 130 | prestabilito. |
| 131 | |
| 132 | Il periodo di ''backoff'' e' espresso come quantita' casuale di quanti di tempo |
| 133 | (dal valore `aSlotTime` presente in PHY). Questa quantita' di slot e' mantenuta |
| 134 | in un intero pseudo-casuale le cui variazioni devono oscillare in maniera |
| 135 | uniforme fra 0 e CW, un altro parametro definito come intero compreso |
| 136 | nell'intervallo di estremi `aCWmin` e `aCWmax`(definiti in PHY). Ogni STA |
| 137 | mantiene inoltre una coppia di contatori dei tentativi di trasmissione (SSRC e |
| 138 | SLRC) non andati a buon fine: questi vengono inizializzati a 0 e vengono |
| 139 | incrementati con l'andamento andamento esponenziale del 2 ogni volta che la |
| 140 | comunicazione fallisce. Supponendo `CWmin` e `CWmax` settati rispettivamente a 7 |
| 141 | e a 255, un esempio di incremento esponenziale e' dato dalla sequenza 7, 15, 31, |
| 142 | 63, 127, 255, 255. Un cosi' alto andamento di crescita del periodo di backoff |
| 143 | rende piu' stabile il protocollo, aumentando la sua capacita' di adeguarsi |
| 144 | repentinamente a condizioni di alto carico per poi saperle sopportare con |
| 145 | maggiore facilita' . |
| 146 | |
| 147 | I contatori prima citati vengono poi resettati (azzerati) al verificarsi di |
| 148 | determinati eventi interpretabili come comunicazione ben riuscita (e.g la |
| 149 | ricezione di un ACK): i due contatori si differenziano proprio su questo |
| 150 | particolare, ma non e' il caso di approfondire ulteriormente. |
| 151 | |
| 152 | ==== Frame duplicati ==== |
| 153 | |
| 154 | ,,20061027-0536 SoujaK,,[[BR]] |
| 155 | Dal momento che le procedure di conferma di trasmissione e di ritrasmissione |
| 156 | sono incorporati all'interno del protocollo, esiste la possibilita' che un |
| 157 | determinato frame venga ricevuto piu' di una volta. La stazione ricevente deve |
| 158 | rendersi conto della duplicazione e scartare i doppioni. E' stato pertanto |
| 159 | inserito un campo di controllo di sequenza all'interno nei frame dati e in |
| 160 | quelli di gestione, contenente il numero della sequenza e quello del frammento. |
| 161 | Ogni STA mantiene dunque una cache delle triple <indirizzo , numero di sequenza |
| 162 | , numero di frammento> che permette di identificare agilmente i frame duplicati. |
| 163 | Il numero di sequenza e' un intero progressivo che __tende__ ad essere unico fra |
| 164 | i vari frame: qualora (sfortunatamente) capitasse il contrario, il frame valido |
| 165 | erroneamente scartato verrebbe presto ritrasmesso dalla sorgente. |
| 166 | |
| 167 | === Coordinamento centralizzato (PCF) === |
| 168 | |
| 169 | ,,20061210-1651 SoujaK,,[[BR]] |
| 170 | La PCF fornisce un metodo di trasmissione dei ''frame'' che e' libero dalla |
| 171 | contesa (e quindi anche dagli sprechi di tempo che essa comporta), grazie alle |
| 172 | regole imposte dal PC residente nell' ''access-point''. Ogni stazione deve |
| 173 | sottostare obbligatoriamente ai dettami del coordinatore impostando |
| 174 | adeguatamente il proprio [wiki:CollegamentoMancante NAV] all'inizio di ogni CFP. |
| 175 | Durante questi periodi, essendo la comunicazione strettamente regolata dal PC, |
| 176 | le comunicazioni non necessitano dello scambio iniziale dei ''frame'' RTS/CTS. |
| 177 | Questa e' una possibilita' offerta soltanto alle stazioni che implementano PCF, |
| 178 | una funzionalita', ricordiamolo, opzionale. |
| 179 | |
| 180 | Affinche' il coordinatore possa conoscere quali stazioni sono accessibili in |
| 181 | maniera ottimale durante i CFP, invia un apposito ''poll'', a cui risponderanno |
| 182 | soltanto le stazioni dotate di tale caratteristica. Questo ''CF-poll'' e' |
| 183 | inoltre la chiave di volta su cui questa modalita' di coordinamento si fonda; |
| 184 | infatti le stazioni ''CF-pollable'' hanno occasione di spedire secondo una |
| 185 | strategia di ''piggyback'', una (e una sola) MPDU assieme all' |
| 186 | ''acknowledgment''.[[BR]] |
| 187 | Se tale invio fallisce il ''frame'' non potra' essere ritrasmesso subito, ma la |
| 188 | stazione interessata dovra' attendere il prossimo segnale di ''poll'' dal |
| 189 | coordinatore, o il prossimo periodo di contesa. Il PC, invece ha la |
| 190 | possibilita' di operare ritrasmissioni di frame non confermati (di cui, cioe', |
| 191 | non ha ricevuto l'ACK) dopo un periodo di ''backoff'' di lunghezza temporale |
| 192 | pari a [wiki:CollegamentoMancante PIFS]. |
| 193 | |
| 194 | ==== Struttura e tempistiche con PCF ==== |
| 195 | |
| 196 | ,,20061210-1817 SoujaK,,[[BR]] |
| 197 | Come gia' anticipato i periodi liberi dalla contesa (CFP), in cui la |
| 198 | trasmissione e' coordinata da PCF, si alternano temporalmente a periodi di |
| 199 | contesa (CP) in cui il coordinamento e' gestito secondo DCF. I CFP hanno inizio |
| 200 | dopo un ''frame Beacon'' contenente un apposito DTIM (Delivery Traffic |
| 201 | Indication Message, messaggio di indicazione sul traffico della consegna) e |
| 202 | avranno luogo con frequenze ben definite. Queste frequenze sono espresse come |
| 203 | quantita' di intervalli DTIM, e sono comunicate dal PC alle altre stazioni |
| 204 | tramite un campo appartenente ai ''frame Beacon'', nel set dei parametri |
| 205 | dedicati a CF. |
| 206 | |
| 207 | La durata dei CFP e' invece di appannaggio del coordinatore che ha liberta' di |
| 208 | scelta, purche' essa sia dichiarata preventivamente nel parametro |
| 209 | ''CFP-MaxDuration'', appartenente al set precedentemente citato. Non e' inoltre |
| 210 | necessario che la durata del CFP sia multipla dell'intervallo di trasmissione |
| 211 | dei Beacon, dal momento che essi contengono anche un campo "''CFPDurRemaining''" |
| 212 | che (come il nome suggerisce) indica il tempo rimanente alla fine del periodo |
| 213 | libero dalla contesa, espresso in [wiki:CollegamentoMancante TU]. In ogni caso |
| 214 | la durata del CFP e' al piu' pari al valore inizialmente dichiarato dal PC, |
| 215 | quindi va precisato che, qualora la trasmissione dei ''frame Beacon'' iniziale |
| 216 | venga ritardata (rispetto al [wiki:CollegamentoMancante TBTT]) a causa dell'alto |
| 217 | carico del mezzo trasmissivo, il CFP puo' essere terminato anticipatamente di |
| 218 | una quantita' di tempo pari al ritardo. |
| 219 | |
| 220 | ==== Procedura di accesso del PCF ==== |
| 221 | |
| 222 | ,,20061210-1931 SoujaK,,[[BR]] |
| 223 | Il protocollo di trasmissione libero da contesa e' basato su uno schema di |
| 224 | ''polling'' attuato dal coordinatore che opera nel' ''access-point'' del BSS. |
| 225 | Durante questo lasso di tempo il PC prima prende il controllo del canale, e poi |
| 226 | si assicura di mantenerlo. Prima di ogni sua trasmissione, infatti, attende |
| 227 | per intervalli di tempo minori rispetto a quelli di ogni stazione operante |
| 228 | tramite DCF. In generale tutte le stazioni diverse dal PC che sono presenti nel |
| 229 | BSS setteranno il loro NAV in accordo con il valore del parametro |
| 230 | ''CFPMaxDuration'' comunicato dal coordinatore. Per minimizzare il numero di |
| 231 | trasmissioni sono definite dallo standard precisi sequenze con cui concatenare |
| 232 | le informazioni aggregate tramite la pratica del ''piggyback''. |
| 233 | |
| 234 | ===== Accesso di base al mezzo ===== |
| 235 | |
| 236 | ,,20061211-1508 SoujaK,,[[BR]] |
| 237 | All'inizio nominale di ogni CFP il PC controlla che il mezzo trasmissivo sia |
| 238 | inutilizzato per un periodo lungo PIFS. Dopodiche' puo' trasmettere un ''frame |
| 239 | Beacon'' contenente il set di parametri dedicati al CF settati in maniera |
| 240 | opportuna unitamente ad un elemento DTIM. |
| 241 | |
| 242 | Dopo la trasmissione iniziale il coordinatore e' tenuto ad attendere almeno per |
| 243 | un periodo SIFS, poi puo' cominciare a tramettere un ''frame'' di dati, un |
| 244 | ''frame'' di tipo ''CF-Poll'', un ''frame'' contenente dati assieme al |
| 245 | ''CF-Poll'' oppure un ''frame CF-End''. Nel caso in cui il CFP sia di durata |
| 246 | nulla, perche' il PC non ha accumulato ne' traffico ne' ''poll'', esso inviera' |
| 247 | subito dopo il ''beacon'' il ''frame CF-End''. |
| 248 | |
| 249 | Le stazioni che ricevono ''frame'' senza errori sono tenute a rispondere dopo un |
| 250 | periodo SIFS, in accordo con le procedure che descriveremo piu' avanti |
| 251 | [###todolink]. Le STA riceventi che non siano di tipo ''CF-Pollable'', |
| 252 | segnaleranno il successo della ricezione con un classico ''frame'' ACK. |
| 253 | |
| 254 | ===== Uso del NAV ===== |
| 255 | |
| 256 | ,,20061218-1449 SoujaK,,[[BR]] |
| 257 | Le modalita' di gestione del NAV durante i periodi liberi da contesa sono state |
| 258 | pensate per consentire la sovrapposizione di piu' BSS di tipo infrastruttura. |
| 259 | Ogni stazione (fatta eccezione per il PC) e' tenuto a preimpostare il proprio |
| 260 | NAV con frequenza dettata dal TBTT (''target beacon trasmission time'') e con il |
| 261 | valore del parametro `CFPMaxDuration` contenuto nei ''frame beacon''. Le varie |
| 262 | STA potranno settare in maniera piu' accurata il NAV soltanto in seguito, |
| 263 | utilizzando il parametro CFPDurRemaining presente nei ''frame beacon''. E' |
| 264 | fondamentale notare che, al fine di gestire la sovrapposizione delle BSS le |
| 265 | stazioni diverse dal PC prenderanno in considerazione anche i ''beacon'' |
| 266 | provenienti da BSS diverse dalla propria. |
| 267 | |
| 268 | ==== Procedura di trasferimento ==== |
| 269 | __DA FARE__ |