CSMA/CA: proč se to nechová jako Ethernet
Drátový Ethernet umí kolizi detekovat: vysílá a zároveň poslouchá, a když uslyší něco jiného, než posílá, přestane. Rádio to neumí — vlastní vysílač je o osmdesát decibelů silnější než cokoli, co dorazí zvenčí, takže během vysílání není slyšet vůbec nic.
Wi-Fi proto kolizím předchází (collision avoidance) místo aby je detekovala, a dělá to takhle:
- DIFS = SIFS + 2 × slot = 34 µs
Stanice chce vysílat. Nejdřív musí slyšet kanál volný po celý DIFS — 34 mikrosekund. Teprve pak se smí hnout.
- backoff ∈ {0 … 15}
A ještě nesmí. Vylosuje si náhodné číslo z 0 až 15 — kdyby začaly všechny naráz, srazí se pokaždé.
- A: 3 → 2 → 1 → 0
Každou volnou devítimikrosekundovou prodlevu ubere jedna. Když někdo mezitím začne vysílat, odpočet se ZASTAVÍ a pokračuje potom.
- A → rámec
Kdo dojde na nulu první, vysílá. Ostatní ho slyší, zastaví si odpočet a počkají.
- SIFS = 16 µs < DIFS
Příjemce po SIFS potvrdí. SIFS je kratší než DIFS schválně — potvrzení tak nikdy nemusí soutěžit o médium.
- kolize → CW: 15 → 31 → 63 …
Když si dvě stanice vylosují totéž číslo, začnou naráz. Nikdo nic nedekóduje, potvrzení nepřijde, obě zdvojnásobí okno a losují znovu.
- Poslouchej. Kanál musí být volný po celý DIFS (34 µs na 5 GHz).
- Losuj. Náhodné číslo z 0 až 15 (soutěžní okno, CW).
- Odpočítávej. Každá volná prodleva (9 µs) ubere jedna. Když někdo začne vysílat, odpočet zamrzne a pokračuje po skončení — proto se stanice, která už dlouho čeká, dostane na řadu dřív.
- Vysílej. Kdo dojde na nulu první.
- Čekej na potvrzení. Přijde po SIFS, který je kratší než DIFS — potvrzení tedy médium nikdy nesoutěží.
- Když nepřijde, zdvojnásob okno (15 → 31 → 63 … 1023) a losuj znovu.
Tři důsledky, které tvarují všechno ostatní
Kanál je vždycky celý něčí. Nikdy nevysílají dva naráz úmyslně. Sdílí se čas, ne pásmo — a proto je měnou téhle labky mikrosekunda.
Kolize stojí celý rámec. Vysílač se o ní dozví až tím, že nedorazí potvrzení, tedy po uplynutí celého rámce plus SIFS plus ACK. Na Ethernetu stála kolize 51 µs; tady stojí třeba 400.
Zpoždění je náhodné z principu. Odpočet je losovaný, takže dvě po sobě jdoucí zprávy nemají stejné zpoždění ani na prázdné síti. To je jitter, který se nedá vyladit — dá se jen změřit a počítat s ním. Regulátor, který na to není připravený, to uvidí jako šum na měření (viz ServoLab).
Priority: EDCA
Novější Wi-Fi umí čtyři přístupové kategorie s různým DIFS a různým oknem. Hlas a video dostanou kratší čekání než data:
| kategorie | AIFS | CWmin | k čemu |
|---|---|---|---|
| hlas (VO) | 34 µs | 3 | nejkratší čekání |
| video (VI) | 34 µs | 7 | |
| best effort (BE) | 43 µs | 15 | výchozí |
| pozadí (BK) | 79 µs | 15 | zálohy, aktualizace |
Označit řídicí provoz jako hlasový je nejlevnější zlepšení latence, které v robotické Wi-Fi existuje — okno 3 místo 15 znamená průměrný odpočet 13 µs místo 67. Funguje to ovšem jen tehdy, když to dělají všichni na kanálu; jedna stanice, která značky ignoruje, výhodu smaže.
Proč je SIFS kratší než DIFS. Není to detail, je to celá konstrukce protokolu. Kdo už jednou médium získal, dokončí výměnu (data → potvrzení, RTS → CTS → data → ACK) s odstupy SIFS, a nikdo jiný se mezi to nevejde, protože všichni ostatní čekají DIFS. Kratší mezera znamená vyšší prioritu, a je to jediný prioritní mechanismus, který 802.11 mělo prvních deset let.