| 1 | [[PageOutline(1-6)]] |
| 2 | |
| 3 | = Funzionamento di MAC = |
| 4 | |
| 5 | == Coordinamento per la trasmissione == |
| 6 | |
| 7 | L'accesso al mezzo di trasmissione comune dev'essere in qualche modo regolato, |
| 8 | evitando trasmissioni simultanee che interferirebbero vicendevolmente. Per |
| 9 | questo motivo il livello MAC comprende funzionalita' che gestiscono la |
| 10 | coordinazione delle varie stazioni che operano sul medesimo canale trasmissivo. |
| 11 | Si tratta della funzione di |
| 12 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#CoordinamentodistribuitoDCF coordinamento distribuito] |
| 13 | (piu' brevemente DCF), una componente evidentemente |
| 14 | necessaria ad ogni stazione, in qualsiasi modalita' essa operi, |
| 15 | ''infrastracture'' in un BSS, o ''ad-hoc'' in un IBSS.[[BR]] |
| 16 | E' inoltre presente un metodo di accesso opzionale, basato sulla funzione di |
| 17 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#CoordinamentocentralizzatoPCF coordinamento centralizzato] |
| 18 | (detto anche PCF) che fa appunto uso di un coordinatore centrale detto PC (i.e. |
| 19 | ''Point Coordinator'') che risiede nell'AP del BSS. |
| 20 | |
| 21 | DCF e PCF devono poter coesistere ed operare in maniera concorrente all'interno |
| 22 | di una BSS, quindi i due metodi di accesso al mezzo si alterneranno fra periodi |
| 23 | in cui l'accesso e' prestabilito dal PC e il mezzo libero dalla contesa |
| 24 | (''Contention-Free Period'' o CFP), e periodi di contesa del mezzo (''Contention |
| 25 | Period'' o CP), in cui il coordinamento e' distribuito. |
| 26 | |
| 27 | === Coordinamento distribuito (DCF) === |
| 28 | |
| 29 | ==== CSMA/CA e il meccanismo RTS/CTS ==== |
| 30 | |
| 31 | Il concetto chiave attraverso il quale il protocollo interpreta il meccanismo di |
| 32 | comunicazione di tipo CSMA/CA (''carrier sense multiple access with collision |
| 33 | avoidance'') e' la distribuzione di informazioni di prenotazione del mezzo |
| 34 | trasmissivo. Ogni comunicazione fra un nodo sorgente e un nodo destinazione deve |
| 35 | cominciare con lo scambio di due ''frame'' RTS (''request to send'') e CTS |
| 36 | (''clear to send'') dalla seguente semantica: "richiesta di invio" e "pronto |
| 37 | alla ricezione". Tali ''frame'' RTS e CTS contengono un campo (`Duration/ID`) |
| 38 | che indica la durata temporale nella quale il mezzo sara' impegnato per l'invio |
| 39 | del frame (o del frammento) e per la successiva ricezione dell'ACK. |
| 40 | |
| 41 | Le STA esterne alla comunicazione apprendono, tramite questo meccanismo, che il |
| 42 | canale e' occupato per quel lasso di tempo, evitando cosi' ogni collisione. La |
| 43 | doppia presenza delle informazioni in questione, in entrambe le direzioni |
| 44 | della comunicazione (sia nei frame RTS che in CTS, ad esempio), permette di |
| 45 | raggiungere tutte le STA interessate, scongiurando alcuni problemi di |
| 46 | visibilita' (come quello del nodo esposto). |
| 47 | |
| 48 | E' importante precisare che il meccanismo RTS/CTS va evitato per trasmissioni |
| 49 | ''multicast'' o ''broadcast'' (chi risponderebbe, infatti, con il corrispondente |
| 50 | CTS?). Puo' inoltre essere evitato anche nel caso di frame di dimensioni |
| 51 | ridotte (al fine di limitare l' ''overhead'' introdotto): la soglia e' definita |
| 52 | nell'attributo MAC denominato `dot11RTSThreshold`. |
| 53 | |
| 54 | ==== ''Carrier-sense'' virtuale e il NAV ==== |
| 55 | |
| 56 | La funzionalita' di ''carrier-sense'' permette di capire lo stato del mezzo |
| 57 | trasmissivo (occupato o libero) ed e' presente non solo nel sottostrato PHY, |
| 58 | come e' ovvio, ma anche in MAC. In quest'ultimo caso, pero', il meccanismo e' da |
| 59 | considerarsi virtuale, giacche', invece di analizzare direttamente mezzo, |
| 60 | utilizza il vettore di allocazione della rete (''Network Allocation Vector'' o |
| 61 | NAV). |
| 62 | |
| 63 | Ogni STA, pertanto, ha il compito di tenere traccia nel NAV delle "prenotazioni" |
| 64 | altrui indicanti la futura indisponibilita' del mezzo in modo da posticipare |
| 65 | opportunamente le proprie trasmissioni. Il calcolo del tempo di attesa |
| 66 | corrisponde al tempo totale richiesto dalle trasmissioni annunciate dallo |
| 67 | scambio RTS/CTS, cioe' la somma dei tempi necessari ad ognuna delle fasi della |
| 68 | comunicazione : la trasmissione dei ''frame'' di dati e dei relativi '' |
| 69 | [IEEE802.11/DefinizioneDeiServiziMAC#Acknowledgment acknowledgment] |
| 70 | '' unitamente ai tempi degli |
| 71 | [wiki:IEEE802.11/DefinizioneDeiServiziMAC#InterframespaceIFSspaceIFS IFS]. |
| 72 | |
| 73 | Le informazioni in questione sono contentute proprio nel campo `Duration/ID` che |
| 74 | si ricorda essere presente sia nella coppia iniziale <RTS, CTS> che nelle |
| 75 | successive coppie <PDU, ACK>; tale campo contiene la distanza temporale dal |
| 76 | termine della comunicazione, i.e. il primo ''acknowledgment''. |
| 77 | |
| 78 | Le citate informazioni necessarie alle stazioni estranee alla comunicazione sono |
| 79 | prefissate dallo standard (come la durata di invio di un ACK o i tempi |
| 80 | ''inter-frame'') oppure scelte direttamente dalle stazioni interessate alla |
| 81 | comunicazione. |
| 82 | |
| 83 | ==== ''Acknowledgment'' ==== |
| 84 | |
| 85 | La strategia usata per la notifica di ricezione e' l' ''acknowledgment'' |
| 86 | positivo, il che significa che la STA ricevente ha il compito di confermare alla |
| 87 | STA trasmittente la corretta ricezione del frame (fatte le dovute eccezioni per |
| 88 | i ''frame'' non ''unicast''). |
| 89 | |
| 90 | Il trasmittente attende il ''frame'' ACK per un periodo di tempo, fissato nel |
| 91 | parametro `ACKTimeout`, allo scadere del quale conclude che la trasmissione e' |
| 92 | fallita. Lo stesso esito si ha quando il trasmittente in attesa di ACK riceva |
| 93 | qualcosa di inaspettato. In questi casi il trasmittente provvedera' alla |
| 94 | ritrasmissione del ''frame'' secondo le procedure di accesso al mezzo stabilite |
| 95 | dal protocollo. Si noti che la mancata ricezione dell'ACK puo' |
| 96 | indistinguibilmente indicare non solo errori legate alla trasmissione dei dati, |
| 97 | ma anche nello stesso ''acknowledgment''. |
| 98 | |
| 99 | ==== ''Interframe space'' (IFS) ==== |
| 100 | |
| 101 | Lo standard stabilisce diversi tempi di attesa da rispettare dopo le |
| 102 | trasmissioni, quindi le stazioni dovranno procrastinare le proprie trasmissioni |
| 103 | per un periodo di tempo legato al tipo di ''frame'' da inviare. Il meccanismo |
| 104 | ''carrier-sense'' virtuale stabilira' quindi che il mezzo trasmissivo e' da |
| 105 | considerarsi libero solo dopo tali attese. |
| 106 | |
| 107 | La differenziazione dei 4 differenti IFS consente di stabilire le priorita' fra |
| 108 | tipologie di ''frame'': |
| 109 | 1. SIFS (''short interframe space''): |
| 110 | usato per ''frame'' ACK, CTS, ''frame'' di una trasmissione frammentata |
| 111 | (eccetto il primo) e per le risposte al ''polling'' del PCF; |
| 112 | 2. PIFS (PCF ''interframe space''): |
| 113 | usato solo dai PC in regime di PCF, in modo da assicurarsi l'accesso al |
| 114 | mezzo trasmissivo all'inizio del CFP da loro regolato; |
| 115 | 3. DIFS (DCF ''interframe space''): |
| 116 | usato sotto DCF dalle STA per i ''frame'' dati (MPDU) o per i ''frame'' di |
| 117 | gestione (MMPDU); |
| 118 | 4. EIFS (''extented interframe space''): |
| 119 | usato quando il PHY indica al MAC che l'ultimo ''frame'' MAC non e' stato |
| 120 | ricevuto correttamente e che il campo FCS non e' utilizzabile; |
| 121 | |
| 122 | ==== Random backoff time ==== |
| 123 | |
| 124 | ,,20061209-1941 SoujaK,,[[BR]] |
| 125 | Come spiegato precedentemente, ogni STA che intenda trasmettere un qualche |
| 126 | messaggio e' anzitutto tenuta ad aspettare che il mezzo trasmissivo risulti |
| 127 | libero (attraverso il meccanismo di '' |
| 128 | [wiki:CollegamentoMancante carrier-sense] |
| 129 | '' virtuale). A quel punto, pero', tutte le stazioni in attesa dovranno |
| 130 | ritardare ulteriormente la propria trasmissione per un periodo detto di |
| 131 | ''backoff''. La durata di questo periodo e' espressa come un numero casuale di |
| 132 | quanti di tempo (dal valore `aSlotTime` presente in PHY). L'intero |
| 133 | pseudo-casuale e' tenuto ad essere uniformemente distribuito fra 0 e CW, un |
| 134 | altro parametro definito come intero compreso nell'intervallo di estremi |
| 135 | `CWmin` e `CWmax`(definiti in PHY). |
| 136 | |
| 137 | Il periodo di ''backoff'' denota quindi il tempo per il quale e' fatto obbligo |
| 138 | ad ogni STA di posticipare le trasmissioni, nonostante ne abbia opportunita'. |
| 139 | Cosi' facendo, la stazione che ha "estratto" il valore del tempo di attesa |
| 140 | minimo sara' quella che si aggiudichera' l'accesso al canale. Quando esso |
| 141 | risultera' nuovamente libero, le stazioni ancora in attesa non dovranno |
| 142 | ricalcolare un nuovo ''backoff'', ma utilizzeranno il tempo di posticipo |
| 143 | rimanente. |
| 144 | |
| 145 | La scelta della durata del ''backoff'' possiede, pertanto, componenti casuali al |
| 146 | fine di minimizzare le collisioni tra le varie STA in attesa di trasmissioni in |
| 147 | quel dato istante. Ogni qual volta che una STA riesca a portare a termine con |
| 148 | successo una trasmissione, la sua CW viene ripristinata al valore minimo, cioe' |
| 149 | `CWmin`. |
| 150 | |
| 151 | La CW (''contention window'') rappresenta concettualmente il periodo di contesa |
| 152 | del mezzo, nel quale ogni STA tenta di cominciare le proprie comunicazioni. La |
| 153 | durata della CW viene inoltre aumentata con andamento esponenziale a fronte di |
| 154 | ogni collisione, al fine di ridurre progressivamente le probabilita' di questi |
| 155 | eventi. Un cosi' alto andamento di crescita della lunghezza della ''contention |
| 156 | window'' rende piu' flessibili e scalabili le procedure di accesso al mezzo, |
| 157 | aumentando la sua capacita' di adeguarsi repentinamente a condizioni di alto |
| 158 | carico. |
| 159 | |
| 160 | ==== Frame duplicati ==== |
| 161 | |
| 162 | Poiche' MAC include procedure di conferma di trasmissione (ACK) e procedure di |
| 163 | ritrasmissione in caso di fallimenti, esiste la possibilita' che un determinato |
| 164 | ''frame'' venga ricevuto piu' di una volta. La stazione ricevente deve rendersi |
| 165 | conto di tale duplicazione e scartare i successivi doppioni. A tal fine e' stato |
| 166 | inserito un campo di controllo di sequenza all'interno dei ''frame'' dati e in |
| 167 | quelli di gestione, entrambi contenenti un numero identificativo. Ogni STA |
| 168 | mantiene dunque un registro delle triple <indirizzo, numero di sequenza, |
| 169 | numero di frammento> che permette di identificare agilmente i ''frame'' |
| 170 | duplicati. Il numero di sequenza e' un numero naturale progressivo che mira ad |
| 171 | essere unico fra i vari ''frame'': qualora capitasse il contrario, il ''frame'' |
| 172 | valido erroneamente scartato verrebbe comunque ritrasmesso dalla sorgente. Va |
| 173 | precisato che la stazione destinataria di un ''frame'' duplicato, sebbene eviti |
| 174 | di inoltrarlo al livello LLC, e' comunque tenuta a notificarne la ricezione con |
| 175 | il relativo ACK. |
| 176 | |
| 177 | === Coordinamento centralizzato (PCF) === |
| 178 | |
| 179 | La PCF fornisce un metodo accesso al mezzo trasmissivo che e' libero dalla |
| 180 | contesa (e quindi anche dagli sprechi di tempo che essa comporta), grazie alle |
| 181 | regole imposte da un coordinatore centrale (''point coordinator'' o PC) |
| 182 | residente nell' ''access-point''. Ogni stazione deve sottostare |
| 183 | obbligatoriamente ai dettami del coordinatore impostando adeguatamente il |
| 184 | proprio [wiki:CollegamentoMancante NAV] all'inizio di ogni CFP. |
| 185 | |
| 186 | Durante questi periodi, essendo la comunicazione strettamente regolata dal PC, |
| 187 | le comunicazioni non necessitano dello scambio iniziale dei ''frame'' RTS/CTS. |
| 188 | Questa e' una possibilita' offerta soltanto alle stazioni che implementano PCF, |
| 189 | una funzionalita', ricordiamolo, opzionale. Il coordinatore e' in grado di |
| 190 | discriminare tali stazioni inviando un ''frame'' `CF-poll` al quale |
| 191 | risponderanno soltanto le stazioni che supportano PCF. |
| 192 | |
| 193 | Inoltre, il gia' menzionato `CF-poll` e' la chiave di volta su cui questa |
| 194 | modalita' di coordinamento si fonda, poiche' tutte le trasmissioni sono |
| 195 | veicolate tramite questo meccanismo. Le stazioni ''CF-pollable'' hanno infatti |
| 196 | occasione di spedire, tramite strategia di ''piggyback'', una (e una sola) |
| 197 | MPDU assieme all' ''acknowledgment'' del ''poll'' ricevuto. |
| 198 | |
| 199 | Se l'invio della MPDU fallisce il ''frame'' non potra' essere ritrasmesso |
| 200 | subito, ma la stazione interessata dovra' attendere il prossimo segnale di |
| 201 | ''poll'' dal coordinatore, o il prossimo periodo di contesa. Il PC, invece ha la |
| 202 | possibilita' di operare ritrasmissioni di frame non confermati (di cui, cioe', |
| 203 | non ha ricevuto l'ACK) dopo un periodo di ''backoff'' di lunghezza temporale |
| 204 | pari a [wiki:CollegamentoMancante PIFS] o al successivo turno di ''polling'' |
| 205 | della medesima STA. |
| 206 | |
| 207 | ==== Struttura e tempistiche con PCF ==== |
| 208 | |
| 209 | Come gia' anticipato i periodi liberi dalla contesa (CFP), in cui la |
| 210 | trasmissione e' coordinata da PCF, si alternano temporalmente a periodi di |
| 211 | contesa (CP) in cui il coordinamento e' gestito in maniera distribuita (DCF). I |
| 212 | CFP hanno inizio dopo un ''frame Beacon'' contenente un apposito DTIM |
| 213 | (''Delivery Traffic Indication Message'': messaggio di indicazione sul traffico |
| 214 | della consegna) e avranno luogo con frequenze ben definite. Queste frequenze |
| 215 | sono espresse come quantita' di intervalli DTIM, e sono comunicate dal PC alle |
| 216 | altre stazioni tramite un campo appartenente ai ''frame Beacon'', nel set dei |
| 217 | parametri dedicati a CF. |
| 218 | |
| 219 | La durata dei CFP e' invece di appannaggio del coordinatore che ha liberta' di |
| 220 | scelta, purche' essa sia dichiarata preventivamente nel parametro |
| 221 | ''CFP-MaxDuration'', appartenente al set precedentemente citato. Non e' inoltre |
| 222 | necessario che la durata del CFP sia multipla dell'intervallo di trasmissione |
| 223 | dei Beacon, dal momento che essi contengono anche un campo "''CFPDurRemaining''" |
| 224 | che (come il nome suggerisce) indica il tempo rimanente alla fine del periodo |
| 225 | libero dalla contesa, espresso in [wiki:CollegamentoMancante TU]. In ogni caso |
| 226 | la durata del CFP e' al piu' pari al valore inizialmente dichiarato dal PC; |
| 227 | va infatti precisato che, qualora la trasmissione dei ''frame Beacon'' iniziale |
| 228 | venga ritardata (rispetto al [wiki:CollegamentoMancante TBTT]) a causa dell'alto |
| 229 | carico del mezzo trasmissivo, il CFP puo' essere terminato anticipatamente di |
| 230 | una quantita' di tempo pari al ritardo. |
| 231 | |
| 232 | ==== Procedura di accesso del PCF ==== |
| 233 | |
| 234 | Il protocollo di trasmissione libero da contesa e' basato su uno schema di |
| 235 | ''polling'' attuato dal coordinatore che opera nel' ''access-point'' del BSS. |
| 236 | Durante questo lasso di tempo il PC prima prende il controllo del canale, e poi |
| 237 | si assicura di mantenerlo. Prima di ogni sua trasmissione, infatti, attende |
| 238 | per intervalli di tempo minori rispetto a quelli di ogni stazione operante |
| 239 | tramite DCF. In generale tutte le stazioni diverse dal PC che sono presenti nel |
| 240 | BSS setteranno il loro NAV in accordo con il valore del parametro |
| 241 | ''CFPMaxDuration'' comunicato dal coordinatore. Per minimizzare il numero di |
| 242 | trasmissioni lo standard definisce minuziosamente le sequenze di ''frame'' |
| 243 | concatenabili tramite ''piggyback''. |
| 244 | |
| 245 | ===== Accesso di base al mezzo ===== |
| 246 | |
| 247 | All'inizio nominale di ogni CFP il PC controlla che il mezzo trasmissivo sia |
| 248 | inutilizzato per un periodo lungo PIFS. Dopodiche' puo' trasmettere un ''frame |
| 249 | Beacon'' contenente il set di parametri dedicati al CF settati in maniera |
| 250 | opportuna unitamente ad un elemento DTIM. |
| 251 | |
| 252 | Dopo la trasmissione iniziale il coordinatore e' tenuto ad attendere almeno per |
| 253 | un periodo SIFS, poi puo' cominciare a tramettere un ''frame'' di dati, un |
| 254 | ''frame'' di tipo ''CF-Poll'', un ''frame'' contenente dati assieme al |
| 255 | ''CF-Poll'' oppure un ''frame CF-End''. Nel caso in cui il CFP sia di durata |
| 256 | nulla, perche' il PC non ha accumulato ne' traffico ne' ''poll'', esso inviera' |
| 257 | subito dopo il ''beacon'' il ''frame CF-End''. |
| 258 | |
| 259 | Le stazioni che ricevono ''frame'' senza errori sono tenute a rispondere dopo un |
| 260 | periodo SIFS, in accordo con le procedure che descriveremo |
| 261 | [wiki:CollegamentoMancante piu' avanti]. Le STA riceventi che non siano di tipo |
| 262 | ''CF-Pollable'' segnaleranno il successo della ricezione con il ''frame'' ACK, |
| 263 | piuttosto che con il ''CF-ACK'' eventualmente aggregato. |
| 264 | |
| 265 | ===== Uso del NAV ===== |
| 266 | |
| 267 | Le modalita' di gestione del NAV durante i periodi liberi da contesa sono state |
| 268 | pensate per consentire la sovrapposizione di piu' BSS di tipo infrastruttura. |
| 269 | Ogni stazione (fatta eccezione per il PC) e' tenuta a pre-impostare il proprio |
| 270 | NAV, essendo a conoscenza sia della frequenza dei CFP, dettata dal TBTT |
| 271 | (''target beacon trasmission time''), sia della durata, grazie al valore del |
| 272 | parametro `CFPMaxDuration` contenuto nei ''frame beacon''. Le varie STA potranno |
| 273 | settare in maniera piu' accurata il NAV soltanto in seguito, utilizzando il |
| 274 | parametro `CFPDurRemaining` presente sempre nei ''frame beacon''. |
| 275 | |
| 276 | E' fondamentale notare che, al fine di gestire la sovrapposizione delle BSS le |
| 277 | stazioni diverse dal PC prenderanno in considerazione anche i ''beacon'' |
| 278 | provenienti da BSS diverse dalla propria. |
| 279 | |
| 280 | ==== Procedura di trasferimento ==== |
| 281 | |
| 282 | La trasmissione dei ''frame'' sotto regime di coordinamento centralizzato |
| 283 | consiste di trasmissioni provenienti dal coordinatore centrale alternate a |
| 284 | trasmissioni destinate al medesimo coordinatore. Il coordinatore (i.e. l'AP) |
| 285 | ha modo di controllare l'ordine delle trasmissioni durante il CFP, poiche' esso |
| 286 | controlla le varie STA alle quali e' permesso trasmettere in un dato momento. |
| 287 | |
| 288 | ===== Trasferimenti da e verso il PC ===== |
| 289 | |
| 290 | Il PC trasmette i propri ''frame''nel tempo che intercorre fra il ''beacon'' |
| 291 | all'inizio del CFP e il ''frame'' `CF-End`, attendendo ogni volta per un SIFS. |
| 292 | Fa eccezione il caso in cui il PC aspetti invano un ''frame'' da una STA, |
| 293 | poiche' il coordinatore prolunghera' l'attesa fino ad un PIFS, per poi |
| 294 | continuare con la successiva trasmissione. Il che permette al PC di mantenere il |
| 295 | controllo del mezzo anche quando e' condiviso da piu' BSS sovrapposti. |
| 296 | |
| 297 | Segue un elenco dei tipi di ''frame'' che un PC puo' spedire alle STA, assieme |
| 298 | ad una sommaria spiegazione dei casi d'uso. |
| 299 | * '''Dati''' |
| 300 | Spedizione di dati dal PC quando la STA destinataria non viene interrogata |
| 301 | e non ci sono ''frame'' precedenti da confermare tramite ACK. |
| 302 | * '''Dati + CF-ACK''' |
| 303 | Spedizione di dati dal PC quando la STA destinataria non viene interrogata |
| 304 | e il PC necessita di confermare un precedente ''frame'' ricevuto da una |
| 305 | stazione ''CF-pollable'' un SIFS prima dell'inizio di questa trasmissione. |
| 306 | * '''Dati + CF-poll''' |
| 307 | Spedizione di dati dal PC quando la STA destinataria e' la prossima stazione |
| 308 | a cui si permette di trasmettere durante il CFP e non ci sono ''frame'' |
| 309 | precedenti da confermare tramite ACK. |
| 310 | * '''Dati + CF-ACK + CF-poll''' |
| 311 | Spedizione di dati dal PC quando la STA destinataria e' la prossima stazione |
| 312 | a cui si permette di trasmettere durante il CFP e il PC necessita di |
| 313 | confermare un precedente ''frame'' ricevuto da una stazione ''CF-pollable'' |
| 314 | un SIFS prima dell'inizio di questa trasmissione. |
| 315 | * '''CF-poll''' |
| 316 | Nessuna spedizione di dati da parte del PC ma la STA destinataria e' la |
| 317 | prossima stazione a cui si permette di trasmettere durante il CFP e non ci |
| 318 | sono ''frame'' precedenti da confermare tramite ACK. |
| 319 | * '''CF-ACK + CF-poll''' |
| 320 | Nessuna spedizione di dati da parte del PC ma la STA destinataria e' la |
| 321 | prossima stazione a cui si permette di trasmettere durante il CFP e il PC |
| 322 | necessita di confermare un precedente ''frame'' ricevuto da una stazione |
| 323 | ''CF-pollable'' un SIFS prima dell'inizio di questa trasmissione. |
| 324 | * '''CF-ACK ''' |
| 325 | Nessuna spedizione di dati o interrogazione da parte del PC ma esso |
| 326 | necessita di confermare un precedente ''frame'' ricevuto da una stazione |
| 327 | ''CF-pollable'' un SIFS prima dell'inizio di questa trasmissione (utile |
| 328 | quando la prossima trasmissione e' un ''frame'' di gestione. |
| 329 | * '''''Frame di gestione''''' |
| 330 | |
| 331 | Ogni volta che una STA ''CF-Pollable'' riceve un ''frame'' a lei diretto avra' |
| 332 | la possibilita' di inviare un ''frame'' dati dopo l'eventuale ''poll'' del PC. |
| 333 | Le trasmissioni effettuate dalle STA in risposta ai ''poll'' non devono seguire |
| 334 | le regole di allocazione del mezzo settando il NAV: in quel caso il vettore |
| 335 | andra' ignorato (non azzerato).[[BR]] |
| 336 | Le stazioni che invece non sono ''CF-Pollable'' che ricevono ''frame'' dall'AP |
| 337 | durante il CFP rispondono tramite il consueto ''frame'' ACK (senza resettare il |
| 338 | proprio NAV). |
| 339 | |
| 340 | Una stazione di tipo ''CF-Pollable'' e' tenuta a rispondere sempre ai ''poll'' |
| 341 | ricevuti dal PC, anche quando non ha dati in attesa di essere trasmessi; in tal |
| 342 | caso inviera' un ''Null frame'' o, qualora abbia appena ricevuto una |
| 343 | trasmissione dal PC, un semplice frame ''CF-ACK''. |
| 344 | |
| 345 | ===== Sovrapposizione di BSS ===== |
| 346 | |
| 347 | Poiche' la funzionalita' di coordinamento centralizzato funziona senza le |
| 348 | finestre di contesa imposte dal meccanismo [wiki:CollegamentoMancante CSMA/CA], |
| 349 | ogni PC assumera' di avere uso esclusivo del WM. Sussiste pertanto il rischio di |
| 350 | collisioni ripetute qualora sul medesimo canale fisico si sovrapponessero piu' |
| 351 | BSS ad infrastruttura, specialmente se con caratteristiche simili (intervallo |
| 352 | dei ''beacon'' e tasso dei CFP). Per minimizzare la perdita di ''frame'', |
| 353 | quindi, ogni PC e' tenuto ad osservare un ritardo, prima di iniziare il proprio |
| 354 | CFP, piu' lungo di un periodo DIFS, aggiungendo un ''backoff'' pseudo-casuale. |
| 355 | Questo ''backoff'' puo' essere usato, volendo, anche prima delle ritrasmissioni |
| 356 | di ''frame'' persi. |
| 357 | |
| 358 | In caso di sovrapposizione di BSS a carico particolarmente alto, e' possibile |
| 359 | sfruttare un ulteriore mecccanismo di protezione dalle collisioni, utilizzando |
| 360 | il parametro `aMediumOccupancyLimit` che permette di autolimitare i tempi di |
| 361 | uso continuativo del canale di una singola STA, come forma di galateo del |
| 362 | mezzo trasmissivo. |
| 363 | |
| 364 | ===== Il limite `CFPMaxDuration` ===== |
| 365 | |
| 366 | Questo limite dovrebbe essere impostato in modo tale da permettere la |
| 367 | coesistenza di traffico in regime CFP e CP. Lo standard impone un valore minimo |
| 368 | e un valore massimo tali da permettere almeno uno scambio di ''frame'' in ognuno |
| 369 | dei due periodi. |
| 370 | |
| 371 | ===== Regole d'uso dei CFP ===== |
| 372 | |
| 373 | Quando una STA ''pollable'' riceve un ''poll'' dal coordinatore centrale, essa |
| 374 | ha l'occasione di spedire un ''frame'' di dati ad una destinazione qualsiasi; |
| 375 | tale ''frame'' sara' comunque diretto a al PC, anche se non e' indirizzato ad |
| 376 | esso. Quest'ultimo dovra' confermare la ricezione, dopo aver atteso per un SIFS, |
| 377 | tramite un CF-ACK. Una STA che non abbia dati da inviare, rispondera' al ''poll' |
| 378 | ' con un ''frame Null'', dopo un periodo SIFS. Qualora, invece, la STA non abbia |
| 379 | abbastanza tempo per l'invio di tutti i dati in attesa, rispondera' settando il |
| 380 | bit "dati in attesa" (''more data''), per permettere al PC di distinguere le STA |
| 381 | senza dati in attesa dalle STA che non hanno tempo a sufficienza. |
| 382 | |
| 383 | ===== Lista di ''polling'' ===== |
| 384 | |
| 385 | Come accennato precedentemente, i PC che supportano l'uso del CFP mantengono |
| 386 | una lista di ''polling'' da usare durante la selezione delle STA che |
| 387 | dovranno ricevere il ''CF-poll'' durante i periodi liberi da contesa. |
| 388 | |
| 389 | La lista di ''polling'' e' un costrutto logico interno all'AP, utilizzato per |
| 390 | permettergli di interrogare ogni STA, a prescindere dalla presenza di dati a |
| 391 | loro indirizzati. Lo standard impone che sia implementata una qualche tecnica |
| 392 | elementare di gestione di questa lista, lasciando quindi la possibilita' di |
| 393 | implementazioni piu' avanzate. |
| 394 | |
| 395 | Qualora un PC supporti l'uso del CFP per soli ''frame'' in uscita, esso non |
| 396 | avra' bisogno delle liste di ''polling'' e non dovra' nemmeno generare ''frame'' |
| 397 | contenenti ''CF-poll''. In generale, le informazioni che descrivono la modalita' |
| 398 | di supporto al CF da parte del PC sono comunicate attraverso il campo |
| 399 | `Capability Information` presente nei ''beacon'' e nei ''frame'' di gestione |
| 400 | inviati dall'AP. |
| 401 | |
| 402 | ====== Processamento della lista di ''polling'' ====== |
| 403 | |
| 404 | Durante il CFP il PC dovrebbe inviare un ''CF-Poll'' ad un sottoinsieme delle |
| 405 | STA presenti in lista, in ordine crescente di AID, ma e' tenuto ad inviarne |
| 406 | almeno uno ad almeno una STA. Se tutte le STA sono state interrogate e il CFP |
| 407 | non e' ancora terminato, il PC puo' sfruttare il tempo a disposizione per |
| 408 | l'invio di ''frame'' (di dati o di gestione) a qualunque STA. La strategia |
| 409 | ''piggyback'' applicata agli ''acknowledgment'' permette di incrementare |
| 410 | notevolmente l'efficenza, quindi lo standard ne incoraggia l'uso. |
| 411 | |
| 412 | ====== Aggiornamento della lista di ''polling'' ====== |
| 413 | |
| 414 | Una STA ha modo di indicare la sua capacita' di rispondere alle interrogazioni |
| 415 | dei ''CF-poll'' tramite il sottocampo `CF-pollable` presente nel campo |
| 416 | `Capability Information`, all'interno dei ''frame'' di richiesta di associazione |
| 417 | e riassociazione. |
| 418 | |
| 419 | Nel caso in cui una STA ''CF-pollable'' non desideri essere inserita nella lista |
| 420 | di ''polling'', dovra' settare il sottocampo `CF-pollable` falso e quello |
| 421 | `CF-poll request` vero. Questo potrebbe essere utile per permettere ad una STA |
| 422 | in modalita' ''power save'' di sfruttare il tempo a sua disposizione solo per la |
| 423 | ricezione di ''burst'' di dati: svegliandosi solo durante il CFP ha infatti la |
| 424 | possibilita' di ricevere tutta in una volta la mole di dati bufferizzata dal PC. |
| 425 | La richiesta di riassociazione puo' essere usata per comunicare all'AP i |
| 426 | cambiamenti di volonta' in merito all'inserimento nella lista di ''polling''. |
| 427 | |
| 428 | === Frammentazione === |
| 429 | |
| 430 | Il livello MAC puo' decidere di frammentare (risp. riassemblare) MSDU o MMPDU a |
| 431 | lui diretti dai livelli inferiori (superiori) e dispone di meccanismi appositi |
| 432 | per gestire efficientemente la ritrasmissione dei frammenti. |
| 433 | |
| 434 | La lunghezza (i.e. il numero di ottetti) dei vari frammenti MPDU dovrebbe essere |
| 435 | uguale, eccezion fatta per l'ultimo, eventualmente piu' piccolo. Inoltre i |
| 436 | frammenti, devono sempre essere formati da un numero pari di ottetti, ancora una |
| 437 | volta escludendo l'ultimo che puo' anche essere dispari. La specifica politica |
| 438 | di divisione in frammenti e' lasciata alla discrezione dell'implementatore. |
| 439 | |
| 440 | MAC offre inoltre la possibilita' di impostare la soglia oltre la quale la MSDU |
| 441 | o la MMPDU da spedire deve essere frammentata, in modo tale da poter bilanciare |
| 442 | l' ''overhead'' dovuto alla frammentazione con i benefici che ne derivano. Tale |
| 443 | parametro, denominato `aFragmentationThreshold`, e' presente nel MIB. |
| 444 | |
| 445 | Particolare attenzione deve essere rivolta alla frammentazione in congiunzione |
| 446 | con il servizio |
| 447 | [wiki:IEEE802.11/AutenticazioneEPrivacy#FunzionamentodiWEP WEP], |
| 448 | poiche' esso viene applicato ai dati gia' frammentati, espandendo la |
| 449 | lunghezza dell'MPDU con l'aggiunta di due sottocampi nel corpo del ''frame'': |
| 450 | l' ''IV'' e l' ''ICV''. |
| 451 | |
| 452 | Una volta trasmesso il frammento per la prima volta, la lunghezza del suo corpo |
| 453 | deve rimanere tale durante tutto il tempo di vita (lungo il tragitto di |
| 454 | consegna), ed e' quindi vietata ogni manipolazione da parte delle STA |
| 455 | intermedie, anche quando esse potrebbero portare dei vantaggi (accesso al |
| 456 | mezzo). |
| 457 | |
| 458 | Come accennato nella sezione dedicata alla gestione dei |
| 459 | [wiki:IEEE802.11/FunzionamentoDiMAC#Frameduplicati frame duplicati], ogni |
| 460 | ''frame'' contiene un numero identificativo della MSDU o della MMPDU, presente |
| 461 | nel campo di controllo della sequenza (''sequence number''). I frammenti |
| 462 | appartenenti alla medesima unita' di dati contengono lo stesso numero di |
| 463 | sequenza, ma sono distinguibili tramite un numero naturale progressivo del |
| 464 | frammento (''fragment number''). I frammenti vengono inviati in ordine crescente |
| 465 | rispetto al loro numero identificativo ed ognuno di essi (eccettuato l'ultimo) |
| 466 | ha il [wiki:IEEE802.11/FormatoDeiFrameMAC#Framecontrol campo] "ulteriori |
| 467 | frammenti" (''more fragments'') asserito. |
| 468 | |
| 469 | La STA sorgente deve mantenere un timer di trasmissione di MSDU, per ogni |
| 470 | MSDU trasmessa. L'attributo `aMaxTrasmitMSDULifetime` specifica il tempo |
| 471 | massimo concesso per trasmettere una MSDU. Il timer parte con il primo tentativo |
| 472 | di trasmissione del primo frammento. Se il timer supera |
| 473 | ''aMaxTrasmitMSDULifetime'', tutti i restanti frammenti saranno scartati dalla |
| 474 | STA sorgente e non ci saranno tentativi di completare la trasmissione. |
| 475 | |
| 476 | === Riassemblaggio === |
| 477 | |
| 478 | Come e' stato appena descritto, ogni frammento contiene, all'interno |
| 479 | dell'intestazione del ''frame'', le informazioni necessarie al riassemblaggio |
| 480 | dei frammenti dell'MSDU o dell'MMPDU. La STA destinazione ricostruisce quindi |
| 481 | l'MSDU combinando i frammenti in ordine di ''fragment number''. Il bit ''more |
| 482 | fragments'' presente nei singoli frammenti indica alla stazione destinataria che |
| 483 | l'MSDU frammentata non e' stata ancora ricevuta nella sua completezza. Appena la |
| 484 | STA riceve il frammento con tale bit impostato a zero, capisce che non ci sono |
| 485 | piu' frammenti da ricevere. |
| 486 | |
| 487 | Come e' facile intuire, il riassemblaggio di dati cifrati puo' avvenire solo |
| 488 | dopo che sono stati decifrati. |
| 489 | |
| 490 | Tutte le STA devono poter gestire almeno tre MSDU concorrenti, nella fase di |
| 491 | ricezione e in quella di riassemblaggio (nel caso il ricevente sia il |
| 492 | destinatario) o di inoltro (nel caso di STA intermedie). Si tenga presente che |
| 493 | la gestione contemporanea di piu' di tre sequenze di frammenti potrebbe |
| 494 | comportare un aumento del carico del ricevente e, quindi, un notevole aumento |
| 495 | anche dei tempi di trasmissione delle MSDU. |
| 496 | |
| 497 | La scadenza del timer di trasmissione di una MSDU comporta infatti la |
| 498 | ritrasmissione dell'intera sequenza in cui essa e' scomposta. La STA |
| 499 | destinazione deve mantenere a sua volta un timer di ricezione per ogni MSDU in |
| 500 | arrivo; la trasmissione di ogni frammento ricevuto dopo la scadenza del timer |
| 501 | (`aMaxReceiveLifetime`) deve essere confermato tramite ACK, nonostante il |
| 502 | ''frame'' venga scartato. |
| 503 | |
| 504 | === Supporto al ''multi-rate'' === |
| 505 | |
| 506 | Alcuni entita' fisiche consentono l'uso di differenti velocita' di trasferimento |
| 507 | dei dati e implementano anche adeguati meccanismi che ne gestiscano il cambio |
| 508 | dinamico. L'obiettivo e' quello usare una velocita' trasmissiva adeguata alla |
| 509 | qualita' del segnale, giacche' poche trasmissioni a bassa velocita' potrebbero |
| 510 | richiedere meno tempo rispetto a numerosi tentativi effettuati alla massima |
| 511 | velocita'. |
| 512 | |
| 513 | L'algoritmo di scelta del ''data-rate'', va oltre gli scopi dello |
| 514 | standard, ma per garantire coesistenza e interoperabilita' fra livelli PHY |
| 515 | ''multi-rate'' lo standard definisce l'insieme di regole precise riportato di |
| 516 | seguito. |
| 517 | |
| 518 | * Tutti i frame di controllo devono essere trasmessi ad una delle velocita' |
| 519 | obbligatorie del BSS (fissate nel parametro `BSSBasicRateSet`), o ad una |
| 520 | delle velocita' rese disponibili dallo specifico PHY, sempre compatibilmente |
| 521 | con l'insieme delle STA destinatarie. |
| 522 | * Tutti i ''frame'' ''broadcast'' e ''multicast'' devono essere trasmessi ad |
| 523 | una delle velocita' presenti nell'insieme `BSSBasicRateSet`. |
| 524 | * Gli MPDU dati o di gestione con un'indirizzo ''unicast'' devono essere |
| 525 | mandati ad una delle velocita' supportate, eventualmente quella selezionata |
| 526 | dall'algoritmo di cambio dinamico di velocita'. Il ''data-rate'' |
| 527 | effettivamente utilizzato e' disponibile, espresso in unita' di 500 Kb/s, nel |
| 528 | parametro `MACCurrentRate`, e concorre al calcolo del campo ''duration'' dei |
| 529 | ''frame''. |
| 530 | * In nessuna circostanza una STA deve trasmettere ad una velocita' piu' alta |
| 531 | del massimo dichiarato durante la fase di sincronizzazione con il BSS, |
| 532 | tramite il parametro `OperationalRateSet` della primitiva |
| 533 | `MLME-JOIN.request`. |