LinkLab linka je dohoda, ne drát

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Parita: chytí jednu chybu a o dvou mlčí

Jeden bit navíc, nastavený tak, aby byl celkový počet jedniček sudý (nebo lichý — na tom se obě strany musí dohodnout). Je to nejlevnější kontrola, jaká existuje: hardware to umí jedním hradlem XOR.

p = a₀ ⊕ a₁ ⊕ … ⊕ a₇sudá parita

Co to umí a co ne

Když se převrátí jeden bit, počet jedniček změní paritu a příjemce to pozná. Když se převrátí dva, parita se změní dvakrát, tedy vůbec — a chyba projde beze stopy. Obecně: parita chytí každý lichý počet chyb a nechytí žádný sudý.

zpráva, červeně převrácené bityparitaPROJDEsoučet bajtůchytíXORchytíCRC-8chytíCRC-16chytíCRC-32chytíParita nechytí sudý počet chyb — nikdy.CRC-n chytí každý shluk do n bitů — vždycky.Shluk delší než n projde s pravděpodobností 2⁻ⁿ.
Vyber druh chyby a sleduj, kdo ji pozná. Přepni na „2 bity“ — parita mlčí, a není to smůla, je to systematické.

To by ještě šlo, kdyby chyby přicházely po jedné. Jenže nepřicházejí. Skutečné rušení na lince — spínací hrana měniče, výboj, přeslech ze sousedního vodiče — trvá nějakou dobu, a za tu dobu poškodí několik bitů za sebou. Takovému shluku je jedno, jestli poškodí sudý nebo lichý počet, takže parita ho v polovině případů nechá projít. A poloviční šance není kontrola.

Sčítání bajtů a XOR nejsou o moc lepší

Prostý součet bajtů (checksum) chytí jednu změněnou hodnotu, ale nechytí prohození dvou bajtů — součet je stejný. XOR všech bajtů je na tom stejně, a navíc nechytí ani dvě stejné chyby ve dvou bajtech na téže pozici.

kontrola1 bit2 bityshlukprohození
paritaanone50 %ne
součetanočastočastone
CRC-16anoanodo 16 bitů vždyano

Ta pravá část tabulky je důvod, proč existuje další kapitola.

Vzorce v této kapitole

p — parita
p = ⊕ aᵢ [—] kap. 5