To urody algorytmu sumy kontrolnej: sprawdzenie sposób można produkować sumę kontrolną i droga jest jakoś symetryczny!
- O kontrolna
kontrolna jest zazwyczaj używany do weryfikacji integralności danych, szczególnie w hałaśliwym/niewiarygodny kanału komunikacyjnego. Dlatego jest używany głównie do wykrywania błędów . To znaczy, aby wiedzieć, czy otrzymane dane są poprawne czy nie czy nie.
Jest to zupełnie inna sytuacja, na przykład z korektą błędu. Ponieważ jego użycie jest nie tylko w celu sprawdzenia, czy nie ma błędów, ale także do ich poprawiania, zazwyczaj dane z korekcją błędów napowietrznych rośnie w rozmiarze raczej proporcjonalnie z oryginalnych danych (ponieważ Im więcej danych, tym bardziej narzut, aby go przywrócić).
Zatem w tym sensie algorytm sumy kontrolnej dobry jest zazwyczaj taka, która użyć najmniejszy ilości danych napowietrznych do wykryć błąd ale z wielką solidności wobec fałszywego rezultatu.
A z tym zrozumieniu problemu leży, ponieważ solidność kontrolnej naprawdę, zależy nie tylko od algorytmu, ale również zależy od kanałowych cechach. Niektóre kanały mogą być podatne na pewien rodzaj błędu, podczas gdy inne kanały inne. Ogólnie rzecz biorąc, istnieją pewne sumy kontrolne, które są znane jako bardziej niezawodne i bardziej popularne niż inne (jednym z moich ulubionych jest CRC - Cykliczna kontrola nadmiarowa). Ale nie ma idealnej sumy kontrolnej dla każdego scenariusza, to naprawdę zależy od zastosowania i scenariusza.
Ale nadal można mierzyć robustness algorytmu sumy kontrolnej. Jest matematyczny sposób, aby to zrobić, co moim zdaniem wykracza poza zakres tej dyskusji.W związku z tym niektóre sumy kontrolne w tych znaczeniach można uznać za słabsze od pozostałych. Sumy kontrolne, które pokazałeś w swoim pytaniu, są również słabe.
- o kodzie
XOR 0xff 8-bitowych jest całkowicie równoważna z binarnym odwrócenie wartości i nie jest zbyt trudno zobaczyć .
XOR z 0xFF
1110 0010
1111 1111
--------- XOR
0001 1101 //notice that this is exactly the same as binary inverting!
Tak więc, gdy robisz XOR z 0xFF i ~checksum
, można uzyskać ten sam rezultat -71 (a ponieważ twój typ danych jest char
, ma wartość ujemną). Następnie zwiększasz go o 1, dzięki czemu otrzymujesz -70.
- O 2' Uzupełnienie
uzupełnienie dwójkowe jest matematycznym operacji na liczbach binarnych, jak również binarny podpisany liczba reprezentacja na podstawie tej operacji. Jego szerokie zastosowanie w komputerach sprawia, że jest to najważniejszy przykład dopełnienia radix. (wikipedia)
Innymi słowy, 2' uzupełnieniem jest znalezienie negatywny reprezentację wartości (w Computer binarny), a jego metoda jest, jak słusznie zrobił, przez odwrócenie wszystkich bitów, a następnie dodasz do to. Dlatego otrzymujesz -70 od 2 'uzupełnienia 70. Ale to oznacza, że nie oznacza, że 2 'dopełnienie i XOR przez 0xFF to to samo, a jak widać na przykładzie, to naprawdę nie jest to samo.
Co XOR przez 0xFF w 8-bitowych danych jest po prostu równoważne odwróceniu wszystkich bitów. Nie dodaje do niej.
- o sposobie czytania dodać/odczytu sumy kontrolnej
Ponieważ suma kontrolna służy znać integralności danych (czy jest on zmieniony lub nie), ludzie próbują znaleźć najlepszą praktykę, aby to zrobić. To, co robisz, to uzyskać sumę kontrolną przez 2 'uzupełnienie lub przez XOR z 0xFF.
A to, co robią:
- Dla 2' uzupełniać kontrolną. Powiedzmy, że twoja długość wiadomości to N. Od tego, co otrzymujesz przez sumowanie liczb N, powiedzmy 70. Następnie dodając sumę kontrolną 2'complement (czyli -70), Po stronie odbiorcy, po prostu musisz zsumować wszystkie wiadomości N + 1 łącznie z sumą kontrolną i powinieneś otrzymać 0, jeśli komunikat jest niezmieniony. W ten sposób poprawnie używa się sumy kontrolnej uzupełnienia 2 '.
- Dla XOR z 0xFF Powtórz, z tym samym przykładem co poprzedni, powinieneś otrzymać -1, jeśli podsumujesz wszystkie wiadomości N + 1, łącznie z sumą kontrolną.A ponieważ reprezentacja hex -1 0xFF jest w 8-bitowe podpisane, więc przez XOR ing wynik (-1) z 0xFF, należy uzyskać 0xFF^0xFF = 0 jeśli wiadomość nie zawiera błędu
Dlatego w obu przypadkach wystarczy sprawdzić, czy komunikat zawiera błąd, czy nie, sprawdzając, czy wynik końcowy wynosi 0 (brak błędu), czy też nie! Jest to zazwyczaj prawda dla algorytmów sum kontrolnych!
To urody algorytmu sumy kontrolnej: sprawdzenie sposób można produkować sumę kontrolną i droga jest jakoś symetryczny!
To jest bardzo kiepska suma kontrolna. Dwa losowe pliki będą miały taką samą sumę kontrolną z prawdopodobieństwem 1/256. Jest to raczej bezużyteczne w przypadku zastosowań praktycznych. –
@ n.m. Dziękuje za komentarz. Czy możesz dodać odpowiedź i wyjaśnić mi sumę kontrolną? – highlander141
Rozważ sytuację, nadawca wyśle na przykład plik z sumą kontrolną do każdego. Podczas wysyłania pojawi się błąd, więc jeden bit zostanie zmieniony. Odbiorca otrzyma uszkodzony plik, więc obliczy sumę kontrolną z tym samym algorytmem co nadawca i porówna sumę kontrolną odbiornika. Będzie inaczej, więc będzie wiedział, że ta wiadomość jest uszkodzona, więc odbiorca może poprosić nadawcę o ponowne przesłanie pliku. – maskacovnik