BSS Integralno Zygmunt Kubiak Instytut Informatyki Politechnika Poznaska
BSS Integralność Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
BSS - Integralność Proces transmisji może w prowadzać błędy do przesyłanych wiadomości – błędy pojedyncze lub grupowe Detekcja: Wymaga uznania, że niektóre wiadomości są nieważne Wymaga dodatkowych bitów (nadmiarowość) Kod (n, k) zawiera słowa kodowe n-bitowe z k-bitami danych i r=(n-k) bitami nadmiarowymi Korekcja błędów: wiele słów kodowych jest zmapowanych do tego samego słowa danych Detekcja i retransmisja 01 -2014 Zygmunt Kubiak 2
BSS - Integralność Odległość Hamminga dwóch słów bitowych = liczba pozycji na których różnią się te słowa Jeśli słowa kodowe mają minimalną odległość Hamminga D, wtedy można wykryć D-1 błędów bitowych Jeśli dostępne słowa kodowe mają minimalną odległość Hamminga D, wtedy można skorygować [(D-1)/2] błędów bitowych 01 -2014 1 0 1 1 0 Zygmunt Kubiak HD=2 3
BSS - Integralność Kod 01 -2014 Zygmunt Kubiak 4
BSS - Integralność Błąd detekcji 01 -2014 Zygmunt Kubiak 5
BSS - Integralność Błąd niewykryty 01 -2014 Zygmunt Kubiak 6
BSS - Integralność Detekcja błędów 01 -2014 Zygmunt Kubiak 7
BSS - Integralność Korekcja błędów 01 -2014 Zygmunt Kubiak 8
BSS - Integralność Parzystość 1 -bit zabezpieczenia - detekcja Każde słowo kodowe zawiera parzystą liczbę jedynek Dostępne słowa danych 01 11 Kodowanie parzystości: 00 10 Biały – błąd 011 010 001 01 -2014 Zygmunt Kubiak 111 110 101 9
BSS - Integralność Głosowanie 1 -bitowa korekcja z głosowaniem Każde słowo jest n-razy powtarzane Dostępne słowa danych 0 1 Głosowanie: 011 010 111 110 Biały – korekcja na 1 Niebieski – korekcja na 0 01 -2014 000 001 100 101 Zygmunt Kubiak 10
BSS - Integralność Przykłady Parzystość Dostępne słowa 01 11 Kodowanie parzystości: 00 10 Biały – błąd 011 010 001 110 101 Głosowanie Dostępne słowa 011 010 Głosowanie: 0 111 110 Biały – korekcja na 1 1 Niebieski – korekcja na 0 001 01 -2014 Zygmunt Kubiak 100 101 11
BSS - Integralność Techniki cyfrowej detekcji błędów Dwuwymiarowa parzystość Wykrywa do 3 błędnych bitów Dobre rozwiązanie dla paczek błędów Słowo kontrolne IP Proste dodawanie Prosta realizacja programowa Słowo kontrolne CRC Skuteczne rozwiązanie matematyczne (Galois Fields) Uproszczenia w realizacji programowej Proste w realizacji sprzętowej Powszechnie stosowane w protokołach transmisji 01 -2014 Zygmunt Kubiak 12
BSS - Integralność Parzystość dwuwymiarowa Parzystość bitów Dane Bajt Parzystości 0101001 1 1101001 0 1011110 1 0001110 1 0110100 1 1011111 0 1111011 0 Wykorzystana parzystość 1 wymiarowa Dodany drugi wymiar Dodano dodatkowy bajt Komentarz Wykrywa wszystkie błędy 1 -, 2 - i 3 bitów oraz dużo błędów 4 -bitowych 01 -2014 Zygmunt Kubiak 13
BSS - Integralność Słowo kontrolne IP Idea Dodać wszystkie słowa Wysłać wszystkie słowa Słowo kontrolne IP Wykorzystanie uzupełnienia 1 -kowego dla 16 -bitowych słów kodowych Przykład Słowo kodowane: 5 Postać binarna 0101 Suma komplementarna 3 0011 0111 =8 = 1000 Prosta implementacja 01 -2014 Zygmunt Kubiak 14
BSS - Integralność Słowo kontrolne IP u_short cksum(u_short *buf, int count) { register u_long sum = 0; while (count--) { sum += *buf++; if (sum & 0 x. FFFF 0000) // gdy przeniesienie to je usunąć { sum &= 0 x. FFFF; sum++; } } return ~(sum & 0 x. FFFF); } 01 -2014 Zygmunt Kubiak 15
BSS - Integralność Modbus – LRC (ang. Longitudinal Redundancy Check) Krok 1 - dodać wszystkie wymagane bajty Krok 2 - zanegować wynik (uzupełnienie jedynkowe) Krok 3 - dodać 1 (uzupełnienie dwójkowe) LRC Przykładowy kod Funkcja przedstawia sposób wyznaczenia bajta LRC w języku C BYTE LRC (BYTE *n. Data, WORD w. Length) { BYTE n. LRC = 0 ; // LRC char initialized for (int i = 0; i < w. Length; i++) n. LRC += *n. Data++; return (BYTE)(-n. LRC); } // End: LRC Zygmunt Kubiak 16
BSS - Integralność Modbus – LRC (ang. Longitudinal Redundancy Check) Procedura z dokumentacji Modbus LRC Generation Function static unsigned char LRC(auch. Msg, us. Data. Len) //the function returns the LRC unsigned char *auch. Msg; // message to calculate LRC upon unsigned short us. Data. Len; //quantity of bytes in message { unsigned char uch. LRC = 0; //LRC char initialized while (us. Data. Len––) //pass through message buffer uch. LRC += *auch. Msg++; //add buffer byte without carry return ((unsigned char)(–((char)uch. LRC))); // return twos comple ment } Operacje równoważne a = -b; a = ~b + 1; Zygmunt Kubiak 17
BSS - Integralność Słowo kontrolne CRC (ang. Cyclic Redundancy Check) Cel Maksymalizacja zabezpieczenia, minimalizacja ekstra bitów Idea Dodanie k bitów nadmiarowych do n-bitowej wiadomości N-bitowy komunikat może być przedstawiony jako n-bitowy wielomian, w którym każdy bit odpowiada współczynnikowi wielomianu Przykład Wiadomość = 10011010 Wielomian = 1 x 7 0 x 6 0 x 5 1 x 4 1 x 3 0 x 2 1 x 0 = x 7 x 4 x 3 x 01 -2014 Zygmunt Kubiak 18
BSS - Integralność Słowo kontrolne CRC (ang. Cyclic Redundancy Check) Przykład kodowania G(x) = M(x) = x 3 x 2 1 x 7 x 4 x 3 x 1101 10011010000 1101 = 10011010 Generator Komunikat plus k zer 1001 1101 1000 1101 Wynik: Transmisja komunikatu z dodanym nadmiarem: 1011 1100 1101 10011010101 Nadmiar 1000 1101 m mod c 101 01 -2014 Zygmunt Kubiak 19
BSS - Integralność Słowo kontrolne CRC (ang. Cyclic Redundancy Check) Przykład dekodowania – brak błędów G(x) = P(x) = x 3 x 2 1 x 10 x 7 x 6 x 4 x 2 1 1101 = 1101 Generator = 10011010101 Odebrany komunikat bez błędów 10011010101 1001 1101 1000 1101 Wynik: Poprawny test CRC 1011 1100 1101 Nadmiar 1101 m mod c 0 01 -2014 Zygmunt Kubiak 20
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – analog wielomianu G(x) = x 4 x 1 01 -2014 Zygmunt Kubiak 21
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa - kodowanie G(x) = x 4 x 1 01 -2014 Zygmunt Kubiak 22
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – dekodowanie G(x) = x 4 x 1 01 -2014 Zygmunt Kubiak 23
BSS - Integralność CRC (ang. Cyclic Redundancy Check) 01 -2014 Zygmunt Kubiak 24
BSS - Integralność CRC (ang. Cyclic Redundancy Check) G(x) = x 3 x 1 01 -2014 Zygmunt Kubiak 25
BSS - Integralność CRC (ang. Cyclic Redundancy Check) G(x) = x 3 x 1 01 -2014 Zygmunt Kubiak 26
BSS - Integralność CRC (ang. Cyclic Redundancy Check) – dwie realizacje G(x) Realizacja sprzętowa układu dzielącego G(x) = x 3 x 1 Wada – dane przy kodowaniu trzeba uzupełnić o r bitów (same zera) Zmodyfikowana, sprzętowa realizacja układu wyznaczającego CRC dla G(x) = x 3 x 1 01 -2014 Zygmunt Kubiak 27
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – kodowanie – inna realizacja – szybsza operacja kodowania SQ x 3 x 0 x 2 + 1 0 Wejście danych G(x) = x 3 x 2 1 01 -2014 Zygmunt Kubiak 28
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – dekodowanie inna realizacja SQ x 0 x 2 x 3 + 2 + 1 0 Wejście danych 01 -2014 Zygmunt Kubiak 29
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Generator pseudolosowy G(x) = x 4 x 1 01 -2014 Zygmunt Kubiak 30
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Wielomiany generujące CRC C(x) CRC-8 x 8 x 2 x 1 1 (0 x 107 => 0 x 07) CRC-10 x 10 x 9 x 5 x 4 x 1 1 (0 x 633) CRC-12 x 12 x 11 x 3 x 2 x 1 1 (0 x 180 F) CRC-16 x 16 x 15 x 2 1 (0 x 18005 => 0 x 8005) CRC-CCITT x 16 x 12 x 5 1 (0 x 11021 => 0 x 1021) CRC-32 x 32 x 26 x 23 x 22 x 16 x 12 x 11 x 10 x 8 x 7 x 5 x 4 x 2 x 1 1 (0 x 104 C 11 DB 7 => 0 x 04 C 11 DB 7) 01 -2014 Zygmunt Kubiak 31
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykłady Podstawowy algorytm CRC-32 01 -2014 Zygmunt Kubiak 32
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykłady Modyfikacja algorytmu CRC-32 01 -2014 Zygmunt Kubiak 33
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykład - tablicowy algorytm CRC-32 Wygenerowanie tablicy cd 01 -2014 Zygmunt Kubiak 34
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykład - tablicowy algorytm CRC-32 Wyznaczenie CRC-32 z wykorzystaniem tablicy cd 01 -2014 Zygmunt Kubiak 35
BSS - Integralność Modbus – wyznaczanie CRC Algorytm 1. 2. 3. 4. 5. 6. Załadowanie FFFFh do 16 -bitowego rejestru CRC. Pobranie bajta z bloku danych i wykonanie operacji XOR. z młodszym bajtem rejestru CRC (CRCL 0) – wynik do rej. CRC. Przesunięcie zawartości rejestru CRC w prawo o jeden bit (na pozycje MSB zostaje wpisane 0). Sprawdzenie bitu LSB w rejestrze CRC. Jeżeli jego stan jest 0, to następuje powrót do pkt. 3, jeżeli 1, to wykonywana jest operacja XOR rejestru CRC ze stałą A 001 h Powtórzenie operacji 2, 3, 4, 5 dla kolejnego bajta wiadomości. Krok 6 jest wykonywany dla wszystkich bajtów wiadomości. Zawartość rejestru CRC po wykonaniu wszystkich powyższych operacji jest poszukiwaną wartością CRC Uwaga, dla Modbus wielomianem generującym jest G(x) = x 16 + x 15 + x 2 + 1 01 -2014 Zygmunt Kubiak 36
BSS - Integralność Modbus – wyznaczanie CRC LSB == 1 G(x) = x 16 + x 15 + x 2 + 1 01 -2014 Zygmunt Kubiak 37
BSS - Integralność Modbus – wyznaczanie CRC void main() { unsigned char data[NUMDATA+2]; // Bufor wiadomości unsigned char Crc_HByte, Crc_LByte; unsigned int Crc; . . Crc=0 x. FFFF; for (i=0; i<NUMDATA; i++) { Crc = CRC 16 (Crc, data[i] ); } Crc_LByte = (Crc & 0 x 00 FF); // Low byte calculation Crc_HByte = (Crc & 0 x. FF 00) / 256; // High byte calculation } 01 -2014 Zygmunt Kubiak 38
BSS - Integralność Modbus – wyznaczanie CRC // CRC 16 calculation // --------unsigned int CRC 16(unsigned int crc, unsigned int data) { const unsigned int Poly 16=0 x. A 001; unsigned int LSB, i; } crc = ((crc^data) | 0 x. FF 00) & (crc | 0 x 00 FF); for (i=0; i<8; i++) { LSB=(crc & 0 x 0001); crc=crc/2; if (LSB) crc=crc^Poly 16; } return(crc); 01 -2014 Zygmunt Kubiak 39
Dziękuję Zygmunt Kubiak 40 09200 6
- Slides: 40