Cyklická redundantní kontrola
(Cyclic Redundance Check - CRC)
Ke k-bitovému rámci generuje vysílač n-bitovou posloupnost (kontrolní
posloupnost rámce FCS) tak, aby celých k+n bitů (FCS se připojí za původní rámec
a přenáší se k+n bitová posloupnost) bylo beze zbytku dělitelných stanoveným číslem
(nenulový zbytek je indikace chyby).
Generování FCS jakožto i kontrola na přijímací straně se obvykle provádí hardwarově.
Následující výklad je spíše populární (má velmi zjednodušený matematický aparát),
pro úvod do problému ale snad postačuje.
M |
|
původní k-bitová zpráva |
P |
|
určený n+1 bitový dělitel |
R |
|
kontrolní posloupnost rámce (FCS) |
T |
|
skutečně vysílaná posloupnost (včetně
zabezpečení) |
M i P jsou posloupnosti bitů, na každý bit
se nahlíží jako na koeficient polynomu proměnné x.
Např.: pro zprávu M=11001001 bude
polynom
M(x) = x 7 + x 6 + x 3
+ x 0
a pro stanovený n+1 bitový dělitel P=1101 bude
polynom
Pracuje se s bity, proto koeficienty polynomu mohou nabývat jen hodnoty 0 nebo 1.
Používá se aritmetika modulo 2 (sčítání se provádí jako XOR, odečítání rovněž,
přenos ani výpůjčka neexistuje).
sčítání: | |
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0
| |
násobení: | |
0 . 0 = 0
0 . 1 = 0
1 . 0 = 0
1 . 1 = 1
|
Pro uvedenou zprávu vysílač vygeneruje R:
M se vynásobí 2 n (posune o n bitů doleva)
výsledek se vydělí P, podíl je Q (ten není pro náš účel zajímavý)
a zbytek R (ten je n-bitový, v tomto konkrétním
příkladě 3-bitový) se použije jako FCS.
Formálně:
a pro konkrétní příklad:
Vysílá se posloupnost T, kterou lze
formálně zapsat jako
konkrétně:
11001001 . 1000 + 010 = 11001001010
Na přijímací straně kontrolujeme, zda T je beze zbytku dělitelné P.
Nenulový zbytek po dělení přijatého bloku dat smluveným polynomem signalizuje chybu
při přenosu.
Pro Ethernet je podle IEEE 802 předepsáno používání polynomu:
tento polynom generuje FCS o délce 32 bitů. (Pro diskety se dle CCITT používá 10001000000100001,
pro magnetické pásky 10001000000000101.)
Lze dokázat, že pomocí CRC se detekují:
- všechny jednobitové chyby
- všechny dvoubitové chyby, pokud má P alespoň 3 členy
- všechny liché počty chyb, pokud P obsahuje člen x + 1
- všechny dávkové chyby kratší než délka FCS
- většina delších dávkových chyb (např. CRC CCITT detekuje 99,997% 17-tibitových chyb a
99,998%  18-tibitových chyb)
© Roupec
4.4.1998