Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Podobne prezentacje


Prezentacja na temat: "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"— Zapis prezentacji:

1 Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
BSS Integralność Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2 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 Korekcja błędów: wiele słów kodowych jest zmapowanych do tego samego słowa danych Detekcja i retransmisja Zygmunt Kubiak

3 Odległość Hamminga 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 1 HD=2 Zygmunt Kubiak

4 BSS - Integralność Kod Zygmunt Kubiak

5 BSS - Integralność Błąd detekcji Zygmunt Kubiak

6 BSS - Integralność Błąd niewykryty Zygmunt Kubiak

7 BSS - Integralność Detekcja błędów Zygmunt Kubiak

8 BSS - Integralność Korekcja błędów Zygmunt Kubiak

9 Kodowanie parzystości:
BSS - Integralność Parzystość 1-bit zabezpieczenia - detekcja Każde słowo kodowe zawiera parzystą liczbę jedynek 010 110 100 000 011 111 101 001 Kodowanie parzystości: Biały – błąd 01 11 10 00 Dostępne słowa danych Zygmunt Kubiak

10 Niebieski – korekcja na 0
BSS - Integralność Głosowanie 1-bitowa korekcja z głosowaniem Każde słowo jest n-razy powtarzane 1 Dostępne słowa danych 010 110 100 000 011 111 101 001 Głosowanie: Biały – korekcja na 1 Niebieski – korekcja na 0 Zygmunt Kubiak

11 Kodowanie parzystości: Niebieski – korekcja na 0
BSS - Integralność Przykłady Parzystość Głosowanie 010 110 100 000 011 111 101 001 Kodowanie parzystości: Biały – błąd 01 11 10 00 Dostępne słowa 010 110 100 000 011 111 101 001 Głosowanie: Biały – korekcja na 1 Niebieski – korekcja na 0 1 Dostępne słowa Zygmunt Kubiak

12 Techniki cyfrowej detekcji błędów
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 Zygmunt Kubiak

13 Parzystość dwuwymiarowa
BSS - Integralność Parzystość dwuwymiarowa 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 1 Parzystość bitów Bajt Parzystości Dane Zygmunt Kubiak

14 Słowo kontrolne IP BSS - Integralność Idea Słowo kontrolne IP
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 3 = 8 Postać binarna = 1000 Suma komplementarna 0111 Prosta implementacja Zygmunt Kubiak

15 Słowo kontrolne IP BSS - Integralność
u_short cksum(u_short *buf, int count) { register u_long sum = 0; while (count--) sum += *buf++; if (sum & 0xFFFF0000) // gdy przeniesienie to je usunąć sum &= 0xFFFF; sum++; } return ~(sum & 0xFFFF); Zygmunt Kubiak

16 Modbus – LRC (ang. Longitudinal Redundancy Check)
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 *nData, WORD wLength) { BYTE nLRC = 0 ; // LRC char initialized for (int i = 0; i < wLength; i++) nLRC += *nData++; return (BYTE)(-nLRC); } // End: LRC Zygmunt Kubiak

17 Modbus – LRC (ang. Longitudinal Redundancy Check)
BSS - Integralność Modbus – LRC (ang. Longitudinal Redundancy Check) Procedura z dokumentacji Modbus LRC Generation Function static unsigned char LRC(auchMsg, usDataLen) //the function returns the LRC unsigned char *auchMsg; // message to calculate LRC upon unsigned short usDataLen; //quantity of bytes in message { unsigned char uchLRC = 0; //LRC char initialized while (usDataLen––) //pass through message buffer uchLRC += *auchMsg++; //add buffer byte without carry return ((unsigned char)(–((char)uchLRC))); // return twos complement } Operacje równoważne a = -b; a = ~b + 1; Zygmunt Kubiak

18 Słowo kontrolne CRC (ang. Cyclic Redundancy Check)
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ść = Wielomian = 1 x7  0 x6  0 x5  1 x4  1 x3  0 x2  1 x  0 = x7  x4  x3  x Zygmunt Kubiak

19 Przykład kodowania BSS - Integralność
Słowo kontrolne CRC (ang. Cyclic Redundancy Check) Przykład kodowania 1001 1101 1000 1011 1100 101 Nadmiar m mod c Komunikat plus k zer Wynik: Transmisja komunikatu z dodanym nadmiarem: G(x) = x3  x2  1 = Generator M(x) = x7  x4  x3  x = Komunikat 1101 Zygmunt Kubiak

20 Odebrany komunikat bez błędów
BSS - Integralność Słowo kontrolne CRC (ang. Cyclic Redundancy Check) Przykład dekodowania – brak błędów 1001 1101 1000 1011 1100 Nadmiar m mod c Odebrany komunikat bez błędów Wynik: Poprawny test CRC G(x) = x3  x2  1 = Generator P(x) = x10  x7  x6  x4  x2  1 = Odebrany komunikat 1101 Zygmunt Kubiak

21 Realizacja sprzętowa – analog wielomianu G(x)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – analog wielomianu G(x) G(x) = x4  x  1 Zygmunt Kubiak

22 Realizacja sprzętowa - kodowanie
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa - kodowanie G(x) = x4  x  1 Zygmunt Kubiak

23 Realizacja sprzętowa – dekodowanie
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – dekodowanie G(x) = x4  x  1 Zygmunt Kubiak

24 CRC (ang. Cyclic Redundancy Check)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Zygmunt Kubiak

25 CRC (ang. Cyclic Redundancy Check)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) G(x) = x3  x  1 Zygmunt Kubiak

26 CRC (ang. Cyclic Redundancy Check)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Zygmunt Kubiak G(x) = x3  x  1

27 CRC (ang. Cyclic Redundancy Check) – dwie realizacje G(x)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) – dwie realizacje G(x) Realizacja sprzętowa układu dzielącego G(x) = x3  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) = x3  x  1 Zygmunt Kubiak

28 BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – kodowanie – inna realizacja – szybsza operacja kodowania + Wejście danych x3 SQ 2 1 x0 x2 G(x) = x3  x2  1 Zygmunt Kubiak

29 Realizacja sprzętowa – dekodowanie inna realizacja
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Realizacja sprzętowa – dekodowanie inna realizacja + Wejście danych x3 SQ 2 1 x0 x2 Zygmunt Kubiak

30 Generator pseudolosowy
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Generator pseudolosowy G(x) = x4  x  1 Zygmunt Kubiak

31 Wielomiany generujące
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Wielomiany generujące CRC C(x) CRC-8 x8  x2  x1  1 (0x107 => 0x07) CRC-10 x10  x9  x5  x4  x1  1 (0x633) CRC-12 x12  x11  x3  x2  x1  1 (0x180F) CRC-16 x16  x15  x2  1 (0x18005 => 0x8005) CRC-CCITT x16  x12  x5  1 (0x11021 => 0x1021) CRC-32 x32  x26  x23  x22  x16  x12  x11  x10  x8  x7  x5  x4  x2  x1  1 (0x104C11DB7 => 0x04C11DB7) Zygmunt Kubiak

32 Przykłady BSS - Integralność CRC (ang. Cyclic Redundancy Check)
Podstawowy algorytm CRC-32 Zygmunt Kubiak

33 Przykłady BSS - Integralność CRC (ang. Cyclic Redundancy Check)
Modyfikacja algorytmu CRC-32 Zygmunt Kubiak

34 CRC (ang. Cyclic Redundancy Check)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykład - tablicowy algorytm CRC-32 Wygenerowanie tablicy cd Zygmunt Kubiak

35 CRC (ang. Cyclic Redundancy Check)
BSS - Integralność CRC (ang. Cyclic Redundancy Check) Przykład - tablicowy algorytm CRC-32 Wyznaczenie CRC-32 z wykorzystaniem tablicy cd Zygmunt Kubiak

36 BSS - Integralność Algorytm Modbus – wyznaczanie CRC
Załadowanie FFFFh do 16-bitowego rejestru CRC. Pobranie bajta z bloku danych i wykonanie operacji XOR z młodszym bajtem rejestru CRC (CRCL0) – 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łą A001h 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) = x16 + x15 + x2 + 1 Zygmunt Kubiak

37 BSS - Integralność Modbus – wyznaczanie CRC G(x) = x16 + x15 + x2 + 1
LSB == 1 G(x) = x16 + x15 + x2 + 1 Zygmunt Kubiak

38 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=0xFFFF; for (i=0; i<NUMDATA; i++) Crc = CRC16 (Crc, data[i] ); } Crc_LByte = (Crc & 0x00FF); // Low byte calculation Crc_HByte = (Crc & 0xFF00) / 256; // High byte calculation Zygmunt Kubiak

39 BSS - Integralność Modbus – wyznaczanie CRC // CRC16 calculation
// unsigned int CRC16(unsigned int crc, unsigned int data) { const unsigned int Poly16=0xA001; unsigned int LSB, i; crc = ((crc^data) | 0xFF00) & (crc | 0x00FF); for (i=0; i<8; i++) LSB=(crc & 0x0001); crc=crc/2; if (LSB) crc=crc^Poly16; } return(crc); Zygmunt Kubiak

40 Dziękuję Zygmunt Kubiak


Pobierz ppt "Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska"

Podobne prezentacje


Reklamy Google