1/47 Kontrola błędów w transmisji danych

Telekomunikacja – sieci WAN

Prezentacja poświęcona metodom wykrywania i korekcji błędów w transmisji danych w sieciach rozległych. Omówione zostaną mechanizmy kontroli integralności danych, od prostego bitu parzystości przez zaawansowane sumy kontrolne CRC, funkcje skrótu, aż po kody korekcyjne FEC i protokoły retransmisji ARQ.

Kontrola błędów – zespół mechanizmów umożliwiających wykrycie i/lub naprawienie uszkodzeń danych powstałych podczas transmisji w kanale komunikacyjnym.
Ilustracja: Grafika tytułowa – kontrola błędów w transmisji danych (ikony: bit parzystości, CRC, FEC, ARQ)

W praktyce inżynierskiej rozróżnia się dwa główne typy błędów transmisji: błędy pojedyncze, w których tylko jeden bit ulega zmianie, oraz błędy seryjne, zwane także pakietowymi, gdzie uszkodzeniu ulega ciąg kolejnych bitów. Błędy pakietowe są znacznie trudniejsze do wykrycia i korekcji, ponieważ mogą obejmować od kilku do nawet kilkuset następujących po sobie bitów. Najprostszą metodą wykrywania błędów jest bit parzystości, który polega na dodaniu jednego dodatkowego bitu w celu zapewnienia określonej parzystości liczby jedynek w przesyłanej jednostce danych.

Zaawansowanym mechanizmem detekcji jest CRC, który opiera się na dzieleniu wielomianowym w ciele Galois GF(2) i zapewnia znacznie wyższą skuteczność niż bit parzystości. W systemach wymagających korekcji błędów bez konieczności retransmisji stosuje się FEC, gdzie nadmiarowe bity umożliwiają odtworzenie oryginalnych danych po stronie odbiorcy. Z kolei protokoły ARQ polegają na retransmisji uszkodzonych pakietów i występują w trzech wariantach: Stop-and-Wait, Go-Back-N oraz Selective Repeat. Kluczowym pojęciem w protokołach ARQ jest okno transmisyjne, które określa liczbę pakietów wysyłanych bez oczekiwania na potwierdzenie.

2/47 Streszczenie

Kontrola błędów w transmisji danych – streszczenie

Błędy transmisji są nieuniknione ze względu na zakłócenia, szumy i interferencje występujące w kanałach komunikacyjnych. Do ich wykrywania stosuje się bity parzystości, sumy kontrolne CRC oraz funkcje skrótu.

W systemach wymagających korekcji błędów w czasie rzeczywistym stosuje się FEC (Forward Error Correction), który umożliwia odtworzenie uszkodzonych danych bez retransmisji. Wybór metody zależy od rodzaju błędów, przepustowości i wymagań aplikacji.

  • Wykrywanie błędów – bit parzystości, CRC, funkcje skrótu
  • Korekcja błędów – kody Hamminga, Reeda-Solomona, LDPC
  • Retransmisja – ARQ (Stop-and-Wait, Go-Back-N, Selective Repeat)
  • Zastosowania – Ethernet, Wi-Fi, 5G, pamięci masowe, łączność satelitarna
Ilustracja: Mapa pojęć – podział metod kontroli błędów

Błędy transmisji dzieli się na dwie główne kategorie ze względu na ich charakter i liczbę uszkodzonych bitów. Błędy pojedyncze polegają na zmianie wartości jednego bitu w strumieniu danych i są typowe dla kanałów z szumem termicznym. Błędy pakietowe (burst errors, zwane też seryjnymi) to uszkodzenia wielu kolejnych bitów, które powstają na skutek dłużej trwających zakłóceń, takich jak wyładowania atmosferyczne czy impulsy elektromagnetyczne.

Błędy pakietowe stanowią najpoważniejsze wyzwanie dla systemów telekomunikacyjnych, ponieważ mogą uszkodzić całe ramki danych. Do ich wykrywania stosuje się zaawansowane sumy kontrolne, takie jak CRC, które potrafią niezawodnie wykryć błędy pakietowe o długości do 32 bitów. W systemach krytycznych stosuje się dodatkowo kody korekcyjne FEC, które umożliwiają odtworzenie uszkodzonych danych bez konieczności retransmisji, co jest szczególnie istotne w łączach o dużym opóźnieniu.

3/47 Źródła błędów w transmisji

Skąd biorą się błędy transmisji?

Szum termiczny – wynik chaotycznego ruchu nośników ładunku w przewodnikach. Występuje zawsze, niezależnie od woli. Jego moc rośnie z temperaturą i szerokością pasma.

W rzeczywistych kanałach komunikacyjnych sygnał ulega zniekształceniom na skutek wielu niezależnych zjawisk fizycznych. Nawet w idealnie zaprojektowanym systemie transmisyjnym występują zakłócenia uniemożliwiające całkowicie bezbłędną komunikację.

  • Zakłócenia elektromagnetyczne (EMI) – generowane przez silniki, zasilacze impulsowe, nadajniki radiowe
  • Interferencje (ISI) – nakładanie się kolejnych symboli w wyniku ograniczonego pasma
  • Przesłuchy – indukowanie sygnału z sąsiednich przewodów
Ilustracja: Źródła zakłóceń – szum termiczny, EMI, ISI, przesłuchy

Błędy transmisji mogą prowadzić do poważnych konsekwencji w zależności od rodzaju przesyłanych danych i wymagań aplikacji. W systemach czasu rzeczywistego, takich jak transmisja głosu czy wideo, błędy objawiają się jako zniekształcenia, trzaski lub rozmazany obraz. W transmisji danych binarnych błąd może spowodować uszkodzenie plików, błędne wyniki obliczeń lub nieprawidłowe działanie sterowników przemysłowych.

W sieciach komputerowych błędy transmisji prowadzą do konieczności retransmisji uszkodzonych pakietów, co zwiększa opóźnienia i obciążenie sieci. W protokołach takich jak TCP retransmisje są realizowane automatycznie przez mechanizmy ARQ, jednak nadmierna liczba błędów może drastycznie obniżyć efektywną przepustowość łącza. Dlatego też projektanci systemów telekomunikacyjnych dążą do utrzymania współczynnika BER na jak najniższym poziomie, stosując odpowiednie techniki kodowania kanałowego i modulacji.

4/47 Skutki błędów transmisji

Konsekwencje błędów w transmisji danych

Błędy transmisji mogą mieć różnorodne konsekwencje – od niedogodności dla użytkownika po poważne awarie systemów krytycznych:

  • Uszkodzenie danych – nieprawidłowa interpretacja informacji, uszkodzenie plików, błędne wyniki obliczeń
  • Retransmisje – konieczność ponownego wysyłania uszkodzonych pakietów, co zwiększa opóźnienia i obciążenie sieci
  • Obniżenie przepustowości – retransmisje i narzuty protokołów kontroli błędów zmniejszają efektywną prędkość transmisji
BER (Bit Error Rate) – miara jakości łącza, określa stosunek błędnie odebranych bitów do wszystkich przesłanych. Typowe BER: Ethernet < 10-12, łącze Wi-Fi ~10-3 do 10-6.
Ilustracja: Wykres – wpływ BER na liczbę retransmisji i opóźnienia

Zapewnienie integralności danych w systemach telekomunikacyjnych realizowane jest poprzez dodawanie nadmiarowych informacji, które pozwalają na wykrycie ewentualnych uszkodzeń powstałych podczas transmisji. Najprostszym mechanizmem jest bit parzystości, który jednak ma ograniczoną skuteczność i nie radzi sobie z błędami parzystej liczby bitów. Znacznie skuteczniejsze są sumy kontrolne CRC, które potrafią wykryć praktycznie wszystkie błędy transmisji przy minimalnym narzucie danych.

W systemach wymagających najwyższego poziomu bezpieczeństwa stosuje się kryptograficzne funkcje skrótu, takie jak SHA-256, które są odporne na celowe modyfikacje danych. W systemach pamięci masowych i transmisji danych stosuje się także kody korekcyjne FEC, które nie tylko wykrywają, ale również naprawiają uszkodzone dane. Decyzja o wyborze konkretnej metody zależy od wielu czynników, w tym od dopuszczalnego narzutu transmisyjnego, mocy obliczeniowej dostępnej po stronie odbiorcy oraz wymaganego poziomu niezawodności.

5/47 Integralność danych w systemach telekomunikacyjnych

Konieczność zapewnienia integralności

We współczesnych systemach telekomunikacyjnych zapewnienie integralności danych jest absolutnie kluczowe ze względu na:

  • Wrażliwość danych – transmisja danych medycznych, finansowych, wojskowych wymaga gwarancji poprawności
  • Automatyzację – systemy autonomiczne podejmują decyzje na podstawie przesyłanych danych; błąd może prowadzić do katastrofy
  • Skalę – przy prędkościach rzędu Gb/s nawet niewielkie BER generuje tysiące błędów na sekundę
Integralność danych – właściwość zapewniająca, że dane nie zostały zmodyfikowane w nieautoryzowany sposób podczas transmisji, przechowywania lub przetwarzania.
Ilustracja: Łańcuch zaufania – nadawca → kanał → odbiorca z mechanizmami kontroli błędów

Wybór między wykrywaniem a korekcją błędów zależy przede wszystkim od charakterystyki kanału komunikacyjnego i wymagań aplikacji. Wykrywanie błędów z retransmisją (ARQ) sprawdza się dobrze w łączach o niskim BER i małym opóźnieniu, gdzie koszt retransmisji jest akceptowalny. W przypadku łączy satelitarnych o opóźnieniu rzędu 250–600 ms ARQ jest niepraktyczne, ponieważ każda retransmisja powodowałaby ogromne opóźnienie w dostarczeniu danych.

Z tego względu w łączach satelitarnych i kosmicznych stosuje się przede wszystkim FEC, które umożliwia natychmiastową korekcję błędów po stronie odbiorcy. Nowoczesne systemy telekomunikacyjne często łączą oba podejścia, stosując FEC do korekcji błędów pojedynczych i krótkich błędów pakietowych, a ARQ do obsługi poważniejszych uszkodzeń. Taka hybrydowa strategia pozwala zoptymalizować kompromis między niezawodnością transmisji a wykorzystaniem dostępnego pasma.

6/47 Wykrywanie vs korekcja błędów

Dwa podejścia do kontroli błędów

Error Detection (wykrywanie błędów) – odbiorca stwierdza, że dane są uszkodzone i żąda retransmisji. Wymaga kanału zwrotnego. Przykłady: bit parzystości, CRC, funkcje skrótu.
Error Correction (korekcja błędów) – odbiorca samodzielnie naprawia uszkodzone dane bez retransmisji. Wykorzystuje nadmiarowość. Przykłady: kody Hamminga, Reed-Solomon, LDPC.

Wybór metody zależy od charakterystyki łącza i wymagań aplikacji. Łącza satelitarne z dużym opóźnieniem preferują FEC, podczas gdy sieci lokalne korzystają z wykrywania błędów i szybkiej retransmisji.

Ilustracja: Porównanie – wykrywanie błędów (z retransmisją) vs korekcja błędów (bez retransmisji)

Wybór między wykrywaniem a korekcją błędów ma fundamentalne znaczenie dla projektowania systemów telekomunikacyjnych i wpływa na wszystkie aspekty transmisji danych. Metody wykrywania błędów, takie jak bit parzystości i CRC, są prostsze w implementacji i wprowadzają mniejszy narzut, ale wymagają kanału zwrotnego i retransmisji uszkodzonych danych. Z kolei metody korekcji błędów, takie jak kody Hamminga czy LDPC, umożliwiają samodzielne naprawienie uszkodzeń bez konieczności ponownego przesyłania danych, co jest kluczowe w systemach jednokierunkowych.

W praktyce wiele systemów stosuje podejście hybrydowe, łącząc FEC z ARQ w celu optymalizacji wydajności. Na przykład w sieciach Wi-Fi warstwa fizyczna stosuje FEC do korekcji typowych błędów, a warstwa MAC wykorzystuje ARQ do retransmisji ramek, których nie udało się odzyskać za pomocą FEC. Taka hybrydowa strategia pozwala na efektywne wykorzystanie pasma przy jednoczesnym zapewnieniu wysokiej niezawodności transmisji, dostosowując się dynamicznie do zmieniających się warunków kanałowych.

7/47 Błędy pojedyncze (single-bit errors)

Zmiana wartości jednego bitu

Błąd pojedynczy (single-bit error) – sytuacja, w której tylko jeden bit w strumieniu danych ulega zmianie (z 0 na 1 lub z 1 na 0), podczas gdy pozostałe bity pozostają niezmienione.

Błędy pojedyncze są typowe dla kanałów z szumem termicznym (AWGN – Additive White Gaussian Noise), gdzie zakłócenie ma charakter przypadkowy i krótkotrwały. Prawdopodobieństwo wystąpienia błędu pojedynczego jest zazwyczaj niewielkie w dobrze zaprojektowanych łączach.

Przykład: przesłanie bajtu 01101001, odebranie 01101101 (błąd na pozycji 3). Tylko jeden bit uległ zmianie.

Ilustracja: Przebieg czasowy – błąd pojedynczy w strumieniu danych

Błędy pojedyncze są stosunkowo łatwe do wykrycia za pomocą bitu parzystości, ponieważ zmieniają one liczbę jedynek w przesyłanej jednostce danych z parzystej na nieparzystą lub odwrotnie. W praktyce jednak błędy pojedyncze stanowią mniejszość w rzeczywistych kanałach telekomunikacyjnych, gdzie dominują błędy pakietowe. Mimo to znajomość mechanizmu błędów pojedynczych jest istotna, ponieważ stanowi podstawę do zrozumienia bardziej zaawansowanych kodów korekcyjnych.

Kody Hamminga, będące najprostszymi kodami korekcyjnymi FEC, zostały zaprojektowane właśnie do korekcji pojedynczych błędów. Kod Hamminga (7,4) dodaje trzy bity parzystości do czterech bitów danych, co pozwala nie tylko wykryć, ale także wskazać pozycję uszkodzonego bitu i go naprawić. Kody Hamminga są powszechnie stosowane w pamięciach ECC w serwerach i systemach krytycznych, gdzie pojedyncze błędy bitów są najczęstszym typem uszkodzeń spowodowanych promieniowaniem kosmicznym.

8/47 Błędy pakietowe (burst errors)

Ciąg uszkodzonych bitów

Błąd pakietowy (burst error) – ciąg kilku lub kilkunastu kolejnych bitów, które uległy uszkodzeniu. Długość błędu pakietowego mierzy się od pierwszego do ostatniego uszkodzonego bitu włącznie.

Błędy pakietowe są znacznie częstsze w rzeczywistych kanałach niż błędy pojedyncze. Powstają na skutek dłużej trwających zakłóceń, które obejmują wiele kolejnych bitów transmisji.

  • Przyczyny: wyładowania atmosferyczne, zakłócenia impulsowe, zaniki sygnału (fading)
  • Wpływ: bardziej destrukcyjne niż błędy pojedyncze – mogą uszkodzić całe pakiety
Ilustracja: Przebieg czasowy – błąd pakietowy obejmujący 5 kolejnych bitów

Błędy pakietowe stanowią szczególne wyzwanie dla systemów telekomunikacyjnych, ponieważ ich długość może być zmienna i trudna do przewidzenia. W przeciwieństwie do błędów pojedynczych, błędy pakietowe mogą uszkodzić wiele następujących po sobie bitów, co sprawia, że proste metody detekcji, takie jak bit parzystości, są nieskuteczne w około połowie przypadków. Do wykrywania błędów pakietowych stosuje się zaawansowane sumy kontrolne CRC, które są w stanie wykryć błędy o długości do 32 bitów ze stuprocentową skutecznością.

W systemach wymagających korekcji błędów pakietowych stosuje się kody Reeda-Solomona, które operują na całych symbolach (bajtach), a nie na pojedynczych bitach. Kody te są powszechnie wykorzystywane w płytach CD i DVD, gdzie uszkodzenia mechaniczne powodują długie błędy pakietowe. W nowoczesnych systemach łączności, takich jak 5G czy Wi-Fi 6, stosuje się zaawansowane kody LDPC, które zapewniają wydajność bliską teoretycznej granicy Shannona i doskonale radzą sobie z błędami pakietowymi przy minimalnym narzucie.

9/47 Przyczyny błędów pakietowych

Co powoduje błędy pakietowe?

Błędy pakietowe mają zazwyczaj zewnętrzne źródła, które generują silne, skorelowane w czasie zakłócenia:

  • Wyładowania atmosferyczne – silne impulsy elektromagnetyczne indukujące napięcia w liniach transmisyjnych. Szczególnie groźne w łączach napowietrznych i radiowych
  • Zakłócenia impulsowe – generowane przez urządzenia elektryczne (silniki komutatorowe, przekaźniki, iskrzenie styków)
  • Zaniki sygnału (fading) – w łączach radiowych spowodowane wielodrogowością, przeszkodami terenowymi, zmianami warunków atmosferycznych
Ważne: Większość metod kontroli błędów projektuje się z myślą o błędach pakietowych, ponieważ stanowią one dominujący typ zakłóceń w praktyce.
Ilustracja: Źródła błędów pakietowych – wyładowanie atmosferyczne, zakłócenia impulsowe, fading

Przyczyny błędów pakietowych są zróżnicowane i zależą od rodzaju medium transmisyjnego oraz warunków środowiskowych. W łączach przewodowych głównym źródłem błędów pakietowych są wyładowania atmosferyczne oraz zakłócenia elektromagnetyczne generowane przez urządzenia przemysłowe, takie jak silniki elektryczne czy przekaźniki. W łączach światłowodowych błędy pakietowe występują rzadziej, ale mogą być spowodowane wadami spawów, mikrozgięciami lub starzeniem się komponentów optycznych.

W łączach radiowych i satelitarnych błędy pakietowe są wywoływane przez zaniki sygnału spowodowane wielodrogowością, opadami atmosferycznymi oraz interferencjami z innymi nadajnikami. W sieciach komórkowych błędy pakietowe powstają na skutek szybkiego przemieszczania się użytkownika między komórkami (handover) oraz zmian warunków propagacyjnych. Zrozumienie źródeł błędów pakietowych jest kluczowe dla prawidłowego doboru metod kontroli błędów i parametrów systemu transmisyjnego.

10/47 Porównanie wpływu błędów

Błędy pojedyncze vs pakietowe – wpływ na strumień

CechaBłąd pojedynczyBłąd pakietowy
Liczba uszkodzonych bitów12 do kilkuset
Prawdopodobieństwo w łączu miedzianymniskiewysokie
Wykrywalność przez bit parzystościtakczęściowa (~50%)
Wykrywalność przez CRC-32100%100% (do 32 bitów)
Wpływ na pakietyuszkodzenie 1 bitumoże uszkodzić cały pakiet

W praktyce inżynierskiej projektuje się systemy odporne przede wszystkim na błędy pakietowe, które są głównym wyzwaniem w rzeczywistych kanałach telekomunikacyjnych.

Ilustracja: Wykres porównawczy – wpływ błędów pojedynczych i pakietowych na strumień danych

Porównanie błędów pojedynczych i pakietowych ma istotne znaczenie praktyczne przy projektowaniu systemów kontroli błędów. Błędy pojedyncze są łatwe do wykrycia i skorygowania przy użyciu prostych kodów, takich jak bit parzystości czy kody Hamminga. Błędy pakietowe wymagają znacznie bardziej zaawansowanych mechanizmów, ponieważ uszkodzeniu ulega wiele bitów jednocześnie, a ich liczba i rozmieszczenie mogą być trudne do przewidzenia.

W praktyce większość systemów telekomunikacyjnych projektuje się z myślą o błędach pakietowych jako dominującym typie zakłóceń. CRC-32, stosowany w Ethernet, wykrywa wszystkie błędy pakietowe do 32 bitów i zapewnia skuteczność powyżej 99,99999998% dla dłuższych błędów. Kody Reeda-Solomona i LDPC dodatkowo umożliwiają korekcję błędów pakietowych bez retransmisji, co jest niezbędne w systemach takich jak telewizja satelitarna czy komunikacja kosmiczna.

11/47 Bit parzystości – zasada działania

Najprostsza metoda wykrywania błędów

Bit parzystości (parity bit) – dodatkowy bit dołączany do przesyłanej jednostki danych, którego wartość jest tak dobrana, aby całkowita liczba jedynek (dane + bit parzystości) spełniała zadany warunek parzystości.

Nadawca oblicza bit parzystości na podstawie przesyłanych danych i dołącza go do ramki. Odbiorca, po odebraniu danych wraz z bitem parzystości, wykonuje to samo sprawdzenie. Jeśli warunek parzystości nie jest spełniony – oznacza to błąd transmisji.

Bit parzystości jest dodawany zarówno w transmisji szeregowej (UART, RS-232), jak i w pamięciach RAM (jako najprostsza forma ECC).

Ilustracja: Schemat – dodawanie bitu parzystości do ramki danych

Bit parzystości jest najprostszą i najbardziej podstawową metodą wykrywania błędów transmisji, stosowaną od początków telekomunikacji cyfrowej. Jego istota polega na dodaniu jednego dodatkowego bitu do przesyłanej jednostki danych, którego wartość jest dobierana w taki sposób, aby całkowita liczba jedynek w jednostce łącznie z bitem parzystości spełniała zadany warunek. Obliczenie bitu parzystości sprowadza się do operacji XOR na wszystkich bitach danych, co może być zrealizowane w sprzęcie za pomocą zaledwie kilku bramek logicznych.

Mimo swojej prostoty bit parzystości ma istotne ograniczenie: wykrywa tylko nieparzystą liczbę błędów w przesyłanej jednostce danych. Jeśli w wyniku zakłóceń transmisji uszkodzeniu ulegnie parzysta liczba bitów, warunek parzystości pozostanie spełniony i błąd nie zostanie wykryty. Z tego powodu bit parzystości stosuje się głównie w systemach, gdzie prawdopodobieństwo wystąpienia błędów parzystej liczby bitów jest niskie, takich jak pamięci RAM czy łącza szeregowe UART.

12/47 Parzystość parzysta (even parity)

Even parity – liczba jedynek parzysta

Parzystość parzysta (even parity) – bit parzystości jest ustawiany tak, aby całkowita liczba jedynek w danych wraz z bitem parzystości była parzysta.

Algorytm: nadawca zlicza liczbę jedynek w danych. Jeśli jest parzysta – bit parzystości = 0. Jeśli nieparzysta – bit parzystości = 1.

Przykład: dane = 1101001 (4 jedynki – parzysta) → bit parzystości = 0, przesłane: 11010010. Dane = 1101011 (5 jedynek – nieparzysta) → bit parzystości = 1, przesłane: 11010111.

Odbiorca sprawdza: jeśli po odebraniu całej jednostki liczba jedynek jest parzysta – zakłada poprawność transmisji.

Ilustracja: Obliczanie even parity – przykłady dla różnych danych

Parzystość parzysta jest jednym z dwóch wariantów kontroli parzystości, w którym bit parzystości jest ustawiany tak, aby całkowita liczba jedynek w danych wraz z bitem parzystości była parzysta. Jeśli dane zawierają parzystą liczbę jedynek, bit parzystości przyjmuje wartość 0; jeśli liczba jedynek jest nieparzysta, bit parzystości ustawiany jest na 1. Odbiorca po odebraniu danych sprawdza, czy liczba wszystkich jedynek jest parzysta, co oznacza poprawność transmisji.

Parzystość parzysta jest powszechnie stosowana w transmisji szeregowej asynchronicznej, na przykład w standardzie RS-232, gdzie każdy przesyłany bajt danych jest uzupełniany bitem parzystości. W systemach pamięci masowych nawet parity bywa wykorzystywane w prostych implementacjach RAID, gdzie bity parzystości są przechowywane na dedykowanym dysku. Wadą parzystości parzystej jest to, że stan spoczynku linii transmisyjnej składający się z samych zer może być błędnie zinterpretowany jako poprawna ramka danych.

13/47 Parzystość nieparzysta (odd parity)

Odd parity – liczba jedynek nieparzysta

Parzystość nieparzysta (odd parity) – bit parzystości jest ustawiany tak, aby całkowita liczba jedynek w danych wraz z bitem parzystości była nieparzysta.

Algorytm: nadawca zlicza jedynki w danych. Jeśli liczba jest nieparzysta – bit parzystości = 0. Jeśli parzysta – bit parzystości = 1.

Przykład: dane = 1101001 (4 jedynki – parzysta) → bit parzystości = 1, przesłane: 11010011 (teraz 5 jedynek).

Zaletą odd parity jest to, że linia w stanie spoczynku (same jedynki) nie jest interpretowana jako poprawna ramka z zerową liczbą danych – w odróżnieniu od even parity, gdzie stan spoczynku mógłby być odebrany jako poprawne dane.

Ilustracja: Porównanie even parity vs odd parity na przykładzie

Parzystość nieparzysta (odd parity) działa na odwrotnej zasadzie niż parzystość parzysta: bit parzystości jest ustawiany tak, aby całkowita liczba jedynek w przesyłanej jednostce łącznie z bitem parzystości była nieparzysta. Główną zaletą parzystości nieparzystej jest to, że stan spoczynku linii transmisyjnej (sygnał składający się z samych zer lub samych jedynek) nie może być odebrany jako poprawna ramka danych, ponieważ liczba jedynek w stanie spoczynku jest zawsze parzysta.

Wybór między parzystością parzystą a nieparzystą zależy od konkretnego zastosowania i przyjętych konwencji w danej technologii. W transmisji szeregowej UART użytkownik może skonfigurować zarówno even parity, odd parity, jak i brak bitu parzystości. W systemach, gdzie priorytetem jest wykrycie błędów związanych z utratą synchronizacji lub przerwaniem transmisji, częściej stosuje się odd parity ze względu na jej zdolność do wykrywania stanów bezczynności linii.

14/47 Bit parzystości – zalety

Dlaczego warto stosować bit parzystości?

Mimo swojej prostoty bit parzystości znajduje zastosowanie w wielu systemach ze względu na następujące zalety:

  • Prostota implementacji – obliczenie bitu parzystości wymaga jedynie sumowania modulo 2 (XOR) wszystkich bitów danych. Może być zrealizowane w kilku bramkach logicznych
  • Mały narzut – tylko 1 dodatkowy bit na N bitów danych. Dla 8-bitowego bajtu narzut wynosi 12,5% (1/8), dla dłuższych bloków narzut jest jeszcze mniejszy
  • Szybkość – obliczenie bitu parzystości jest natychmiastowe, nie wprowadza opóźnień
  • Uniwersalność – może być stosowany w dowolnym systemie cyfrowym, od prostych układów po zaawansowane procesory
Ilustracja: Implementacja bitu parzystości – układ z bramkami XOR

Główną zaletą bitu parzystości jest jego niezwykle prosta implementacja zarówno w sprzęcie, jak i w oprogramowaniu. Obliczenie bitu parzystości wymaga jedynie wykonania operacji XOR na wszystkich bitach danych, co może być zrealizowane w czasie rzeczywistym bez zauważalnego opóźnienia. Narzut transmisyjny jest minimalny, ponieważ dodawany jest tylko jeden dodatkowy bit na każde N bitów danych, co dla 8-bitowych znaków stanowi zaledwie 12,5% narzutu.

Bit parzystości jest również uniwersalny i może być stosowany w dowolnym systemie cyfrowym, od prostych mikrokontrolerów po zaawansowane procesory wielordzeniowe. Nie wymaga skomplikowanych obliczeń matematycznych ani dużych zasobów pamięciowych, co czyni go idealnym rozwiązaniem dla systemów wbudowanych o ograniczonych zasobach. Dodatkowo, implementacja sprzętowa bitu parzystości w postaci bramek XOR jest niezwykle tania i energooszczędna, co ma znaczenie w systemach bateryjnych.

15/47 Bit parzystości – wady

Ograniczenia bitu parzystości

Główna wada: bit parzystości wykrywa tylko nieparzystą liczbę błędów. Jeśli w transmisji uszkodzeniu ulegnie parzysta liczba bitów (2, 4, 6...), bit parzystości nie zmieni swojej wartości i błąd pozostanie niewykryty.

Konsekwencje tego ograniczenia:

  • Brak korekcji błędów – bit parzystości informuje wyłącznie o wystąpieniu błędu (przy nieparzystej ich liczbie), ale nie pozwala określić, który bit został uszkodzony
  • Skuteczność ~50% przy burst errors – dla błędów pakietowych o parzystej długości bit parzystości jest nieskuteczny
  • Nie wykrywa błędów w parzystej liczbie bitów – np. uszkodzenie 2 bitów w tym samym bajcie pozostanie niewykryte
Ilustracja: Przykład – błąd 2 bitów niewykryty przez bit parzystości

Podstawową wadą bitu parzystości jest jego niska skuteczność w wykrywaniu błędów pakietowych oraz całkowita nieskuteczność w przypadku parzystej liczby błędów. W praktyce oznacza to, że bit parzystości nie wykryje około 50% błędów występujących w rzeczywistych kanałach telekomunikacyjnych, ponieważ połowa błędów pakietowych ma parzystą długość. Ponadto bit parzystości jedynie informuje o wystąpieniu błędu, ale nie pozwala na jego lokalizację ani korekcję.

Kolejną wadą jest brak odporności na celowe modyfikacje danych, ponieważ bit parzystości nie zapewnia żadnej ochrony kryptograficznej. Osoba atakująca może łatwo zmodyfikować przesyłane dane i odpowiednio dostosować bit parzystości, aby błąd pozostał niewykryty. Z tych powodów bit parzystości jest stopniowo wypierany przez bardziej zaawansowane metody, takie jak CRC w transmisji sieciowej czy kody ECC w pamięciach, choć nadal znajduje zastosowanie w prostych i mało wymagających systemach.

16/47 CRC – definicja i zasada działania

Cyclic Redundancy Check

CRC (Cyclic Redundancy Check) – suma kontrolna obliczana jako reszta z dzielenia wielomianowego w ciele Galois GF(2). Dane są traktowane jako wielomian, a dzielnikiem jest ustalony wielomian generatora.

Algorytm CRC:

  • Nadawca dzieli dane (z dopisanymi zerami) przez wielomian generatora
  • Reszta z dzielenia (o długości równej stopniowi wielomianu) jest dołączana do danych jako CRC
  • Odbiorca wykonuje to samo dzielenie – jeśli reszta = 0, dane są poprawne

CRC jest obliczane wyłącznie w ciele GF(2), gdzie dodawanie to XOR, a nie ma przeniesień.

Ilustracja: Schemat dzielenia wielomianowego w GF(2) – krok po kroku

CRC (Cyclic Redundancy Check) jest jedną z najpopularniejszych metod wykrywania błędów w transmisji danych, stosowaną w praktycznie wszystkich nowoczesnych protokołach sieciowych. Zasada działania CRC opiera się na arytmetyce wielomianowej w ciele Galois GF(2), gdzie dane są traktowane jako wielomian, a suma kontrolna stanowi resztę z dzielenia tego wielomianu przez ustalony wielomian generatora. Operacje dodawania i odejmowania w GF(2) sprowadzają się do prostego XOR-u, co umożliwia bardzo efektywną implementację sprzętową.

Długość sumy CRC zależy od stopnia wielomianu generatora i może wynosić od 8 do 64 bitów, przy czym dłuższe sumy zapewniają wyższą skuteczność wykrywania błędów kosztem większego narzutu. CRC jest w stanie wykryć wszystkie błędy o długości nieprzekraczającej stopnia wielomianu generatora, wszystkie błędy nieparzystej liczby bitów (o ile wielomian generatora zawiera czynnik x+1) oraz błędy pakietowe mieszczące się w długości sumy. Ze względu na doskonały stosunek skuteczności do narzutu, CRC jest standardem w sieciach Ethernet, USB, Bluetooth i wielu innych technologiach.

17/47 CRC-8

8-bitowa suma kontrolna

CRC-8 – 8-bitowa suma kontrolna, wielomian generatora 8. stopnia. Wynik to 8 bitów (1 bajt). Minimalny narzut przy dobrej skuteczności wykrywania błędów.

Właściwości CRC-8:

  • Wielomian generatora: najczęściej 0x07 (x8 + x2 + x + 1) lub 0x9B
  • Wykrywa 100% błędów o długości ≤ 8 bitów
  • Wykrywa wszystkie błędy nieparzystej liczby bitów
  • Wykrywa błędy pakietowe o długości ≤ 8 bitów

Zastosowania: pamięci flash, czujniki 1-Wire (Dallas/Maxim), systemy wbudowane o ograniczonych zasobach.

Ilustracja: Dzielenie wielomianowe CRC-8 – przykład obliczeń

CRC-8 jest najkrótszą powszechnie stosowaną wersją cyclic redundancy check, generującą 8-bitową sumę kontrolną z wielomianu generatora ósmego stopnia. Mimo niewielkiego narzutu wynoszącego zaledwie jeden bajt na jednostkę danych, CRC-8 zapewnia skuteczne wykrywanie błędów dla wielu zastosowań. Wykrywa ono wszystkie błędy o długości do 8 bitów oraz wszystkie błędy nieparzystej liczby bitów, co czyni je odpowiednim dla systemów o ograniczonych zasobach.

CRC-8 znajduje zastosowanie przede wszystkim w systemach wbudowanych, czujnikach cyfrowych oraz pamięciach flash, gdzie zasoby obliczeniowe i pamięciowe są ograniczone. Interfejs 1-Wire firmy Dallas Semiconductor (Maxim) wykorzystuje CRC-8 do weryfikacji poprawności odczytu identyfikatorów czujników. W systemach automatyki przemysłowej CRC-8 bywa stosowane do ochrony krótkich ramek danych przesyłanych między czujnikami a sterownikami PLC.

18/47 CRC-16

16-bitowa suma kontrolna

CRC-16 – 16-bitowa suma kontrolna, wielomian generatora 16. stopnia. Wynik to 16 bitów (2 bajty). Standard w wielu protokołach przemysłowych i komunikacyjnych.

Najpopularniejsze warianty CRC-16:

  • CRC-16-IBM (0x8005) – stosowany w Modbus RTU, USB, Bluetooth
  • CRC-16-CCITT (0x1021) – stosowany w XMODEM, PPP, IrDA
  • CRC-16-DNP (0x3D65) – stosowany w automatyce energetycznej DNP3

CRC-16 wykrywa 100% błędów o długości ≤ 16 bitów, wszystkie błędy nieparzystej liczby bitów oraz >99,99% błędów pakietowych dłuższych niż 16 bitów.

Ilustracja: Tabela – popularne wielomiany CRC-16 i ich zastosowania

CRC-16 generuje 16-bitową sumę kontrolną i jest szeroko stosowane w protokołach przemysłowych oraz komunikacyjnych, gdzie wymagany jest wyższy poziom ochrony niż oferowany przez CRC-8. Istnieje kilka popularnych wariantów CRC-16, różniących się wielomianem generatora, z których najważniejsze to CRC-16-IBM stosowane w Modbus RTU i USB oraz CRC-16-CCITT używane w protokołach XMODEM i PPP. Każdy z tych wariantów został zoptymalizowany pod kątem specyficznych wymagań danej technologii.

CRC-16 wykrywa wszystkie błędy o długości do 16 bitów oraz zapewnia wykrywalność ponad 99,99% błędów pakietowych dłuższych niż 16 bitów. W praktyce oznacza to, że dla typowych rozmiarów ramek w protokołach przemysłowych, CRC-16 gwarantuje praktycznie całkowitą detekcję błędów transmisji. CRC-16 jest również stosowane w Bluetooth, gdzie łącze radiowe jest szczególnie narażone na zakłócenia, a niezawodność transmisji ma kluczowe znaczenie dla działania urządzeń.

19/47 CRC-32

32-bitowa suma kontrolna

CRC-32 – 32-bitowa suma kontrolna, najpowszechniej stosowany wariant CRC. Wielomian generatora 0x04C11DB7 (standard IEEE 802.3). Wynik to 32 bity (4 bajty).

Właściwości CRC-32:

  • Wykrywa 100% błędów o długości ≤ 32 bity
  • Wykrywa wszystkie błędy nieparzystej liczby bitów
  • Wykrywa >99,99999998% błędów powyżej 32 bitów
  • Wykrywa wszystkie błędy pakietowe o długości ≤ 32 bity

Zastosowania: Ethernet (pole FCS), ZIP, PNG, Gzip, torrenty, PKZip.

Ilustracja: Format ramki Ethernet z polem FCS (CRC-32) na końcu

CRC-32 jest najpowszechniej stosowaną wersją cyclic redundancy check i stanowi standard wykrywania błędów w sieciach komputerowych na całym świecie. Zdefiniowany w standardzie IEEE 802.3, CRC-32 wykorzystuje wielomian generatora 0x04C11DB7 i generuje 32-bitową sumę kontrolną dołączaną do każdej ramki Ethernet jako pole FCS. Skuteczność CRC-32 jest imponująca: wykrywa ono 100% błędów o długości do 32 bitów oraz ponad 99,99999998% wszystkich pozostałych błędów.

Zastosowania CRC-32 wykraczają daleko poza Ethernet i obejmują takie systemy jak formaty archiwizacji ZIP i Gzip, obrazy dysków ISO, system kontroli wersji Git oraz wiele innych aplikacji wymagających weryfikacji integralności danych. Popularność CRC-32 wynika z doskonałego kompromisu między skutecznością wykrywania błędów a narzutem obliczeniowym i transmisyjnym. Dla typowego pakietu Ethernet o rozmiarze 1500 bajtów narzut CRC-32 wynosi zaledwie 0,27%, co czyni go praktycznie bezkosztowym w kontekście dzisiejszych przepustowości sieci.

20/47 CRC-64

64-bitowa suma kontrolna

CRC-64 – 64-bitowa suma kontrolna, wielomian generatora 64. stopnia. Wynik to 64 bity (8 bajtów). Stosowana w systemach wymagających bardzo wysokiej integralności danych.

Właściwości CRC-64:

  • Wykrywa 100% błędów o długości ≤ 64 bity
  • Wykrywa >99,99999999% błędów powyżej 64 bitów
  • Prawdopodobieństwo nierozpoznania błędu: ~5 × 10-20

Zastosowania: systemy plików ZFS (CRC-64), detekcja uszkodzeń w przechowywaniu danych masowych, obrazy dysków, archiwizacja długoterminowa.

Ilustracja: Porównanie długości CRC – CRC-8, CRC-16, CRC-32, CRC-64

CRC-64 jest najdłuższą z powszechnie stosowanych wersji cyclic redundancy check i znajduje zastosowanie w systemach wymagających ekstremalnie wysokiej integralności danych. Generując 8-bajtową sumę kontrolną, CRC-64 zapewnia wykrywanie wszystkich błędów o długości do 64 bitów oraz prawdopodobieństwo niewykrycia dłuższych błędów na poziomie zaledwie 5 × 10 do potęgi minus 20. Jest to poziom ochrony porównywalny z funkcjami kryptograficznymi, ale przy znacznie niższym koszcie obliczeniowym.

Głównym obszarem zastosowania CRC-64 są systemy przechowywania danych o krytycznym znaczeniu. System plików ZFS używa natomiast 64-bitowych sum kontrolnych Fletcher-4 do ochrony wszystkich przechowywanych danych przed cichym uszkodzeniem. CRC-64 jest również wykorzystywane w długoterminowych archiwach cyfrowych, obrazach dysków oraz systemach backupu, gdzie integralność danych musi być gwarantowana przez wiele lat. Rosnące pojemności dysków twardych i pamięci flash sprawiają, że CRC-64 zyskuje na znaczeniu jako niezbędne narzędzie ochrony przed utratą danych.

21/47 CRC – właściwości wykrywania błędów

Jakie błędy wykrywa CRC?

CRC jest w stanie wykryć: wszystkie błędy o długości ≤ stopnia wielomianu generatora, wszystkie błędy nieparzystej liczby bitów, wszystkie błędy pakietowe o długości ≤ stopnia wielomianu.

Szczegółowe właściwości CRC dla wielomianu stopnia r:

  • 100% błędów o długości ≤ r bitów (w tym błędy pojedyncze i pakietowe)
  • 100% błędów nieparzystej liczby bitów (jeśli wielomian generatora ma czynnik x+1)
  • 100% błędów pakietowych dłuższych niż r, gdy pakiet zaczyna się w środku ramki (burst error confinement)
  • Dla pozostałych błędów: prawdopodobieństwo niewykrycia = 2-r
Ilustracja: Wykres – skuteczność wykrywania błędów CRC w zależności od długości błędu

Właściwości CRC wynikają bezpośrednio z własności algebraicznych dzielenia wielomianowego w ciele Galois GF(2). Kluczową zaletą CRC jest zdolność do wykrywania wszystkich błędów o długości nieprzekraczającej stopnia wielomianu generatora, co dla CRC-32 oznacza 100% wykrywalność błędów do 32 bitów. Jeśli wielomian generatora zawiera czynnik (x+1), CRC wykrywa również wszystkie błędy nieparzystej liczby bitów, co stanowi dodatkową warstwę ochrony.

Dla błędów dłuższych niż stopień wielomianu prawdopodobieństwo niewykrycia błędu wynosi 2 do potęgi minus r, gdzie r jest stopniem wielomianu. Dla CRC-32 oznacza to prawdopodobieństwo pominięcia błędu na poziomie około 2,3 × 10 do potęgi minus 10, czyli praktycznie pomijalne w typowych zastosowaniach. Należy jednak pamiętać, że CRC nie zapewnia ochrony przed celowymi modyfikacjami danych, ponieważ brak mu właściwości kryptograficznych.

22/47 MD5 – Message Digest 5

128-bitowa funkcja skrótu

MD5 (Message Digest 5) – 128-bitowa funkcja skrótu opracowana w 1991 roku przez Rona Rivesta. Generuje 16-bajtową sumę kontrolną (skrót) z danych o dowolnej długości.

MD5 przez wiele lat był standardem weryfikacji integralności plików i transmisji. Obecnie jest uznawany za niezabezpieczony dla zastosowań kryptograficznych ze względu na udowodnione ataki kolizyjne (2004 – Wang i in., 2008 – atak na certyfikaty SSL/TLS).

Obecne zastosowania: wyłącznie do weryfikacji integralności danych w systemach niekryptograficznych, gdzie ryzyko celowego ataku jest pomijalne (np. sumy kontrolne pobieranych plików).

Ilustracja: Schemat działania MD5 – przetwarzanie bloków 512-bitowych

MD5 (Message Digest 5) jest 128-bitową funkcją skrótu zaprojektowaną przez Rona Rivesta w 1991 roku jako następca MD4. Przez wiele lat MD5 był standardem weryfikacji integralności plików i transmisji, a jego 128-bitowy skrót (16 bajtów) był powszechnie stosowany do sprawdzania poprawności pobranych plików z Internetu. Algorytm MD5 przetwarza dane w blokach 512-bitowych, wykonując cztery rundy operacji nieliniowych na słowach 32-bitowych.

Obecnie MD5 jest uznawany za całkowicie niebezpieczny dla zastosowań kryptograficznych ze względu na udowodnione ataki kolizyjne. W 2004 roku chińscy badacze pod kierownictwem Xiaoyun Wang wykazali możliwość generowania kolizji MD5 w czasie praktycznym, a w 2008 roku przeprowadzono atak na infrastrukturę SSL/TLS wykorzystujący fałszywe certyfikaty z kolizją MD5. Mimo to MD5 wciąż bywa używany do weryfikacji integralności w systemach niekryptograficznych, gdzie ryzyko celowego ataku jest pomijalne.

23/47 SHA-1

160-bitowa funkcja skrótu

SHA-1 (Secure Hash Algorithm 1) – 160-bitowa funkcja skrótu opracowana przez NSA w 1995 roku. Generuje 20-bajtową sumę kontrolną. Przez wiele lat standard w podpisach cyfrowych i certyfikatach.

Podobnie jak MD5, SHA-1 został wycofany z zastosowań kryptograficznych po udowodnieniu ataków kolizyjnych:

  • 2005 – teoretyczne osłabienie bezpieczeństwa z 80 do 69 bitów
  • 2017 – Google i CWI Amsterdam ogłaszają pierwszą praktyczną kolizję SHA-1 (SHAttered)
  • 2020 – atak z wyborem prefiksu (Chosen-Prefix Collision)

Obecny status: wycofany przez NIST, NIST SP 800-131A zakazuje SHA-1 w zastosowaniach wymagających bezpieczeństwa kryptograficznego.

Ilustracja: Oś czasu – podatności SHA-1 od 2005 do 2020

SHA-1 (Secure Hash Algorithm 1) został opracowany przez amerykańską agencję NSA w 1995 roku jako 160-bitowa funkcja skrótu stanowiąca następcę SHA-0. Przez ponad dwie dekady SHA-1 był szeroko stosowany w podpisach cyfrowych, certyfikatach SSL/TLS oraz systemach kontroli wersji. Algorytm generuje 20-bajtowy skrót i działa na blokach 512-bitowych, wykonując 80 rund operacji na słowach 32-bitowych.

W 2017 roku zespół Google i CWI Amsterdam ogłosił pierwszą praktyczną kolizję SHA-1, nazwaną SHAttered, co ostatecznie potwierdziło, że algorytm nie jest już bezpieczny. Koszt przeprowadzenia ataku wyniósł około 110 tysięcy dolarów w mocy obliczeniowej GPU, co pokazuje, że nawet średnio zasobny atakujący może sfabrykować kolizję SHA-1. W konsekwencji SHA-1 został wycofany przez NIST i praktycznie wszystkie organizacje normalizacyjne, a jego stosowanie w zastosowaniach kryptograficznych jest obecnie zakazane.

24/47 SHA-256

256-bitowa funkcja skrótu z rodziny SHA-2

SHA-256 – 256-bitowa funkcja skrótu z rodziny SHA-2 (Secure Hash Algorithm 2), opracowana przez NSA w 2001 roku. Generuje 32-bajtową sumę kontrolną. Obecnie standard bezpieczeństwa kryptograficznego.

Właściwości SHA-256:

  • Długość skrótu: 256 bitów (32 bajty)
  • Poziom bezpieczeństwa: 128 bitów (odporność na kolizje)
  • Brak znanych ataków praktycznych (stan na 2026)
  • Zalecany przez NIST jako standard kryptograficzny

Zastosowania: TLS/SSL, IPsec, blockchain (Bitcoin, Ethereum), podpisy cyfrowe, Git (identyfikacja commitów), Linux (verity, integrity).

Ilustracja: Porównanie MD5 (128b), SHA-1 (160b), SHA-256 (256b) – długość skrótu

SHA-256 jest obecnie podstawowym standardem bezpieczeństwa kryptograficznego, zalecanym przez NIST dla wszystkich nowych zastosowań wymagających ochrony integralności danych. Należąc do rodziny SHA-2, SHA-256 generuje 256-bitowe skróty (32 bajty) i oferuje 128-bitowy poziom odporności na kolizje, co jest uznawane za bezpieczne przy obecnym stanie wiedzy kryptograficznej. Algorytm działa na blokach 512-bitowych i wykonuje 64 rundy operacji, co czyni go znacznie wolniejszym niż MD5 czy SHA-1, ale zapewnia odpowiedni margines bezpieczeństwa.

SHA-256 znajduje zastosowanie w praktycznie wszystkich dziedzinach współczesnej kryptografii, od TLS i IPsec przez blockchain (Bitcoin, Ethereum) po system kontroli wersji Git. W systemach Linux SHA-256 jest wykorzystywany do weryfikacji integralności pakietów oraz w mechanizmach takich jak dm-verity i fs-verity. Rosnąca moc obliczeniowa i rozwój komputerów kwantowych mogą w przyszłości zagrozić bezpieczeństwu SHA-256, ale na obecną chwilę pozostaje on bezpiecznym i zalecanym wyborem.

25/47 Porównanie funkcji skrótu

Nakład obliczeniowy a poziom ochrony

FunkcjaDługość skrótuBezpieczeństwoSzybkość (MB/s)*Status
MD5128 bitówłamany (~218 kolizji)~450niezalecany
SHA-1160 bitówłamany (~263)~350wycofany
SHA-256256 bitówbezpieczny (128 bitów)~250zalecany
SHA-512512 bitówbezpieczny (256 bitów)~180zalecany

* Szybkość dla implementacji sprzętowej/SSE na nowoczesnym procesorze (przybliżone wartości).

Wniosek: Wyższy poziom bezpieczeństwa kosztem większego narzutu obliczeniowego i dłuższej sumy kontrolnej. SHA-256 stanowi obecnie optymalny kompromis.
Ilustracja: Wykres – szybkość vs poziom bezpieczeństwa funkcji skrótu

Porównanie nakładu obliczeniowego różnych funkcji skrótu ma istotne znaczenie praktyczne przy projektowaniu systemów teleinformatycznych. MD5 jest najszybszy, osiągając przepustowość około 450 MB/s w implementacjach sprzętowych, ale jego bezpieczeństwo jest całkowicie złamane. SHA-1 jest nieco wolniejszy (około 350 MB/s), ale również został wycofany ze względu na udowodnione ataki kolizyjne. SHA-256 i SHA-512 są najwolniejsze, ale oferują odpowiedni poziom bezpieczeństwa kryptograficznego.

W praktyce inżynierskiej wybór funkcji skrótu powinien uwzględniać nie tylko szybkość obliczeń, ale także wymagany poziom bezpieczeństwa i przewidywany okres eksploatacji systemu. Dla zastosowań niewymagających ochrony kryptograficznej, takich jak proste sumy kontrolne plików, można rozważyć szybsze algorytmy. W systemach krytycznych ze względu na bezpieczeństwo należy stosować wyłącznie SHA-256 lub SHA-512, które są obecnie uznawane za bezpieczne przez wszystkie organizacje normalizacyjne.

26/47 Tabela porównawcza metod wykrywania błędów

Bit parzystości vs CRC-32 vs SHA-256

KryteriumBit parzystościCRC-32SHA-256
Długość sumy1 bit32 bity256 bitów
Narzut dla 1500 B0,008%0,27%2,13%
Skuteczność burst errors~50%>99,99999998%~100%
Błędy ≤ 32 bityróżnie100%100%
Nakład obliczeniowyzaniedbywalnyniskiwysoki
Odporność na atakibrakbrakkryptograficzna
Ilustracja: Wykres porównawczy – narzut vs skuteczność metod wykrywania błędów

Tabela porównawcza metod wykrywania błędów jednoznacznie pokazuje, że nie istnieje uniwersalna metoda odpowiednia dla wszystkich zastosowań. Bit parzystości charakteryzuje się minimalnym narzutem i znikomym nakładem obliczeniowym, ale jego skuteczność dla błędów pakietowych wynosi zaledwie około 50%. CRC-32 oferuje doskonały kompromis: narzut 0,27% dla pakietu 1500 bajtów przy skuteczności wykrywania błędów przekraczającej 99,99999998%.

SHA-256 zapewnia praktycznie 100% wykrywalność wszelkich zmian danych, ale kosztem znacznie większego narzutu transmisyjnego (2,13% dla 1500 bajtów) i wysokiego nakładu obliczeniowego. Wybór odpowiedniej metody powinien uwzględniać charakterystykę kanału transmisyjnego, wymagania dotyczące przepustowości i opóźnień oraz poziom zagrożenia celowymi atakami. W wielu praktycznych zastosowaniach stosuje się kombinację kilku metod, na przykład CRC-32 do wykrywania przypadkowych błędów transmisji oraz SHA-256 do ochrony przed celowymi modyfikacjami.

27/47 Kryteria doboru metody kontroli błędów

Jak dobrać odpowiednią metodę?

Wybór metody kontroli błędów zależy od następujących kryteriów:

  • Długość sumy kontrolnej – im dłuższa, tym większy narzut, ale lepsza skuteczność
  • Skuteczność wykrywania błędów – procent błędów wykrywanych dla danego typu zakłóceń
  • Narzut obliczeniowy – koszt CPU/energii potrzebny do obliczenia i weryfikacji sumy
  • Klasa błędów wykrywanych – czy metoda wykrywa błędy pojedyncze, pakietowe, czy oba typy
Zasada: im bardziej zawodne łącze, tym silniejszej metody kontroli błędów potrzebujemy. Dla łączy o niskim BER wystarczy CRC-32; dla łączy radiowych i satelitarnych konieczne jest FEC.
Ilustracja: Matryca decyzyjna – wybór metody w zależności od BER i opóźnienia

Kryteria doboru metody kontroli błędów są ściśle związane z charakterystyką łącza transmisyjnego oraz wymaganiami stawianymi przez konkretną aplikację. Kluczowym parametrem jest bitowa stopa błędów (BER), która określa, jak często występują błędy w danym kanale komunikacyjnym. Dla łączy światłowodowych o bardzo niskim BER wystarczy proste CRC-32, podczas gdy dla łączy radiowych o wysokim BER konieczne jest zastosowanie silnych kodów FEC w połączeniu z mechanizmami ARQ.

Kolejnym istotnym kryterium jest dopuszczalne opóźnienie transmisji, które determinuje wybór między FEC a ARQ. W systemach czasu rzeczywistego, takich jak transmisja wideo na żywo czy VoIP, stosuje się wyłącznie FEC, ponieważ retransmisje ARQ wprowadzałyby nieakceptowalne opóźnienia. W systemach przechowywania danych priorytetem jest integralność długoterminowa, co wymaga stosowania silniejszych kodów, takich jak CRC-64 czy kody Reeda-Solomona.

28/47 Zastosowanie praktyczne metod wykrywania

Gdzie stosuje się poszczególne metody?

TechnologiaMetodaUzasadnienie
EthernetCRC-32 (FCS)Niski narzut, doskonała detekcja błędów transmisji w łączu przewodowym
TLS/SSLSHA-256 (HMAC)Konieczność kryptograficznej integralności i autentyczności
Pamięć RAMBit parzystości / ECCMinimalny narzut, ochrona przed pojedynczymi błędami (bit flips)
USBCRC-16 / CRC-5Dopasowany do rozmiaru pakietów USB
BluetoothCRC-16 + FECŁącze radiowe wymaga kombinacji wykrywania i korekcji
Systemy plików (ZFS)CRC-64Ochrona przed utratą danych na dyskach
Ilustracja: Mapa – które technologie używają jakiej metody wykrywania błędów

Zastosowanie praktyczne metod wykrywania błędów w różnych technologiach pokazuje, że każda z metod znalazła swoją niszę, w której sprawdza się najlepiej. Ethernet stosuje CRC-32 jako pole FCS, ponieważ zapewnia optymalny kompromis między skutecznością a narzutem dla łączy przewodowych o niskim BER. Pamięci RAM używają bitu parzystości lub kodów Hamminga ECC, gdzie kluczowa jest ochrona przed pojedynczymi błędami wywołanymi promieniowaniem kosmicznym.

Protokoły TLS/SSL wymagają kryptograficznych funkcji skrótu, takich jak SHA-256 w mechanizmie HMAC, ponieważ muszą chronić nie tylko przed przypadkowymi błędami, ale także przed celowymi atakami. Bluetooth łączy CRC-16 z FEC, ponieważ łącze radiowe jest narażone na różnorodne zakłócenia wymagające zarówno detekcji, jak i korekcji błędów. System plików ZFS stosuje CRC-64 do ochrony przed cichym uszkodzeniem danych, co jest szczególnie istotne w przypadku macierzy dyskowych o dużej pojemności.

29/47 Porównanie metod wykrywania – podsumowanie

Którą metodę wybrać?

Każda z metod wykrywania błędów ma swoje miejsce w systemach telekomunikacyjnych:

  • Bit parzystości – tam, gdzie priorytetem jest prostota i minimalny narzut, a skuteczność ~50% dla burst errors jest akceptowalna (pamięci RAM, UART)
  • CRC-32 – tam, gdzie potrzebny jest dobry kompromis między skutecznością a narzutem (sieci przewodowe, standard Ethernet)
  • SHA-256 – tam, gdzie wymagana jest kryptograficzna odporność na celowe modyfikacje (TLS, IPsec, blockchain)
Pamiętaj: żadna metoda wykrywania błędów nie zapewnia 100% pewności. Zawsze istnieje (niewielkie) prawdopodobieństwo, że błąd pozostanie niewykryty.
Ilustracja: Spektrum metod – od prostych do zaawansowanych z ich zastosowaniami

Podsumowując porównanie metod wykrywania błędów, należy stwierdzić, że wybór odpowiedniej techniki zależy przede wszystkim od wymaganego poziomu niezawodności i dostępnych zasobów. Bit parzystości jest odpowiedni tam, gdzie priorytetem jest minimalny koszt i prostota implementacji, a ryzyko błędów jest niskie. CRC-32 stanowi złoty standard w sieciach komputerowych, oferując doskonałą ochronę przy znikomym narzucie.

Funkcje skrótu kryptograficznego, takie jak SHA-256, są niezbędne w zastosowaniach wymagających ochrony przed celowymi atakami, ale ich koszt obliczeniowy i narzut transmisyjny są znacznie wyższe niż CRC. W żadnym przypadku nie można jednak osiągnąć 100% pewności wykrycia błędów, ponieważ każda metoda ma teoretyczne prawdopodobieństwo niewykrycia uszkodzenia. Dlatego w systemach krytycznych stosuje się redundantne mechanizmy kontroli na różnych warstwach modelu OSI.

30/47 FEC – Forward Error Correction

Korekcja błędów bez retransmisji

FEC (Forward Error Correction) – technika kodowania kanałowego, w której nadawca dodaje nadmiarowe bity do przesyłanych danych, umożliwiające odbiorcy samodzielne wykrycie i skorygowanie błędów bez konieczności retransmisji.

FEC jest niezbędne w systemach, gdzie retransmisja jest niemożliwa lub niepraktyczna:

  • Łącza satelitarne (duże opóźnienie – retransmisja kosztowna czasowo)
  • Transmisja w czasie rzeczywistym (VoIP, streaming wideo)
  • Komunikacja kosmiczna (ogromne odległości)
  • Pamięci masowe (CD/DVD, SSD z korekcją błędów)
Ilustracja: Różnica między FEC (korekcja) a ARQ (retransmisja)

Forward Error Correction (FEC) jest techniką kodowania kanałowego, która rewolucjonizuje sposób radzenia sobie z błędami transmisji w systemach, gdzie retransmisja jest niepraktyczna lub niemożliwa. W przeciwieństwie do ARQ, FEC nie wymaga kanału zwrotnego ani oczekiwania na potwierdzenie, ponieważ wszystkie informacje niezbędne do korekcji błędów są zawarte w nadmiarowych bitach dołączonych do przesyłanych danych. Dzięki temu FEC jest idealnym rozwiązaniem dla transmisji jednokierunkowych, takich jak radiofonia, telewizja czy komunikacja kosmiczna.

Kluczowym parametrem każdego kodu FEC jest stopień kodowania (code rate), definiowany jako stosunek liczby bitów danych do całkowitej długości słowa kodowego. Niższy stopień kodowania oznacza większy narzut, ale jednocześnie silniejszą korekcję błędów, co jest korzystne w bardzo zawodnych kanałach. Nowoczesne kody LDPC stosowane w 5G i Wi-Fi 6 potrafią działać w odległości mniejszej niż 0,5 dB od teoretycznej granicy Shannona, co stanowi praktycznie optymalne wykorzystanie przepustowości kanału.

31/47 Kody Hamminga

Najprostsze kody korekcyjne

Kody Hamminga – rodzina liniowych kodów korekcyjnych (n,k), gdzie n to długość słowa kodowego, k to liczba bitów danych. Pozwalają na korekcję 1 błędu i detekcję 2 błędów.

Najpopularniejszy kod Hamminga: (7,4) – 4 bity danych + 3 bity parzystości = 7 bitów słowa kodowego. Bity parzystości są umieszczane na pozycjach będących potęgami dwójki (1, 2, 4).

  • Efektywność: 4/7 = ~57%
  • Narzut: 75% (3 bity na 4 dane)
  • Zastosowanie: pamięci ECC (Error-Correcting Code) w serwerach i superkomputerach
Ilustracja: Schemat kodu Hamminga (7,4) – bity danych i parzystości

Kody Hamminga stanowią historycznie pierwszą praktyczną implementację kodów korekcyjnych i są klasycznym przykładem kodu liniowego blokowego. Najpopularniejszy kod Hamminga (7,4) koduje 4 bity danych za pomocą 3 bitów parzystości, tworząc 7-bitowe słowo kodowe zdolne do korekcji pojedynczego błędu. Bity parzystości w kodzie Hamminga są umieszczane na pozycjach będących potęgami dwójki (1, 2, 4), co umożliwia precyzyjne wskazanie pozycji uszkodzonego bitu za pomocą syndromu korekcyjnego.

Mimo ograniczonej efektywności kodowania wynoszącej 4/7 (około 57%), kody Hamminga są nadal powszechnie stosowane w pamięciach ECC w serwerach i systemach krytycznych. Rozszerzone kody Hamminga umożliwiają dodatkowo detekcję dwóch błędów (SECDED – Single Error Correct, Double Error Detect), co jest szczególnie przydatne w systemach, gdzie ryzyko wystąpienia dwóch błędów w jednym słowie jest niezerowe. Implementacja sprzętowa kodów Hamminga jest niezwykle prosta i szybka, co czyni je idealnymi dla pamięci RAM w serwerach.

32/47 Kody Reeda-Solomona

Korekcja błędów pakietowych

Kody Reeda-Solomona (RS) – niebinarne kody cykliczne działające na symbolach (np. bajtach), a nie pojedynczych bitach. Doskonale radzą sobie z korekcją błędów pakietowych.

Kod RS(n,k) oznacza: n symboli w słowie kodowym, k symboli danych, n−k symboli nadmiarowych. Każdy symbol to zazwyczaj 8 bitów (bajt).

  • RS(255,223) – standard CCSDS dla komunikacji kosmicznej, dodaje 32 bajty nadmiaru na 223 bajty danych
  • RS(255,251) – stosowany w CD-DA (Red Book), korekcja błędów odczytu
  • Zastosowania: CD/DVD/Blu-ray, kody QR, komunikacja satelitarna, ADSL
Ilustracja: Struktura słowa kodowego Reeda-Solomona – dane + symbole nadmiarowe

Kody Reeda-Solomona są niebinarnymi kodami cyklicznymi, które operują na całych symbolach (bajtach), a nie na pojedynczych bitach, co czyni je wyjątkowo skutecznymi w korekcji błędów pakietowych. Parametry kodu RS(n,k) określają, że na n symboli słowa kodowego przypada k symboli danych i n − k symboli nadmiarowych. Dla przykładu RS(255,223), stosowany w komunikacji kosmicznej, dodaje 32 symbole nadmiaru do 223 symboli danych, co pozwala skorygować do 16 błędnych symboli.

Zastosowania kodów Reeda-Solomona są niezwykle szerokie i obejmują praktycznie wszystkie dziedziny wymagające niezawodnej korekcji błędów pakietowych. Płyty CD i DVD używają kodów Reeda-Solomona do korekcji błędów odczytu spowodowanych rysami i zabrudzeniami powierzchni. Kody QR zawierają znaczny nadmiar Reeda-Solomona, umożliwiający odczyt kodu nawet przy znacznym uszkodzeniu graficznym. Systemy ADSL i komunikacja satelitarna również polegają na kodach Reeda-Solomona jako podstawowym mechanizmie korekcji błędów.

33/47 Kody LDPC

Nowoczesne kody bliskie granicy Shannona

LDPC (Low-Density Parity-Check) – kody korekcyjne z rzadką macierzą parzystości, osiągające wydajność bliską teoretycznej granicy Shannona. Odkryte przez Gallagera w 1963, ponownie odkryte w latach 90.

Cechy charakterystyczne kodów LDPC:

  • Dekodowanie iteracyjne (algorytm sum-produktów lub min-sum)
  • Macierz parzystości zawiera bardzo mało jedynek (stąd "low-density")
  • Mogą osiągnąć przepustowość bliską granicy Shannona (różnica < 0,5 dB)

Zastosowania: 5G NR (New Radio), DVB-S2/S2X (telewizja satelitarna), Wi-Fi 6 (802.11ax), 10GBASE-T Ethernet.

Ilustracja: Wykres – przepustowość kanału (granica Shannona) vs osiągi LDPC

Kody LDPC (Low-Density Parity-Check) stanowią szczytowe osiągnięcie teorii kodowania kanałowego, pozwalając na transmisję danych z prędkością bliską teoretycznej granicy Shannona. Zostały pierwotnie odkryte przez Roberta Gallagera w 1963 roku, ale ze względu na ówczesne ograniczenia obliczeniowe zostały zapomniane na ponad trzydzieści lat. Ponowne odkrycie kodów LDPC w latach 90. XX wieku zrewolucjonizowało telekomunikację, umożliwiając osiągnięcie przepustowości kanału różniącej się od granicy Shannona o mniej niż 0,5 dB.

Kody LDPC charakteryzują się rzadką macierzą parzystości, w której większość elementów ma wartość 0, a tylko nieliczne są równe 1, co umożliwia efektywne dekodowanie iteracyjne za pomocą algorytmu sum-produktów lub min-sum. Są one powszechnie stosowane w najnowocześniejszych standardach telekomunikacyjnych, takich jak 5G NR, Wi-Fi 6 (802.11ax), DVB-S2/S2X oraz 10GBASE-T Ethernet. Dekodery LDPC wymagają znacznych zasobów obliczeniowych, ale postęp technologiczny w produkcji układów scalonych sprawił, że są one obecnie praktyczne nawet w urządzeniach mobilnych.

34/47 Porównanie metod FEC

Hamming vs Reed-Solomon vs LDPC

ParametrHammingReed-SolomonLDPC
Rok opracowania195019601963 / 1996
Rodzaj błędówpojedynczepakietowepojedyncze i pakietowe
Maks. korekcja1 bitwiel symbolizależy od konstrukcji
Złożoność dekoderaniskaśredniawysoka
Odległość od granicy Shannonaduża (~8 dB)średnia (~3 dB)mała (< 0,5 dB)
Zastosowaniapamięci ECCCD/DVD, QR, satelity5G, Wi-Fi 6, DVB-S2
Ilustracja: Wykres – efektywność widmowa vs SNR dla różnych kodów FEC

Porównanie metod FEC ujawnia wyraźną ewolucję od prostych kodów Hamminga przez kody Reeda-Solomona aż po zaawansowane kody LDPC. Kody Hamminga, choć najstarsze i najprostsze, pozostają niezastąpione w zastosowaniach wymagających bardzo szybkiej korekcji pojedynczych błędów przy minimalnym nakładzie obliczeniowym. Kody Reeda-Solomona zajmują pozycję pośrednią, oferując dobrą korekcję błędów pakietowych przy umiarkowanej złożoności dekodowania.

Kody LDPC, dzięki iteracyjnemu dekodowaniu i bliskości granicy Shannona, są obecnie preferowanym wyborem dla wszystkich nowych standardów telekomunikacyjnych. Różnica w odległości od granicy Shannona między poszczególnymi kodami jest znacząca: kody Hamminga tracą około 8 dB w stosunku do teoretycznego maksimum, podczas gdy LDPC tracą mniej niż 0,5 dB. Wybór konkretnego kodu FEC powinien uwzględniać charakterystykę kanału, dostępną moc obliczeniową oraz wymagania dotyczące opóźnień dekodowania.

35/47 FEC – podsumowanie

Kiedy stosować FEC?

FEC sprawdza się najlepiej, gdy: opóźnienie transmisji jest duże (satelita, kosmos), transmisja jest jednokierunkowa (broadcast), wymagane jest przetwarzanie w czasie rzeczywistym (VoIP, streaming) lub retransmisja jest zbyt kosztowna.

Kluczowe pojęcia w FEC:

  • Stopień kodowania (code rate) – stosunek k/n (dane / słowo kodowe). Niższy stopień = więcej nadmiaru = silniejsza korekcja
  • Wzmocnienie kodowania (coding gain) – poprawa SNR (stosunku sygnału do szumu) dzięki zastosowaniu kodu
  • Odległość Hamminga – minimalna liczba pozycji, na których różnią się dwa słowa kodowe; im większa, tym więcej błędów można skorygować
Ilustracja: Trade-off – moc korekcji vs narzut vs złożoność dla różnych kodów FEC

Podsumowując tematykę FEC, należy podkreślić, że kody korekcyjne są niezbędnym narzędziem w nowoczesnych systemach telekomunikacyjnych, umożliwiającym niezawodną transmisję w trudnych warunkach kanałowych. Kluczowymi parametrami przy wyborze kodu FEC są stopień kodowania (code rate), wzmocnienie kodowania (coding gain) oraz minimalna odległość Hamminga między słowami kodowymi. Im większa odległość Hamminga, tym więcej błędów może skorygować dany kod, ale kosztem większego narzutu transmisyjnego.

W praktyce inżynierskiej często stosuje się kaskadowe kodowanie, łączące dwa lub więcej kodów FEC w celu uzyskania lepszej ochrony przed błędami. Na przykład w standardzie DVB-S2 stosuje się kaskadę kodów LDPC i BCH, gdzie LDPC koryguje większość błędów, a BCH zajmuje się pozostałymi błędami resztkowymi. Należy również pamiętać, że FEC nie eliminuje całkowicie błędów, a jedynie redukuje je do akceptowalnego poziomu, co wyraża się poprzez pozostałości błędów resztkowych (residual errors) po dekodowaniu.

36/47 ARQ – definicja

Automatic Repeat reQuest

ARQ (Automatic Repeat reQuest) – mechanizm kontroli błędów, w którym odbiorca wykrywa błędy w odebranych pakietach i żąda od nadawcy retransmisji uszkodzonych danych. Wymaga kanału zwrotnego (feedback channel).

ARQ jest podstawą niezawodnej komunikacji w sieciach pakietowych (TCP, sieci komórkowe, łącza radiowe). Działa w połączeniu z mechanizmami wykrywania błędów (CRC, bit parzystości).

Wyróżniamy trzy podstawowe warianty ARQ: Stop-and-Wait, Go-Back-N oraz Selective Repeat. Każdy oferuje inny kompromis między złożonością a efektywnością.

Ilustracja: Schemat ogólny ARQ – nadawca → odbiorca → ACK/NAK → retransmisja

ARQ (Automatic Repeat reQuest) jest mechanizmem kontroli błędów, który w przeciwieństwie do FEC polega na retransmisji uszkodzonych danych, wymagając dwukierunkowego kanału komunikacyjnego. Podstawowym elementem każdego protokołu ARQ jest sekwencjonowanie pakietów za pomocą numerów sekwencyjnych, które umożliwia odbiorcy identyfikację pakietów i wykrywanie ich ewentualnej utraty lub zdublowania. Nadawca przechowuje wysłane pakiety w buforze retransmisyjnym do momentu otrzymania potwierdzenia ACK od odbiorcy.

Współczesne protokoły ARQ wykorzystują okno transmisyjne, które określa maksymalną liczbę pakietów, jaką nadawca może wysłać bez oczekiwania na potwierdzenie. Rozmiar okna transmisyjnego ma kluczowe znaczenie dla efektywności protokołu, ponieważ zbyt małe okno prowadzi do niepełnego wykorzystania dostępnego pasma, a zbyt duże może spowodować przeciążenie sieci. TCP, będący najpopularniejszym protokołem ARQ w Internecie, dynamicznie dostosowuje rozmiar okna transmisyjnego do warunków sieciowych za pomocą mechanizmu kontroli przeciążenia.

37/47 Stop-and-Wait ARQ

Najprostszy wariant ARQ

Stop-and-Wait ARQ – nadawca wysyła jeden pakiet, po czym zatrzymuje się i czeka na potwierdzenie (ACK) od odbiorcy. Po otrzymaniu ACK wysyła kolejny pakiet. Jeśli otrzyma NAK lub upłynie timeout – retransmisja.

Zalety:

  • Prostota implementacji – minimalne wymagania co do buforowania
  • Niskie wymagania pamięciowe – nadawca przechowuje tylko jeden pakiet w buforze

Wady:

  • Niska efektywność – nadawca czeka na ACK, nie wysyłając kolejnych danych
  • Problem z dużym opóźnieniem RTT (Round Trip Time) – przepustowość spada drastycznie
Ilustracja: Diagram czasowy – Stop-and-Wait ARQ z ACK, NAK i timeoutem

Stop-and-Wait ARQ jest najprostszym wariantem protokołu ARQ, w którym nadawca wysyła jeden pakiet, a następnie zatrzymuje się i czeka na potwierdzenie przed wysłaniem kolejnego. Zaletą tego rozwiązania jest minimalna złożoność implementacyjna oraz niewielkie wymagania co do buforowania, ponieważ nadawca przechowuje tylko jeden pakiet w buforze retransmisyjnym. Sekwencjonowanie w Stop-and-Wait ARQ wymaga tylko jednego bitu numeru sekwencyjnego, który zmienia się z 0 na 1 i z powrotem dla każdego kolejnego pakietu.

Podstawową wadą Stop-and-Wait ARQ jest bardzo niska efektywność wykorzystania łącza, szczególnie w przypadku dużego opóźnienia RTT. Przez czas oczekiwania na potwierdzenie nadawca nie wysyła żadnych danych, co prowadzi do marnowania przepustowości. Efektywność tego protokołu można obliczyć jako stosunek czasu transmisji pakietu do czasu RTT, i dla łączy o dużym opóźnieniu, takich jak łącza satelitarne, może ona wynosić zaledwie kilka procent.

38/47 Go-Back-N ARQ

Retransmisja N pakietów

Go-Back-N ARQ – nadawca może wysyłać wiele pakietów bez czekania na potwierdzenie (okno nadawania o rozmiarze N). W przypadku błędu retransmitowane są wszystkie pakiety od momentu wystąpienia błędu.

Działanie:

  • Nadawca wysyła pakiety sekwencyjnie, zwiększając numer sekwencyjny modulo N
  • Odbiorca akceptuje tylko pakiety w oczekiwanej kolejności, pozostałe odrzuca
  • Po błędzie: retransmisja pakietu z błędem i wszystkich kolejnych (stąd "go-back-N")

Efektywniejszy od Stop-and-Wait, ale w przypadku błędu marnuje przepustowość na retransmisję poprawnie odebranych pakietów.

Ilustracja: Diagram czasowy – Go-Back-N z retransmisją od pakietu 3

Go-Back-N ARQ stanowi znaczące ulepszenie w stosunku do Stop-and-Wait, umożliwiając nadawcy ciągłe wysyłanie pakietów bez oczekiwania na potwierdzenie każdego z nich. Nadawca dysponuje oknem transmisyjnym o rozmiarze N, które określa maksymalną liczbę pakietów mogących znajdować się w locie bez potwierdzenia. W przypadku wystąpienia błędu, odbiorca odrzuca wszystkie pakiety odebrane po uszkodzonym, a nadawca retransmituje całą zawartość okna od momentu wystąpienia błędu.

Wadą Go-Back-N ARQ jest marnowanie przepustowości na retransmisję pakietów, które zostały już poprawnie odebrane, ale zostały odrzucone ze względu na utratę kolejności. W łączach o wysokim BER prowadzi to do kaskadowego pogarszania się wydajności, ponieważ każdy błąd powoduje retransmisję wielu pakietów. Mimo to Go-Back-N jest stosowany w praktyce ze względu na prostszą implementację odbiornika, który nie musi buforować pakietów odebranych poza kolejnością.

39/47 Selective Repeat ARQ

Retransmisja tylko uszkodzonych pakietów

Selective Repeat ARQ – nadawca retransmituje tylko te pakiety, które zostały uszkodzone lub zgubione. Odbiorca buforuje poprawnie odebrane pakiety i składa je w odpowiedniej kolejności.

Działanie:

  • Nadawca wysyła pakiety z oknem nadawania o rozmiarze N
  • Odbiorca potwierdza każdy pakiet indywidualnie (selektywne ACK)
  • Uszkodzone pakiety są retransmitowane, a pozostałe nie są powtarzane
  • Odbiorca musi buforować pakiety odebrane poza kolejnością

Najefektywniejszy wariant ARQ – nie marnuje przepustowości na zbędne retransmisje, ale wymaga bardziej złożonego buforowania i logiki zarówno po stronie nadawcy, jak i odbiorcy.

Ilustracja: Diagram czasowy – Selective Repeat z retransmisją tylko pakietu 3

Selective Repeat ARQ jest najefektywniejszym, ale jednocześnie najbardziej złożonym wariantem protokołu ARQ. W przeciwieństwie do Go-Back-N, Selective Repeat retransmituje wyłącznie te pakiety, które zostały uszkodzone lub zgubione, podczas gdy poprawnie odebrane pakiety są buforowane przez odbiorcę i składane w odpowiedniej kolejności. Wymaga to bardziej zaawansowanego mechanizmu sekwencjonowania oraz buforowania zarówno po stronie nadawcy, jak i odbiorcy.

Rozmiar okna transmisyjnego w Selective Repeat ARQ musi być nie większy niż połowa zakresu numerów sekwencyjnych, aby uniknąć niejednoznaczności przy identyfikacji pakietów. Selective Repeat jest stosowany w protokołach, gdzie wydajność transmisji ma kluczowe znaczenie, a warunki kanałowe są zmienne. Przykładem praktycznego zastosowania jest mechanizm SACK (Selective Acknowledgment) w protokole TCP, który umożliwia selektywną retransmisję tylko utraconych segmentów, co jest przybliżeniem Selective Repeat.

40/47 Ethernet – CRC-32 w praktyce

Wykrywanie błędów w sieciach Ethernet

Ethernet – ramka Ethernet zawiera pole FCS (Frame Check Sequence) o długości 4 bajtów (32 bity) na końcu ramki, zawierające sumę CRC-32 obliczoną dla całego pakietu z wyłączeniem samego FCS.

Działanie w praktyce:

  • Nadawca oblicza CRC-32 (wielomian 0x04C11DB7) dla całej ramki (oprócz FCS)
  • Odbiorca wykonuje to samo dzielenie na odebranej ramce (łącznie z FCS)
  • Jeśli reszta z dzielenia = 0 – ramka poprawna; jeśli ≠ 0 – ramka odrzucana
  • Wykrywa 100% błędów ≤ 32 bity, wszystkie błędy nieparzystej liczby bitów

Ethernet stosuje wyłącznie detekcję błędów (bez korekcji) – uszkodzone ramki są odrzucane, a retransmisję realizują wyższe warstwy (TCP).

Ilustracja: Budowa ramki Ethernet – preambuła, nagłówek, dane, FCS (CRC-32)

Ethernet, jako najpopularniejsza technologia sieci lokalnych, stosuje CRC-32 do wykrywania błędów transmisji, ale nie implementuje żadnej formy korekcji ani retransmisji na poziomie warstwy łącza danych. Pole FCS (Frame Check Sequence) o długości 4 bajtów jest obliczane dla całej ramki z wyłączeniem samego FCS i dołączane na jej końcu. Jeśli odbiorca stwierdzi, że suma CRC jest nieprawidłowa, ramka jest po prostu odrzucana, a retransmisję muszą zapewnić wyższe warstwy protokołu, najczęściej TCP.

Taka konstrukcja Ethernetu wynika z założenia, że w dobrze zaprojektowanych łączach przewodowych BER jest bardzo niski, zazwyczaj poniżej 10 do potęgi minus 12, co oznacza średnio jeden błąd na bilion przesłanych bitów. Dla typowej ramki Ethernet o rozmiarze 1500 bajtów oznacza to jeden błędną ramkę na około 80 milionów przesłanych ramek, co jest akceptowalne w praktyce. Narzut CRC-32 wynoszący zaledwie 0,27% jest uznawany za minimalny w porównaniu z korzyściami wynikającymi z niezawodnej detekcji błędów.

41/47 Wi-Fi – FEC + ARQ

Kontrola błędów w sieciach bezprzewodowych

Sieci Wi-Fi (IEEE 802.11) stosują kombinację FEC i ARQ dla zapewnienia niezawodności w zawodnym środowisku radiowym:

  • FEC na poziomie fizycznym (PHY) – kody splotowe (802.11a/g) lub LDPC (802.11n/ac/ax). Stopień kodowania zależny od warunków kanału (MCS – Modulation and Coding Scheme)
  • ARQ na poziomie MAC – każda ramka danych jest potwierdzana ramką ACK. W przypadku braku ACK następuje retransmisja (domyślnie do 7 prób)
  • Block ACK – w 802.11e/n agregacja ramek z jednym zbiorczym potwierdzeniem
Adaptive Modulation and Coding (AMC) – dynamiczny wybór schematu modulacji i kodowania w zależności od SNR, optymalizujący przepustowość przy zachowaniu BER < 10-5.
Ilustracja: Schemat transmisji Wi-Fi – FEC w warstwie PHY + ARQ w warstwie MAC

Sieci Wi-Fi, w przeciwieństwie do Ethernetu, muszą radzić sobie ze znacznie trudniejszym środowiskiem transmisyjnym, gdzie sygnał podlega zanikom, interferencjom i zakłóceniom z innych sieci. Z tego powodu standard IEEE 802.11 stosuje dwuwarstwową strategię kontroli błędów: FEC na poziomie fizycznym (PHY) i ARQ na poziomie dostępu do medium (MAC). Na poziomie PHY stosuje się kodowanie splotowe lub LDPC z adaptacyjnym doborem schematu modulacji i kodowania (MCS) w zależności od warunków kanałowych.

Na poziomie MAC każda ramka danych jest potwierdzana ramką ACK, a w przypadku braku potwierdzenia następuje retransmisja, domyślnie do 7 prób. Nowoczesne standardy Wi-Fi, począwszy od 802.11e, wprowadziły mechanizm Block ACK, który umożliwia zbiorcze potwierdzenie wielu ramek w ramach agregacji A-MPDU. Połączenie FEC i ARQ w Wi-Fi pozwala na utrzymanie akceptowalnego poziomu błędów nawet w trudnych warunkach radiowych, przy jednoczesnym zachowaniu wysokiej przepustowości sieci.

42/47 Łącza satelitarne i pamięci masowe

Zastosowania specjalistyczne

Łącza satelitarne:

  • Bardzo duże opóźnienia (250–600 ms dla satelitów geostacjonarnych) – ARQ niepraktyczne
  • Stosuje się silne FEC: kody Reeda-Solomona + kodowanie splotowe (kaskadowe) lub LDPC (DVB-S2)
  • Stopień kodowania: od 1/2 do 7/8 w zależności od warunków
  • Standardy: CCSDS (kosmos), DVB-S2 (telewizja satelitarna), Inmarsat

Pamięci masowe:

  • RAID (Redundant Array of Independent Disks) – bity parzystości + kody korekcyjne
  • ECC w pamięciach RAM – kody Hamminga SECDED (Single Error Correct, Double Error Detect)
  • SSD – kody LDPC lub BCH do korekcji błędów odczytu/zapisu komórek NAND
Ilustracja: Zastosowania – satelita (FEC) vs RAID (parzystość) vs SSD (LDPC)

Łącza satelitarne i pamięci masowe reprezentują dwa skrajne przypadki zastosowań kontroli błędów, w których standardowe metody sieciowe zawodzą. W łączach satelitarnych dominującym problemem jest bardzo duże opóźnienie propagacyjne, wynoszące dla satelitów geostacjonarnych od 250 do 600 milisekund. W takich warunkach ARQ jest praktycznie bezużyteczne, ponieważ każda retransmisja oznaczałaby dodatkowe opóźnienie rzędu pół sekundy, co jest nieakceptowalne dla większości aplikacji.

Z tego powodu łącza satelitarne polegają wyłącznie na silnych kodach FEC, takich jak kody Reeda-Solomona w standardzie CCSDS czy kody LDPC w DVB-S2, z możliwością adaptacyjnego doboru stopnia kodowania. W przypadku pamięci masowych wyzwaniem jest ochrona przed długoterminową degradacją nośnika, a nie opóźnieniem transmisji. Dysk twardy w macierzy RAID może wykorzystywać bity parzystości do odtworzenia danych po awarii jednego dysku, podczas gdy nowoczesne SSD stosują zaawansowane kody LDPC lub BCH do korekcji błędów odczytu komórek NAND.

43/47 Przykład: CRC-32 w pakiecie Ethernet

Obliczanie CRC-32 dla ramki Ethernet

Pole FCS (Frame Check Sequence) – 4 bajty (32 bity) na końcu ramki Ethernet. Obliczane dzieleniem wielomianowym przez 0x04C11DB7. Odbiorca wykonuje to samo dzielenie – reszta = 0 oznacza poprawną ramkę.

Proces obliczania CRC-32:

  • Dane (cała ramka bez FCS) są traktowane jako wielomian
  • Do danych dopisuje się 32 zera
  • Wykonuje się dzielenie modulo 2 przez wielomian generatora 0x04C11DB7
  • Reszta (32 bity) jest dołączana jako FCS
  • Po stronie odbiorcy: dzielenie całej ramki z FCS przez ten sam wielomian → reszta = 0

Wykrywa 100% błędów ≤ 32 bity, wszystkie błędy nieparzystej liczby bitów.

Ilustracja: Obliczanie CRC-32 krok po kroku – dzielenie wielomianowe w GF(2)

Przykład obliczania CRC-32 dla ramki Ethernet ilustruje praktyczne zastosowanie dzielenia wielomianowego w ciele Galois GF(2). Proces rozpoczyna się od potraktowania całej ramki (bez pola FCS) jako wielomianu binarnego, do którego dopisuje się 32 zera odpowiadające długości sumy kontrolnej. Następnie wykonuje się dzielenie modulo 2 przez wielomian generatora 0x04C11DB7, a otrzymana reszta stanowi 32-bitowe pole FCS dołączane na końcu ramki.

Po stronie odbiorcy proces jest identyczny: odebrana ramka wraz z polem FCS jest dzielona przez ten sam wielomian generatora. Jeśli reszta z dzielenia wynosi zero, oznacza to, że dane nie uległy uszkodzeniu podczas transmisji. W przeciwnym razie ramka jest odrzucana, a wyższe warstwy protokołu muszą zainicjować retransmisję. Warto zauważyć, że implementacje sprzętowe CRC-32 w kartach sieciowych Ethernet wykonują to dzielenie w czasie rzeczywistym, bit po bicie, podczas odbierania ramki, bez konieczności jej buforowania.

44/47 Przykład: porównanie skuteczności metod

Bit parzystości vs CRC-32 vs SHA-256

Bit parzystości: nie wykrywa błędów w parzystej liczbie bitów. Dla burst errors skuteczność detekcji ~50% (bo połowa błędów pakietowych ma parzystą długość). Narzut: 1 bit na jednostkę.

CRC-32: wykrywa 100% błędów do 32 bitów, >99,99999998% błędów powyżej 32 bitów. Narzut: 32 bity na ramkę (0,27% dla 1500 B). Stosowany w Ethernet, gdzie średnia długość ramki to ~1500 B.

SHA-256: praktycznie 100% detekcji każdej zmiany danych. Narzut: 256 bitów (2,13% dla 1500 B). Wymaga znacznie większej mocy obliczeniowej niż CRC-32.

Wniosek: CRC-32 zapewnia najlepszy kompromis między skutecznością (99,99999998%) a narzutem (0,27%) dla typowych zastosowań sieciowych.
Ilustracja: Wykres porównawczy – narzut vs skuteczność dla 1500 B pakietu

Porównanie skuteczności bit parzystości, CRC-32 i SHA-256 dla konkretnego przykładu pakietu o rozmiarze 1500 bajtów ilustruje fundamentalny kompromis między poziomem ochrony a narzutem. Bit parzystości, oferujący znikomy narzut 0,008%, jest praktycznie bezużyteczny w przypadku błędów pakietowych, ponieważ jego skuteczność wynosi zaledwie 50%. CRC-32, z narzutem 0,27%, zapewnia wykrywalność błędów na poziomie 99,99999998%, co jest w pełni akceptowalne dla większości zastosowań sieciowych.

SHA-256 oferuje praktycznie 100% wykrywalność wszelkich zmian, ale kosztem narzutu 2,13% oraz znacznie wyższego zużycia energii i mocy obliczeniowej. Dla typowych zastosowań sieciowych CRC-32 stanowi optymalny wybór, zapewniając doskonałą ochronę przy minimalnym wpływie na wydajność. W systemach wymagających ochrony kryptograficznej, takich jak TLS czy IPsec, konieczne jest zastosowanie SHA-256, mimo wyższego kosztu obliczeniowego i transmisyjnego.

45/47 Podsumowanie

Najważniejsze wnioski

  • Błędy transmisji są nieuniknione – szum termiczny, EMI, interferencje i przesłuchy zawsze będą zakłócać sygnał w kanale komunikacyjnym
  • Bit parzystości – prosty, tani, ale mało skuteczny (wykrywa tylko nieparzystą liczbę błędów)
  • CRC – zapewnia doskonały kompromis między skutecznością wykrywania błędów a narzutem obliczeniowym i transmisyjnym
  • FEC – umożliwia korekcję błędów bez retransmisji, niezbędny w systemach o dużym opóźnieniu i transmisji strumieniowej
  • W praktyce – stosuje się kombinację metod (np. CRC + FEC + ARQ) dla optymalnej niezawodności i wydajności
Zapamiętaj: Dobór metody kontroli błędów to zawsze kompromis między niezawodnością, przepustowością, opóźnieniem i kosztem implementacji.
Ilustracja: Mapa myśli – podsumowanie wszystkich omówionych metod kontroli błędów

Podsumowując całość materiału dotyczącego kontroli błędów w transmisji danych, należy podkreślić, że błędy transmisji są zjawiskiem nieuniknionym w każdym rzeczywistym systemie telekomunikacyjnym. Kluczowym zadaniem inżyniera jest dobór odpowiednich mechanizmów wykrywania i korekcji błędów, które zapewnią wymagany poziom niezawodności przy akceptowalnym koszcie obliczeniowym i transmisyjnym. Żadna pojedyncza metoda nie jest uniwersalna, dlatego w praktyce stosuje się kombinację różnych technik na różnych warstwach modelu komunikacyjnego.

Przyszłość kontroli błędów wiąże się z rozwojem zaawansowanych kodów FEC, takich jak kody polarne (polar codes), które zostały wybrane jako standard kodowania kanałowego dla sterowania w 5G NR. Kody polarne, odkryte przez Erdala Arikana w 2009 roku, są pierwszymi kodami korekcyjnymi, które osiągają granicę Shannona przy skończonej długości bloku i mogą być dekodowane z akceptowalną złożonością obliczeniową. Rozwój uczenia maszynowego i sztucznej inteligencji otwiera również nowe możliwości w dziedzinie adaptacyjnego doboru metod kontroli błędów w czasie rzeczywistym.

46/47 Dziękuję za uwagę

Kontrola błędów w transmisji danych

Literatura uzupełniająca:

  • W. Stallings, "Data and Computer Communications", Pearson, 10th ed., 2014
  • A. S. Tanenbaum, "Computer Networks", Pearson, 5th ed., 2011 (tłum. polskie: "Sieci komputerowe", Helion)
  • S. Haykin, "Communication Systems", Wiley, 5th ed., 2009 (tłum. polskie: "Systemy telekomunikacyjne", WKŁ)
  • ITU-T G.707 — kodowanie i kontrola błędów w sieciach SDH/OTN
  • 3GPP TS 38.212 — kodowanie kanałowe w 5G NR (kody polarne i LDPC)

„Kontrola błędów to nie luksus – to konieczność w niezawodnej transmisji danych.”

Ilustracja: Grafika końcowa – podziękowanie za uwagę

Pytania do dyskusji zawarte na ostatnim slajdzie mają na celu sprawdzenie zrozumienia kluczowych koncepcji związanych z kontrolą błędów. Pytanie o bit parzystości i jego nieskuteczność wobec parzystej liczby błędów wymaga zrozumienia, że bit parzystości zależy wyłącznie od parzystości liczby jedynek, a zmiana dwóch bitów nie zmienia tej parzystości. Obliczenie narzutu CRC-32 dla pakietu TCP uczy praktycznego szacowania wpływu mechanizmów kontroli błędów na przepustowość.

Pytanie o wybór FEC zamiast ARQ w łączach satelitarnych wymaga zrozumienia wpływu opóźnienia propagacyjnego na efektywność protokołów retransmisyjnych. Analiza kodów korekcyjnych w kodach QR rozwija umiejętność interpretacji parametrów kodów Reeda-Solomona w praktycznych zastosowaniach. Porównanie Go-Back-N i Selective Repeat ARQ pogłębia zrozumienie kompromisu między złożonością implementacji a efektywnością wykorzystania łącza w protokołach kontroli błędów.

47/47 Pytania do dyskusji

Zadania do samodzielnego rozwiązania

  1. Dlaczego bit parzystości nie wykrywa błędów w parzystej liczbie bitów? Podaj przykład transmisji 8-bitowego znaku, w której uszkodzeniu ulegają 2 bity, a bit parzystości nie wykrywa błędu.
  2. Oblicz narzut CRC-32 dla pakietu TCP o rozmiarze 1460 bajtów danych. Jaki procent stanowi suma kontrolna?
  3. Wyjaśnij, dlaczego w łączach satelitarnych stosuje się FEC zamiast wyłącznie ARQ. Jakie parametry łącza determinują ten wybór?
  4. Kody QR wersji 40-L zawierają 1024 bajty danych i 682 bajty korekcji Reed-Solomon. Jaki procent danych stanowi korekcja? Ile maksymalnie bajtów można odzyskać przy uszkodzeniu?
  5. Porównaj Go-Back-N ARQ i Selective Repeat ARQ. W jakich scenariuszach każdy z nich sprawdza się lepiej?
Ilustracja: Grafika – pytania kontrolne i zadania do samodzielnej pracy

Pytania do dyskusji zawarte na ostatnim slajdzie mają na celu sprawdzenie zrozumienia kluczowych koncepcji związanych z kontrolą błędów. Pytanie o bit parzystości i jego nieskuteczność wobec parzystej liczby błędów wymaga zrozumienia, że bit parzystości zależy wyłącznie od parzystości liczby jedynek, a zmiana dwóch bitów nie zmienia tej parzystości. Obliczenie narzutu CRC-32 dla pakietu TCP uczy praktycznego szacowania wpływu mechanizmów kontroli błędów na przepustowość.

Pytanie o wybór FEC zamiast ARQ w łączach satelitarnych wymaga zrozumienia wpływu opóźnienia propagacyjnego na efektywność protokołów retransmisyjnych. Analiza kodów korekcyjnych w kodach QR rozwija umiejętność interpretacji parametrów kodów Reeda-Solomona w praktycznych zastosowaniach. Porównanie Go-Back-N i Selective Repeat ARQ pogłębia zrozumienie kompromisu między złożonością implementacji a efektywnością wykorzystania łącza w protokołach kontroli błędów.