# Wifi-MAC-laag

De wifi-MAC-laag is de MAC-laag, onderdeel van de datalinklaag van het OSI-model, voor draadloze netwerken die de IEEE 802.11-standaard (wifi) gebruiken. De MAC-laag staat in voor de communicatie tussen wifi-stations door de toegang tot een gedeeld kanaal te coördineren en de protocollen te gebruiken die de communicatie over het draadloos medium versterken. De laag maakt gebruik van een fysieke 802.11-laag, zoals 802.11a of 802.11n, om zijn taken te vervullen.

## Wi-Fi-certificatie

Wi-Fi is een certificatielabel voor draadloze datanetwerkproducten. Deze producten werken volgens de internationale standaard IEEE802.11 (draadloos ethernet). Deze standaard gebruikt de 2,4GHz-5GHz-frequentieband. Deze frequentieband mag onder bepaalde voorwaarden zonder licentie gebruikt worden. De vereisten worden bepaald door de Wi-Fi Alliance. Het Wi-Fi-logo mag pas worden gebruikt wanneer een onafhankelijk certificatiebureau heeft aangetoond dat aan bepaalde vereisten voldaan zijn. Deze vereisten zijn onder andere op vlak van functionaliteit, prestatie en interoperabiliteit. Dit laatste is belangrijk want de gebruiker zal waarschijnlijk een draadloze opstelling gebruiken met toestellen van verschillende fabrikanten.

## Basiswerking

Wifi maakt gebruik van radiogolven en werkt in twee richtingen. Met behulp van een wireless PCI-kaart is een node in staat draadloze verbindingen te maken. De kaart bevat een uniek MAC-adres zodat de node waarin de kaart is ingebouwd geïdentificeerd kan worden binnen het draadloos netwerk. Data wordt gecodeerd door de wireless PCI card van een node en de gecodeerde data wordt uitgezonden met behulp van een antenne. Een wireless router pikt het signaal op en decodeert de data. Dit proces werkt ook in twee richtingen.

## MAC-frametypes voor wifi

Voor overdracht van data worden frames gebruikt met een vaste structuur. Elk frame bestaat uit een aantal velden. De framestructuur is vast bepaald voor de standaard 802.11. De frames bevorderen zowel transmissie als management en controle. De frames zijn onderverdeeld in verschillende delen (ook bepaald volgens de standaard). Elk frame heeft een MAC-header, een payload en een frame-check-sequence. De payload is niet altijd aanwezig.

#### Datatransportframe

De eerste twee bytes van de MAC-header is een controleveld.
Dit framecontroleveld bestaat uit verschillende subvelden:
* Protocolversie: 2 bits die de protocolversie bepalen.
* Type: 2 bits die mee het type WLAN-frame helpen identificeren.
* Subtype: 4 bits, type en subtype samen bepalen exact 1 frame.
* ToDS en FromDS: 2 bits (1 voor elk), geeft aan of het data frame voor een DS of van een DS komt (distributed system). Control- & managementframe 0, dataframe 1.
* More fragment: 1 bit, geeft aan of er nog een frame komt dat aansluit op het huidige.
* Retry: 1 bit, sommige frames moeten 2 keer verzonden worden, deze bit staat op 1 als het frame al een keer is verzonden.
* Power management: 1 bit, power-managementstatus na verzending (toegangspunten moeten een connectie onderhouden en zetten dus nooit de power-saverbit).
* More data: 1 bit, om frames te bufferen die ontvangen zijn in een distributed system (voor stations in power-savermodus, de bit toont aan dat er nog een frame geadresseerd is aan het station).
* WEP: 1 bit, deze bit is 1 als het frame niet geëncrypteerd is of gedecrypteerd wordt.
* Order: 1 bit, deze bit wordt op 1 gezet wanneer de "strict ordering delivery"-methode gebruikt wordt. Hier is de volgorde van frames van belang.
Het controleveld bestaat uit 16 bits en dus 2 bytes in totaal.
De volgende twee bytes zijn voorbehouden voor het duration-ID-veld. Dit veld kan onder drie vormen voorkomen: Duration, Contention-Free Period (CFP) en AssociationID (AID).
Een 802.11-frame kan tot vier adresvelden bevatten. Elk veld kan een MAC-adres opslaan, dit neemt 6 bytes in beslag. Adres 1 is de ontvanger, adres 2 de zender, adres 3 wordt door de ontvanger gebruikt voor filterdoeleinden. Het Sequence Control veld bestaat uit 2 bytes en dient voor het bepalen van de orde van de frames (opeenvolging) en het elimineren van dubbele frames. De eerste 4 bits worden als fragmentatienummer gebruikt (aantal frames dat bij elkaar horen), de laatste 12 bits zijn de sequentienummers die de volgorde bepalen. Het Quality of service-veld is optioneel en bestaat uit 2 bytes.
Al de vooraf besproken velden bepalen de MAC-header.
De payload van het frame kan variëren van 0 tot 2304 bytes plus extra velden die voor beveiliging zijn toegevoegd (inkapselen) en velden met informatie van hogere lagen van het OSI-model.
Dan is er ten slotte de Frame Check Sequence (FCS). FCS bestaat uit de laatste 4 bytes van het 802.11 frame. FCS is een Cyclic redundancy check (CRC). CRC is een manier om de integriteit van het ontvangen frame te controleren. Wanneer een frame wordt verzonden, berekent de zender de FCS. De FCS wordt dan achteraan het frame gehangen en het frame wordt verzonden. De ontvanger berekent zelf de FCS en vergelijkt de uitkomst met de FCS die de zender heeft berekend. Als de twee overeenkomen wordt er aangenomen dat het frame foutloos is overgebracht.
Buiten de frames voor het verzenden van data, zijn er nog twee andere type frames.

#### Management Frame

Deze frames onderhouden en zetten de verbindingen op. Hieronder een lijst van enkele subtypes-managementframes.
* Authenticatieframe:
** De draadloosnetwerkkaart stuurt een authenticatieframe uit naar het toegangspunt. Hierop accepteert het toegangspunt door een eigen authenticatieframe. Encryptie wordt hier al bepaald.
* Association-request-frame:
** De draadloosnetwerkkaart (van een station) stuurt dit frame naar het toegangspunt. Hiermee kan het toegangspunt resources toewijzen en synchroniseren. Het frame bevat informatie over de draadloosnetwerkkaart zoals de ondersteunde datarate(s) en de SSID (Service Set Identifier) waarmee het station wil communiceren (de SSID onderscheidt verschillende draadloze netwerken). Als de verbinding door het toegangspunt wordt geaccepteerd, wordt er geheugen gereserveerd en krijgt de draadloosnetwerkkaart een association ID.
* Association-response-frame:
** Dit frame wordt van toegangspunt naar station gestuurd. In dit frame wordt een verbinding geaccepteerd of afgewezen. Als de verbinding geaccepteerd wordt, bevat dit frame een association ID en ondersteunde datarates en andere informatie.
* Beacon-frame:
** Dit frame wordt regelmatig uitgestuurd door een toegangspunt om zijn bestaan aan te tonen en andere parameters (zoals SSID) bekend te maken aan draadloosnetwerkkaarten in de omgeving.
* Deauthentication-frame:
** Dit frame wordt verstuurd wanneer een station de draadloze verbinding van een ander station wil verbreken.
* Disassociation frame:
** Als een station de verbinding wil verbreken, stuurt het dit frame. Het MAC-adres van de draadloosnetwerkkaart wordt van de associatietabel verwijderd. Zo komt er ook geheugen vrij op het toegangspunt.
* Probe-requestframe:
** Een station dat informatie van een ander station nodig heeft, gebruikt dit frame.
* Probe-responseframe:
** Dit frame wordt verstuurd door een toegangspunt wanneer het een probe-requestframe heeft ontvangen. In het responseframe staan parameters van andere stations.
* Reassociation-requestframe:
** Wanneer een station uit het bereik van een toegangspunt valt en in het bereik van een ander toegangspunt komt (met een sterker signaal), stuurt het een reassociation-requestframe. Het nieuwe toegangspunt probeert de informatie over het station te verkrijgen van het vorige toegangspunt.
* Reassociation-responseframe:
** Dit frame wordt door een toegangspunt verzonden en accepteert of wijst de reassociation request van een draadloosnetwerkkaart af. Verder bevat dit frame associatie-informatie zoals ondersteunde datarates en een association ID.

#### Controleframe

Controleframes maken de uitwisseling van frames tussen stations mogelijk. Hier volgt een lijst van controle frames die vaak gebruikt worden in de 802.11-standaard.
* Acknowledge-frame (ACK):
** Nadat een station een frame heeft ontvangen, zal het een ACK-frame verzenden naar het zendende station als de data foutloos is overgedragen. Als het zendende station dit frame niet ontvangt, zal het na een bepaalde periode het dataframe opnieuw versturen.
* Request to Send (RTS)-frame:
** Samen met CTS-frames, zorgt dit frame voor een lagere kans op collisions (botsingen) voor toegangspunten met verborgen stations. Dit frame wordt verzonden door een station wanneer die een verbinding wil aangaan met een ander station. Dit is de eerste stap voor het maken van een verbinding.
* Clear to Send (CTS)-frame:
** Het antwoord dat een station geeft wanneer het een RTS-frame krijgt. Het geeft aan of de dataframeoverdracht gestart mag worden. Andere stations worden voor een bepaalde tijd op hold gezet.