La magie du WiFi : la couche MAC
Par 4n9e le 16-02-2007
Medium Access Control et mecanismes d'integrite des donnees dans les reseaux sans fil
Sommaire :
I. CSMA, TDMA et Polling
II. TCP et transmissions radio
III. retransmission au niveau MAC
IV. Notion de fragmentation
V. Attenuation en ligne et detection des recepteurs actifs
VI. Vitesse reelle de transmission et prix des mecanismes
I. CSMA, TDMA et Polling
Cette appellation represente le fait que le protocole MAC (Medium Acces Control) est le composant principal de la couche liaisons.
Le but du protocole MAC est de gérer l'usage du media WiFi : il va decider quand un equipement radio va pouvoir transmettre, et quand il est supposé
recevoir des données.
C'est ce qu'on appelle le mechanisme d'acces aux canaux. Il en existe trois en liaisons radio, le TDMA, le CSMA et le "polling".
Le CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance) quant a lui est le mechanisme privilégié dans les reseaux sans fil.
Il est derive du CSMA/CD (collision detection) utilisé en Ethernet. La difference tient au fait que dans un cable, un equipement peut transmettre
pendant qu'il ecoute sans qu'il y ait collision entre les deux données (entrantes et sortantes).
Or dans un equipement radio, meme si celui ci peut theoriquement emettre et recevoir en meme temps, en realité la force de sa propre emission "couvre"
une eventuelle reception simultannée. D'où le principe qui va etre ici d'ecouter avant de transmettre (...un principe de sage que certains parmis nous
devraient suivre, n'est ce pas ? )
Pour ce faire, il ecoute le canal. Si celui ci est occuppé, il attend. Si celui ci est libre, il emet. C'est simple, et assez robuste en outre aux
interferences, parcequ'il va les prendre pour une occupation de canal et ne pas transmettre.
En pratique, s'y ajoute un principe de contention : lorsqu'il ecoute un canal, que celui ci semble silencieux, il génére un nombre aleatoire qui lui
sert de temps d'attente. A la fin de cette attente, il ecoute a nouveau : si le canal est toujours libre, alors il envoie le premier paquet.
Comme la contention est aleatoire pour chaque noeud du reseau, ca devient en fait un challenge : tout le monde "tire au sort" son temps d'attente, et
celui qui a le plus court gagne le droit d'emettre !
Cette contention est calculée a chaque paquet transmis, par tous les noeuds. Ainsi statistiquement chaque noeud a un temps equitable de parole sur le
reseau.
Le CSMA en WiFi est attaquable, ceci a ete decrit dans les articles suivants :
Hack The MAC : amilabs.com/HTM/HTM80211.pdf, en particulier le PoC p13-17
Son application, ipw2200 : purecode.ch/?page=details&id=13
Plus general :
Wireless Hacking: Breaking Through : althing.cs.dartmouth.edu/local/wi-foo-chapter.html
Plus :
CERIAS Tech Report 2005-61 : cerias.purdue.edu/tools_and_resources/bibtex_archive/archive/2005-61.pdf
Le polling enfin se situe a mi chemin entre le TDMA et le CSMA. La base garde le controle total du reseau, mais la taille des trames n'est plus fixe,
permettant ansi des tailles variables de paquets.
En fonction du traffic, la base envoie une autorisation d'emettre a un noeud quand elle considere que le tour de celui ci est venu. Dans certains cas,
la base envoie une autorisation a tous les noeuds du reseau afin de voir qui repond afin de determiner qui a besoin de transmettre.
Comme le CSMA propose un reseau ad-hoc sans besoin d'une station de base pour gerer le reseau, il est préféré dans le cadre d'un reseau WiFi.
Cela etant, le probleme majeur du protocole CSMA/CA est que l'emetteur en peut pas detecter les collisions sur le media. En outre, il existe un plus
grand taux d'erreur sur une transmission radio que filaire impliquant un plus grand risque que les paquets TCP soient corrompus. Or, TCP n'apprecie pas
vraiment la perte de paquets au niveau de la couche MAC.
En effet, TCP a ete developpe avant tout dans le cadre de reseaux filaires, reseaux ou les pertes sont minimales. Si un paquet est perdu, TCP considere
qu'il a ete rejete au niveau d'un routeur ou d'une passerelle du fait de la congestion. Afin de reduire cette congestion, TCP ralentis de facon
drastique.
Dans le cas d'une interface radio, le taux d'erreur est plus grand puisque les collisions peuvent difficilement etre reperees avec certitude (les
detecter de facon statistique ne represente pas une certitude acceptable). Dans ce cas, TCP considere ceci comme un etat de congestion et se degrade,
n'utilisant pas toute la bande passante disponible.
Dans un reseau sans fil, le principe de retransmission au niveau MAC resoud ce probleme en detectant et eliminant la perte de paquets due aus erreurs et
autres collisions. Ce qui permet a TCP de "voir" un canal propre, et ne lui donne aucune raison de ralentir.
Le principe est simple : chaque fois qu'un noeud recoit un paquet, il renvoie un message court (un ACK) a l'emetteur pour indiquer qu'il a recu
correctement et sans erreurs le paquet. De ce fait, si apres une transmission l'emetteur ne recoit pas cet ACK il sait que ce paquet a ete perdu et va
retransmettre ce paquet. La plupart des protocoles MAC utilisent un principe de Stop-and-Go : ils n'envoient le prochain paquet de la pile que si ils
ont recu le ACK du paquet en cours ( par opposition aux window variables en TCP ). Le protocole est simplifie, les delais de transmission reduits et
evite aussi la desequenciation (desequencing, terme technique difficilement transcriptible en francais) des paquets, chose que TCP n'apprecie pas non
plus.
Ces ACK font partie integrante du protocole MAC, ce qui est une garantie contre le phenomene de collision. Ils sont en ce sens bien differents des ACK
en TCP, qui travaillent a une couche differente et sur une trame temporelle differente, en fait. Il est evident que les paquets de broadcast et de
multicast ne sont pas concernes et sont donc de ce fait plus vulnerables par contre.
Petite parenthese a ce sujet, tous les protocoles wireless n'appliquent pas le meme principe. D'abord certains anciens materiels WiFi ne le font pas,
mais aussi les communications satellite a cause d'un RTT evidement trop long au dela duquel le systeme se doit de transmettre le paquet suivant.
Le caractere instable d'une liaison radio est un reel probleme comme on l'a vu auparavent et malgre l'ensemble des mesures prises pour garantir l'integrite des paquets recus, certaines situations de l'environement radioelectrique peuvent rapidement mener a une probabilite d'erreurs proche de 100%. De ce fait afin d'eviter le ralentissement du reseau a cause de la retransmission des plus gros paquets contenant trop d'erreurs, ceux ci sont fragmentes en paquets plus petits. Si les seuls fragments erronnes sont alors retransmis, ceci suppose la dupplication des entetes sur l'ensemble des fragments.
L'un des principaux problemes d'un reseau radio est l'attenuation du signal dans l'espace a cause des perturbations ou plus generalement des conditions
de deploiement du reseau. La consequence est qu'un recepteur peut a un moment donne ne plus recevoir les autres systemes du reseau, et devenir "cache"
aux yeux des autres. Continuant cependant a emettre parcequ'il ne percoit pas d'autres hote actifs en vertu du principe du Carrier Sense vu precedement,
ceci participe grandement a la congestion du reseau.
Evidement dans ce cas comme les systemes touches par l'attenuation ne subissent pas cette congestion (ne recevant pas non plus l'hote "cache"), il n'en
est pas de meme pour les hotes situes a mi chemin de la liasion radio qui, eux, ne sont pas touches par l'attenuation : ils recoivent suffisament les
hotes isoles et subissent de plein fouet la congestion. De la sorte, cette "attaque" involontaire d'un hote devenu sourd ejecterait certains autres
hotes actifs du reseau.
Afin d'eviter cette chute du reseau, c'est le principe de RTS/CTS qui est mis en oeuvre : l'emission de chaque paquet a destination d'un hote est
precedee d'une demande RTS (Ready To Send), et l'emetteur attend une reponse CTS (Clear To Send) de son correspondant, chacun declarant de ce fait si il
est toujours en mesure de participer au reseau ou non.
D'autre part, tous les autres participants entendent le CTS, meme si ils n'ont pas percu le RTS. Le RTS et le CTS contiennent la taille de la
transmission a venir. Ainsi, chacun connait la probabilite de collision au sein du reseau. Ce mecanisme est aussi appele Virtual Carrier Sense.
Le bit-rate, vitesse de transmission theorique sur le vecteur considere est comme on le sait bien different de la vitesse de transmission reelle
obtenue. Par exemple en Ethernet si on considere des vitesse telles que 10 Mb/s, 100 Mb/s ou 1Gb/s, on peut esperer 80 a 95% de cette vitesse comme
utile a la transmission des donnees.
En revanche comme on l'a vu, le cas des vecteurs radio est bien different puisque sujet a de nombreuses perturabations contre lesquelles luttent
differents mecanismes qui ont ete decrits jusqu'a present. L'ensemble de ces mecanismes prennent une part non negligeable dans la transmission avant
qu'un paquet ne soit effectivement transmis et recu. En pratique, on peut esperer entre 50% et 70% de la vitesse theorique annoncee utilisee reellement
pour le transport des donnees en WiFi.