# Architettura wireless

L'architettura wireless è dominata dallo standard `IEEE 802.11`, che consente la comunicazione senza fili tra dispositivi. In un contesto di rete locale (LAN), è comune che una componente cablata venga estesa attraverso l'uso di `Access Point` (AP), permettendo così ai dispositivi di connettersi in modalità wireless. Le informazioni vengono trasmesse tramite onde radio, consentendo una maggiore flessibilità e mobilità.

Esistono due principali tipologie di infrastruttura wireless:

- `Ad Hoc (IBSS - Independent Basic Service Set)`: questa configurazione consiste in un insieme di dispositivi opportunamente configurati per comunicare direttamente tra loro tramite le loro schede wireless. Si tratta di una rete peer-to-peer, in cui ogni nodo funge sia da server che da client, permettendo una comunicazione diretta senza la necessità di un punto di accesso centrale.

- `Wireless LAN con Infrastruttura`: in questo modello, l'Access Point funge da punto di coordinamento centrale. L'AP consente la comunicazione tra più dispositivi wireless, noti anche come stazioni o terminali wireless.

![Architettura Wireless](asset/img/wireless%20architecture.png)

## Concetti chiave

- Il `BSS` (Basic Service Set) rappresenta il gruppo di dispositivi che comunicano tra loro all'interno di una rete wireless. Ogni BSS è identificato da un `BSSID` (Basic Service Set Identifier), che è l'indirizzo MAC dell'Access Point nel caso di un BSS con infrastruttura, o l'indirizzo MAC di uno dei dispositivi nel caso di un BSS Ad Hoc.
- `SSID` (Service Set Identifier): è un identificativo logico della rete, facile da ricordare, che consente agli utenti di riconoscere e connettersi alla rete wireless desiderata.
- `ESSID` (Extended Service Set Identifier) è un'estensione del SSID, utilizzata per identificare reti wireless più ampie che possono includere più Access Point, garantendo una connessione continua e senza interruzioni per gli utenti in movimento.
- `Roaming`: è una funzionalità fondamentale delle reti wireless che consente ai dispositivi di spostarsi automaticamente da un Access Point (AP) a un altro senza interruzioni nella connessione. Quando un dispositivo wireless si allontana dall'AP a cui è attualmente connesso e entra nella copertura di un altro AP, il processo di roaming avviene in modo fluido e automatico. Questo implica la deautenticazione dal primo AP e l'autenticazione sul secondo AP, garantendo così una continuità del servizio.
- `DS` (Distributed System): consente la comunicazione tra dispositivi, sia wireless che cablati, al di fuori del singolo Basic Service Set (BSS). In un sistema distribuito, gli Access Point possono comunicare tra loro e con altri dispositivi (anche non wireless), consentendo una rete più ampia e complessa.

Gli *Access Point* svolgono un ruolo cruciale nella traduzione dei frame di rete. Sono in grado di convertire gli header degli ethernet frame in wireless frame e viceversa. Questo processo di traduzione è fondamentale per garantire che i dati possano essere trasmessi correttamente tra dispositivi cablati e wireless.

## Anatomia del Wireless Frame

![Wireless Frame](asset/img/wireless-frame.png)

É composto da diversi campi, ognuno con funzioni specifiche. Di seguito sono descritti i principali componenti di un wireless frame:

### Frame Control

Il campo `Frame Control` occupa due byte e contiene numerosi sottocampi, tra cui:

- **Version**: indica la versione dello standard IEEE 802.11 utilizzato per il frame
- **Type e Subtype**: questi campi specificano il tipo e il sottotipo del frame. Esistono tre categorie principali di frame:
  - **Gestione** (Type 00): Utilizzato per le comunicazioni iniziali tra l'Access Point (AP) e i dispositivi wireless
  - **Controllo** (Type 01): Questo tipo si suddivide ulteriormente in:
    - **Frame RTS** (Request to Send): Sottotipo 1011
    - **Frame CTS** (Clear to Send): Sottotipo 1100
    - **Frame ACK** (Acknowledgment): Sottotipo 1101
  - **Dati** (Type 02): Questo tipo di frame trasporta i dati effettivi
- **ToDS/FromDS**: i bit ToDS e FromDS indicano la direzione del frame rispetto al Distribution System (DS). Le varie combinazioni sono le seguenti:
  - **ToDS = 0** e **FromDS = 0**: il frame non è destinato a un DS e non proviene da esso. Ci troviamo dunque all'interno dello stesso BSS (Basic Service Set) e il frame viene scambiato direttamente tra stazioni wireless dello stesso BSS
  - **ToDS = 0** e **FromDS = 1**: il frame proviene da un DS. Questo scenario si verifica ad esempio quando un frame viene inoltrato dal DS fino a una stazione finale.
  - **ToDS = 1** e **FromDS = 0**:  il frame è destinato al DS, il che significa che la stazione sorgente si trova all'interno del BSS e il frame deve essere trasmesso verso il DS per raggiungere una stazione esterna al BSS
  - **ToDS = 1** e **FromDS = 1**: ciò accade quando un frame viene trasmesso tra stazioni appartenenti a BSS differenti. La comunicazione, in questo caso, sfrutta il DS come ponte fra i due BSS

### Sequence Control

Contiene due sottocampi:

- `Fragment Number`: indica il numero di frammento del frame corrente. Quando un pacchetto di dati è troppo grande per essere trasmesso in un'unica volta, viene frammentato, e ogni frammento è identificato dal suo numero. Questo è essenziale per il destinatario, che utilizza il fragment number per ricostruire il pacchetto originale.
- `Sequence Number`: indica il numero di sequenza del frame corrente. Questo campo è fondamentale per garantire che i frame vengano trasmessi e ricevuti nell'ordine corretto.

### Data

Il campo **Data** rappresenta il payload incapsulato dal livello di rete.

### Trailer

**FCS** (Frame Check Sequence): il trailer termina il frame con un campo di 4 byte, il cui scopo è la verifica dell’integrità dei dati trasmessi.
