Changes between Initial Version and Version 1 of IEEE802.11/FunzionamentoDiMAC


Ignore:
Timestamp:
Mar 24, 2007, 8:59:34 PM (18 years ago)
Author:
soujak
Comment:

Creazione della nuova pagina.

Legend:

Unmodified
Added
Removed
Modified
  • IEEE802.11/FunzionamentoDiMAC

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