On-line CRC calcul și acces gratuit la bibliotecă

posted in: Articles | 0
  • Introducere pe CRC, calcule
  • Gratuit CRC rutine de calcul pentru descărcare
Loading…

Introducere pe CRC, calcule

ori de câte ori datele digitale sunt stocate sau conectata, datele de corupție ar putea să apară. De la începutul informaticii, oamenii s-au gândit la modalități de a face față acestui tip de problemă., Pentru datele seriale au venit cu soluția de a atașa un bit de paritate la fiecare octet trimis. Acest mecanism simplu de detectare funcționează dacă se modifică un număr impar de biți dintr-un octet, dar un număr par de biți falși dintr-un octet nu va fi detectat prin verificarea parității. Pentru a depăși această problemă, oamenii au căutat mecanisme matematice de sunet pentru a detecta mai multe biți false. Rezultatul a fost calculul CRC sau verificarea redundanței ciclice. În prezent, calculele CRC sunt utilizate în toate tipurile de comunicații. Toate pachetele trimise printr-o conexiune de rețea sunt verificate cu un CRC., De asemenea, fiecare bloc de date de pe hard disk are o valoare CRC atașată la acesta. Lumea computerelor moderne nu se poate descurca fără aceste calcule CRC. Deci, să vedem de ce sunt atât de utilizate pe scară largă. Răspunsul este simplu, sunt puternice, detectează multe tipuri de erori și sunt extrem de rapide pentru a calcula mai ales atunci când sunt utilizate cipuri hardware dedicate.s-ar putea crede că utilizarea unei sume de control poate înlocui calculele CRC corespunzătoare. Cu siguranță este mai ușor să calculați o sumă de control, dar sumele de control nu găsesc toate erorile. Să luăm un șir de exemplu și să calculăm o sumă de control de un octet., Șirul de exemplu este „Lammert” care se convertește la valorile ASCII . Suma de control a unui octet din această matrice poate fi calculată prin adăugarea tuturor valorilor, decât împărțirea acesteia cu 256 și păstrarea restului. Suma de control rezultată este de 210. Puteți utiliza calculatorul de mai sus pentru a verifica acest rezultat.

în acest exemplu am folosit o sumă de control lungă de un octet care ne oferă 256 de valori diferite. Folosind o sumă de control de doi octeți va avea ca rezultat 65,536 posibile valori diferite de control și atunci când se utilizează o valoare de patru octeți există mai mult de patru miliarde de valori posibile., Am putea concluziona că, cu o sumă de control de patru octeți, șansa de a nu detecta accidental o eroare este mai mică de 1 până la 4 miliarde. Pare destul de bine, dar aceasta este doar teorie. În practică, biții nu se schimbă pur aleatoriu în timpul comunicațiilor. Adesea eșuează în explozii sau din cauza vârfurilor electrice. Să presupunem că în tabloul nostru de exemplu este setat cel mai mic bit semnificativ al caracterului „L”, iar cel mai mic bit semnificativ al caracterului ” a ” se pierde în timpul comunicării. Receptorul va vedea decât matrice reprezentând șirul ” M ‘mmert”., Suma de control pentru acest nou șir este încă 210, dar rezultatul este evident greșit, numai după ce doi biți s-au schimbat. Chiar dacă am fi folosit o sumă de control lungă de patru octeți, nu am fi detectat această eroare de transmisie. Așadar, calcularea unei sume de control poate fi o metodă simplă pentru detectarea erorilor, dar nu oferă mult mai multă protecție decât bitul de paritate, independent de lungimea sumei de control.ideea din spatele unui calcul al valorii de verificare este simplă. Utilizați o funcție F (bval, cval) care introduce un octet de date și o valoare de verificare și scoate o valoare de verificare recalculată., De fapt, calculele de control descrise mai sus pot fi definite în acest fel. Exemplul nostru de sumă de control a unui octet ar fi putut fi calculat cu următoarea funcție (în limba C) pe care o apelăm în mod repetat pentru fiecare octet din șirul de intrare. Valoarea inițială pentru cval este 0.

int F_chk_8( int bval, int cval ) { retun ( bval + cval ) % 256;}

ideea Din spatele CRC calcul este să se uite la datele ca un mare număr binar. Acest număr este împărțit la o anumită valoare, iar restul calculului se numește CRC., Împărțirea în calculul CRC la început pare să coste multă putere de calcul, dar poate fi efectuată foarte repede dacă folosim o metodă similară cu cea învățată la școală. Vom calcula, ca exemplu, restul pentru caracterul ” m ” —care este 1101101 în notație binară-împărțind-o cu 19 sau 10011. Vă rugăm să rețineți că 19 este un număr impar. Acest lucru este necesar, după cum vom vedea mai departe. Vă rugăm să consultați manualele dvs. școlare, deoarece metoda de calcul binar aici nu este foarte diferită de metoda zecimală pe care ați învățat-o când erați tineri. S-ar putea arata doar un pic ciudat., De asemenea, notațiile diferă între țări, dar metoda este similară.

 1 0 1 = 5 -------------1 0 0 1 1 / 1 1 0 1 1 0 1 1 0 0 1 1 | | --------- | | 1 0 0 0 0 | 0 0 0 0 0 | --------- | 1 0 0 0 0 1 1 0 0 1 1 --------- 1 1 1 0 = 14 = remainder

Cu zecimale calcule puteți verifica rapid că 109 împărțit de 19 dă un coeficient de 5 cu 14 ca restul. Dar ceea ce vedem și în schemă este că fiecare bit suplimentar pentru a verifica costă doar o comparație binară și în 50% din cazuri o scădere binară., Puteți crește cu ușurință numărul de biți din șirul de date de testare—de exemplu la 56 de biți dacă folosim valoarea noastră de exemplu „Lammert”—iar rezultatul poate fi calculat cu 56 de comparații binare și o medie de 28 de scăderi binare. Acest lucru poate fi implementat în hardware direct cu doar foarte puține tranzistoare implicate. De asemenea, algoritmii software pot fi foarte eficienți.pentru calculele CRC, nu se utilizează o scădere normală, dar toate calculele sunt efectuate modulo 2. În această situație ignorați transporta biți și, de fapt, scăderea va fi egală cu o operațiune exclusivă sau., Acest lucru pare ciudat, restul rezultat are o valoare diferită, dar din punct de vedere algebric funcționalitatea este egală. O discuție despre acest lucru ar avea nevoie de cunoștințe la nivel universitar despre teoria câmpului algebric și cred că majoritatea cititorilor nu sunt interesați de acest lucru. Vă rugăm să consultați sfârșitul acestui document pentru cărți care discută acest lucru în detaliu.acum avem o metodă de calcul CRC care este implementabilă atât în hardware cât și în software și are, de asemenea, un sentiment mai aleatoriu decât calcularea unei sume de control obișnuite. Dar cum va funcționa în practică atunci când un minereu mai mulți biți sunt greșite?, Dacă alegem divizorul-19 în exemplul nostru—să fie un număr impar, nu aveți nevoie de matematică de nivel înalt pentru a vedea că fiecare eroare de biți va fi detectată. Acest lucru se datorează faptului că fiecare eroare de biți va lăsa dividendul să se schimbe cu o putere de 2. Dacă, de exemplu, pic n se modifică de la 0 la 1, valoarea dividendului va crește cu 2n. Dacă, pe de altă parte bit n modificări de la 1 la 0, valoarea dividendului va scădea cu 2n. Pentru că nu poți împărți orice putere de două printr-un număr impar, restul de CRC calcul se va schimba și eroarea nu va trece neobservat.,a doua situație pe care vrem să o detectăm este atunci când doi biți unici se schimbă în date. Acest lucru necesită o anumită matematică care poate fi citită în Cartea lui Tanenbaum menționată mai jos. Trebuie să selectați divizorul foarte atent pentru a vă asigura că, independent de distanța dintre cei doi biți greșiți, îi veți detecta întotdeauna. Este cunoscut, că valorile utilizate în mod obișnuit 0x8005 și 0x1021 de CRC16 și CRC-CCITT efectua calcule foarte bună la această problemă., Vă rugăm să rețineți că alte valori ar putea sau nu ar putea, și nu se poate calcula cu ușurință care divizor valoare este adecvată pentru detectarea două erori de bit și care nu. Se bazează pe o vastă cercetare matematică pe această problemă a făcut câteva decenii în urmă de înaltă calificare, matematicieni și de a folosi valorile acestor oameni obținute.mai mult, cu calculul nostru CRC dorim să detectăm toate erorile în care se schimbă un număr impar de biți. Acest lucru poate fi realizat prin utilizarea unui divizor cu un număr par de biți setat. Folosind modulo 2 mathematics poți arăta că sunt detectate toate erorile cu un număr impar de biți., Așa cum am spus mai înainte, în modulo 2 matematică funcția de scădere este înlocuită de exclusiv sau. Există patru operații XOR posibile.

0 XOR 0 => 0 even => even0 XOR 1 => 1 odd => odd1 XOR 0 => 1 odd => odd1 XOR 1 => 0 even => even

Vom vedea că pentru toate combinațiile de valori, ciudățenie de exprimare rămâne aceeași. Atunci când alegeți un divizor cu un număr par de biți, ciudățenia restului este egală cu ciudățenia dividendului. Prin urmare, dacă ciudățenia dividendului se schimbă deoarece se schimbă un număr impar de biți, restul se va schimba și el., Deci, toate erorile care schimbă un număr impar de biți vor fi detectate printr-un calcul CRC care se efectuează cu un astfel de divizor. S-ar putea să fi văzut că valorile divizorului utilizate în mod obișnuit 0x8005 și 0x1021 au de fapt un număr impar de biți și nici măcar așa cum se menționează aici. Acest lucru este pentru că în interiorul algoritm este un „ascunse” parte în plus, 216, ceea ce face efectiv utilizate divizor valoarea 0x18005 și 0x11021 în algoritm.,nu în ultimul rând, dorim să detectăm toate erorile de spargere cu calculul nostru CRC cu o lungime maximă care trebuie detectată și toate erorile de spargere mai lungi care trebuie detectate cu o probabilitate mare. O eroare de spargere este destul de frecventă în Comunicații. Este tipul de eroare care apare din cauza fulgerului, comutării releului etc. în cazul în care într-o perioadă mică toți biții sunt setați la unul., Pentru a înțelege cu adevărat acest lucru, trebuie să aveți și cunoștințe despre algebra modulo 2, așa că vă rugăm să acceptați că, cu un divizor de biți 16, veți putea detecta toate exploziile cu o lungime maximă de biți 16 și toate exploziile mai lungi cu cel puțin 99.997% certitudine.într-o abordare matematică pură, calculul CRC este scris ca calcule polinomiale. Valoarea divizorului nu este cel mai adesea descrisă ca un număr binar, ci un polinom de o anumită ordine. În viața normală, unele polinoame sunt folosite mai des decât altele., Cele trei utilizate în calculul CRC on-line de pe această pagină sunt CRC16 cu lățimea de 16 biți și CRC-CCITT și CRC32 cu lățimea de 32 de biți. Acesta din urmă este probabil cel mai utilizat acum, deoarece, printre altele, este generatorul CRC pentru toate verificările și validarea traficului de rețea.

pentru toate cele trei tipuri de calcule CRC am o bibliotecă de software liber disponibil. Programul de testare poate fi utilizat direct pentru a testa fișiere sau șiruri de caractere. De asemenea, puteți să vă uitați la codurile sursă și să integrați aceste rutine CRC în propriul program., Vă rugăm să fiți conștienți de valorile de inițializare ale calculului CRC și posibile post-procesare necesare, cum ar fi biți flipping. Dacă nu faceți acest lucru, s-ar putea obține rezultate diferite decât alte implementări CRC. Toate acestea pre și post-procesare se face în programul de exemplu, astfel încât ar trebui să nu fie dificil de a face propria punere în aplicare de lucru. Un test utilizat în mod obișnuit este de a calcula valoarea CRC pentru șirul ASCII „123456789”., Dacă rezultatul rutinei dvs. se potrivește cu rezultatul programului de testare sau cu rezultatul de pe acest site web, implementarea dvs. funcționează și este compatibilă cu majoritatea celorlalte implementări.

la fel ca o referință funcțiile polinomiale pentru cele mai comune calcule CRC. Vă rugăm să rețineți că termenul cel mai înalt ordin al polinomului (x16 sau x32) nu este prezent în reprezentarea numărului binar, ci implicit de algoritmul însuși.,

Literatura
2002 Rețele de calculatoare, descriind comune sisteme de rețea și teoria și algoritmi în spatele lor în aplicare. Andrew S. Tanenbaum
diverse arta programării pe calculator este principala referință pentru algoritmi semi-numerici. Calculele polinomiale sunt descrise în profunzime. Un anumit nivel de matematică este necesar pentru ao înțelege pe deplin. Donald E. Knuth
DNP 3.,0, sau Protocol de rețea distribuită este un protocol de comunicare conceput pentru a fi utilizat între computerele de substație, unitățile terminale la distanță RTU, dispozitivele electronice inteligente IEDs și stațiile principale pentru industria utilităților electrice. Acum este, de asemenea, utilizat în industrii familiare, cum ar fi tratarea apelor uzate, transport și industria de petrol și gaze. DNP Grup de utilizatori

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *