Pri prenose dát môže dochádzať
ku chybám, a v ich dôsledkov môže príjemca prijať iné znaky,
ako mu odosielateľ pôvodne vyslať. Jedným možným prostriedkom
pre následnú detekciu vzniknutých chýb je pridaný paritného
bitu ku každému prenášanému znaku - to je však len najjednodukší
a také najmenej účinný prípad použitia tzv. bezpečnostných kódu.
Základná myšlienka použitia
bezpečnostných kódov je veľmi jednoduchá - pôvodné znaky sa
podľa presne definovaných pravidiel transformujú na znaky iného
typu (napr. osembitové znaky sa pridaním jedného paritného bitu
prevedú na jedenasťbitové ty sa potom skutočne prenesú a príjemcovi
si je prevedú späť do ich pôvodného tvaru. Niektoré znaky omnoho
"iného typu" však nemôžu z pôvodných znaku riadnym
spôsobom nikdy vzniknúť (napr. pri používaní liché parity aby
nemali nikdy získať znak s druhou paritou). Pokiaľ sa príjemca
prijme takýto znak, ktorý pri daných pravidlách transformace
nemá žiadny "vzor", môže jej oprávnene považovať za
chybné prenesený znak.
Bezpečnostní kódy sú v zásade
dvojitého typu, a to:
detekční kódy - error-detection
codes,
ktoré umožňuje len rozpoznať
(detekovať), že prijatý znak je chybný, a
samoopravné kódy -
self-correcting codes,
ktoré okrem detekcie chyby
umožňuje i opravu chybne preneseného znaku, takže jej neni nutné
prenášať znovu (co u detekčného kódu obecne nutné je).
Použití bezpečnostných kódu
vždy znamená, že sa v rámci každého znaku v skutočnosti prenáša
viac bitov, než koľko by bolo k vyjadrení vlastného znaku nezbytne
nutné. Zabezpečení proti chybám neni naviac nikdy stopercentný,
jeho účinnosti však rastie s počtom bitov "naviac".
Nejjednodukší detekční kód pridáva k dátovým bitov jeden ďalší
bit a dokáže detekovať chybu v jednom bitu. Samoopravný kód,
ktorý umožňuje následnou opravu chyby v jedinom bitu (tzv. rozšírený
Hammingov kód), pridáva kú každému 8-bitovému bytu naviac päť
bitov (resp. 6 bitov ku každému 16-bitovému slovu).
V praxi je výhodnejší nezabezpečovať
proti chybám jednotlivé znaky, ale celé postupnosti znakov resp.
celé prenášané bloky dát. Dodatočné bity, používané k detekcii
chyb, s nepridávajú znovu ku každému znaku, ale jen jednou k
celému bloku dát (a prenesú sa spolu s ním). Ale ak je chyba
detekovaná, nejde ju v rámci bloku lokalizovať až na jednotlivé
znaky. Miesto toho musí byť celý blok prehlásený za chybný a
prenesený znovu. To však nemusí byť vôbec na závadu - stačí
si uvedomiť, že prenosy dát takmer vždy prebiehajú po celých
blokoch, a najmenší jednotkou dát, ale ak opakované vyslaní
si môže príjemca vyžiadať, je práve celý blok a niektoré jednotlivé
znaky.
Podelená parita - longitudinal
parity
je jedným možným spôsobom zabezpečení
celého bloku dát, chápaného ako postupnosť jednotlivých znakov.
Tu sa nekontroluje sudy resp. lichý počet jednotkových bitú
v jednotlivých znakoch, ale sudy resp. lichý počet jednotkové
bity v rovnakoležiacich bitových pozíciách všetkých znakov v
bloku (viď obr. 3.1). Ak je teda blok dát tvorený napr. osembitové
znaky, pridá sa k celému bloku osem paritných bitov (teda vlastne
jeden znak naviac), a každý z nich sa nastaví tak, aby bola
dodržaná suda resp. lichá
parita.
Použitie podelenej parity
sa nikdy kombinuje i s zabezpečením jednotlivých znakov pomocov
sude resp. liché parity, ktorá s len pre odlišní od podelenej
parity označuje ako priečna či znaková parita (transversal,
lateral parity).
Kontrolní súčet - checksum.
Ďalší možností zabezpečení
celého bloku dát je súčet jednotlivých znakov v bloku, ktoré
sú pre tento účel chápané ako celá dvojkové čísla bez znamienka.
Kontrolní súčet s typicky prevádzaný ako súčet modul 28 nebo
216, tj. výsledkom je kontrolní súčet o dĺžke jedného nebo dvoch
bytu.
Kontrolní súčet i podelenej
paritu ide vyhodnocovať priebežne pri prijímaní jednotlivých
znakov bloku. V prípade kontrolného súčtu s každý novo prijatý
znak pripočíta ku stávajúcemu medzisúčtu, zatím čo v prípade
podelenej parity s prevádza operace EX-OR (tj. nonekvivalence)
jednotlivých bitu nového znaku sa stavajúcim medzivýsledkom.
Najúčinnejší formu zabezpečení
bloku dát však predstavuje použití tzv.
cyklických kódu - CRC (Cyclic
Redundancy Check).
Tak tu s podobne ako u výpočtu
podelenej parity či kontrolného súčtu priebežne na základe jednotlivých
znaku bloku (presnejšie jednotlivých bitov týchto znalo) priebežne
vypočítava zabezpečovací údaj. Ten s na konci celého bloku porovná
s zabezpečovacím údajom, ktorý podľa rovnakých pravidiel vypočítal
odosielateľ a pripojil k odosielanému bloku dát. Pokuť sa oba
údaje zhodujú, ide prenesený blok s vysokou pravdepodobností
považovať za správny - zabezpečení pomoci šestnácťbitového cyklického
kódu totiž dokáže spoľahlivo odhaliť všetky chyby až v šestnásti
po sebe idúcich bitoch, a chyby vo väčším počtu bitú s presností
99,9984 %.
Formálni dôkaz vynikajúcich
účinnosti zabezpečení pomoci cyklického kódu síce vyžaduje dosť
pokročilý matematický aparát, vlastní spôsob výpočtu zabezpečovacieho
údaju je však až neuveriteľne jednoduchý (bohužiaľ však tu skôr
nemáme potrebný priestor k tomu, aby túto jednoduchosť mohli
patrične "vychutnať"). Stačí k nemu jednoduchý posuvný
register, umožňujúci previesť operaci EX-OR (tj. nonekvivalenci
jednotlivých bitú) s pevne danou maskou. Hodnota tejto masky
je jednoznačne určená tzv. generujúcim polynomem (generating
polynomial), na ktorom musí byť príjemca i odosielateľ predom
dohodnutí. Použiteľných tvarov týchto polynomov je viacej; v
oblasti komunikácii s najčastejšie
používa polynom x16 + x12 + x5 + 1, doporučený organizácií CCITT.