På-linje CRC beregning og gratis bibliotek –

posted in: Articles | 0
  • Innledning på CRC beregninger
  • Gratis CRC beregning rutiner for å laste ned
Laster…

Innledning på CRC beregninger

Når digitale data som er lagret eller grensesnitt, data korrupsjon kan oppstå. Siden begynnelsen av computer science, folk har vært å tenke på måter å håndtere denne typen problem., For serielle data de kom opp med løsningen for å feste en bit paritet sendt til hver byte. Dette enkle deteksjon mekanismen fungerer hvis det er et odde antall bits i en byte endringer, men en enda antallet falske biter i en byte vil ikke bli oppdaget av paritet sjekk. For å overvinne dette problemet folk har søkt på for matematiske lyd mekanismer for å oppdage flere falske biter. Den CRC beregning eller syklisk redundans sjekk var et resultat av dette. I dag CRC beregningene brukes i alle typer kommunikasjon. Alle pakker som sendes over et nettverk tilkobling, er merket med en CRC., Også hver data blokk på din hard-disk har en CRC-verdien er knyttet til det. Moderne datamaskinen verden ikke kan gjøre uten disse CRC beregning. Så la oss se hvorfor de er så mye brukt. Svaret er enkelt, de er kraftige, oppdage mange typer av feil og er ekstremt rask til å beregne spesielt når dedikert maskinvare chips brukes.

Man kanskje kunne tro, at ved hjelp av en sjekksum kan erstatte riktig CRC beregninger. Det er sikkert lettere å beregne en sjekksum, men sjekksummer ikke finner alle feil. La oss ta et eksempel streng og beregne en byte kontrollsum., Eksempel string er «Lammert» som konverterer til ASCII-verdier . En byte kontrollsum av denne tabellen kan beregnes ved å legge til alle verdier, enn å dele det med 256-og resten. Den resulterende kontrollsum er 210. Du kan bruke kalkulator over for å sjekke at dette resultatet.

I dette eksempelet har vi brukt en byte lang kontrollsum som gir oss 256 forskjellige verdier. Ved hjelp av en to-byte-kontrollsum vil resultere i 65,536 mulig forskjellige kontrollsum verdier og når en fire byte brukes verdien for det er mer enn fire milliarder mulige verdier., Vi kan konkludere med at med en fire byte-kontrollsum er sjansen for at vi tilfeldigvis ikke oppdage en feil er mindre enn 1 til 4 milliarder kroner. Virker ganske bra, men dette er bare teori. I praksis, biter ikke endre rent tilfeldig under kommunikasjon. De mislykkes ofte i serier, eller på grunn av elektrisk pigger. La oss anta at i vårt eksempel array den laveste betydelig bit av bokstaven » L » er satt, og den laveste betydelig bit av tegnet ‘a’ er tapt under kommunikasjon. Mottakeren vil enn å se matrisen representerer strengen «M’mmert»., Kontrollsummen for denne nye strengen er fortsatt 210, men resultatet er åpenbart galt, bare etter to biter endret. Selv om vi hadde brukt en fire byte lang kontrollsum vi ikke ville ha oppdaget denne overføringen feil. Så beregne en sjekksum kan være en enkel metode for å oppdage feil, men ikke gi mye mer beskyttelse enn paritet bit, uavhengig av lengde kontrollsum.

ideen bak en sjekk verdi beregningen er enkel. Bruk en funksjon F(bval,cval) som innganger en data byte og en sjekk verdi-og utganger med en beregnet sjekk verdi., Faktisk kontrollsum beregninger som er beskrevet ovenfor kan defineres på denne måten. Våre en byte-kontrollsum for eksempel kunne ha blitt beregnet med følgende funksjon (i C-språk) som vi kaller gjentatte ganger for hver byte i input strengen. Den første verdien for cval er 0.

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

ideen bak CRC beregning, er å se på data som en stor binære tall. Dette nummeret er delt av en viss verdi, og resten av beregningen er kalt CRC., Dele i CRC beregning ved første ser ut til å koste mye datakraft, men det kan gjøres veldig raskt hvis vi bruker en metode som ligner på det man lærte på skolen. Vi vil som et eksempel beregne resten for tegnet ‘m’—som er 1101101 i binære notasjon—ved å dele det med 19 eller 10011. Vær oppmerksom på at 19 er et oddetall. Dette er nødvendig som vi vil se videre på. Vennligst referer til din schoolbooks som binære beregningsmetode her er ikke veldig forskjellig fra den desimal metode du lærte da du var ung. Det kan bare ser litt rart., Også merknader varierer mellom land, men metoden er lik.

 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

Med desimal beregninger du kan raskt kontrollere at 109 delt av 19 gir en kvotienten av 5 med 14 som resten. Men det vi også ser i ordningen er at hver bit ekstra for å sjekke bare koster en binær sammenligning og i 50% av tilfellene en binær subtraksjon., Du kan enkelt øke antall biter av test data string—for eksempel til 56 bits hvis vi bruker vårt eksempel verdien «Lammert»og resultatet kan beregnes med 56 binære sammenligninger og et gjennomsnitt på 28 binære subtractions. Dette kan implementeres i maskinvare direkte med bare svært få transistorer som er involvert. Også programvare algoritmer kan være svært effektive.

For CRC beregning, ingen normal subtraksjon er brukt, men alle beregninger er gjort modulo 2. I den situasjonen du ignorere bære ting og som trer i kraft subtraksjon vil være lik en eksklusiv eller drift., Dette ser rart ut, den resulterende resten har en annen verdi, men fra et algebraisk synspunkt funksjonaliteten er lik. En diskusjon av dette ville trenge universitetsnivå kunnskap om algebraiske feltet teori, og jeg tror de fleste leserne er ikke interessert i dette. Vennligst se på slutten av dette dokumentet for bøker som diskuterer dette i detalj.

Nå har vi en CRC beregning metode som er gjennomførbar i både maskinvare og programvare, og har også en mer tilfeldig følelse enn å beregne en vanlig kontrollsum. Men hvordan vil det utføre i praksis når en eller flere biter er galt?, Hvis vi velger divisor—19 i vårt eksempel—å være et oddetall, du trenger ikke high-nivå matematikk for å se at hver eneste bit feil bli oppdaget. Dette er fordi hver eneste bit-feil vil la utbytte endring med en effekt på 2. Hvis du for eksempel bit n endres fra 0 til 1, verdien av det utbyttet vil øke med 2n. Hvis på den annen side bit n endres fra 1 til 0, verdien av det utbyttet reduseres med 2n. Fordi du ikke kan dele hvilken som helst makt i to av et odde antall, resten av CRC beregning vil endre, og feilen ikke vil gå ubemerket hen.,

Den andre situasjonen vi ønsker å finne er når to enkle biter endring i data. Dette krever litt matematikk som kan leses i Tanenbaum bok som er nevnt nedenfor. Du må velge din talet svært nøye for å være sikker på at uavhengig av avstanden mellom de to feil biter du vil alltid oppdage dem. Det er kjent, at den ofte brukte verdier 0x8005 og 0x1021 av CRC16 og CRC-CCITT beregninger utføre svært god på dette problemet., Vær oppmerksom på at andre verdier kanskje eller kanskje ikke, og du kan enkelt beregne som divisor verdi er egnet til å oppdage to litt feil og hvilke som ikke er det. Stole på den omfattende matematisk forskning på dette problemet gjort noen tiår siden av dyktige matematikere og bruke de verdiene som disse menneskene innhentet.

Videre med våre CRC beregning ønsker vi å oppdage alle feil der et odde antall bit endringer. Dette kan oppnås ved hjelp av en divisor med et likt antall bits-sett. Ved hjelp av modulo 2 matematikk kan du vise at alle feil med et odde antall biter som er oppdaget., Som jeg har sagt før, i modulo 2 matematikk subtraksjon funksjonen er erstattet med lite eller. Det er fire mulige XOR operasjoner.

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

Vi ser at for alle kombinasjoner av bits verdier, oddness av uttrykket forblir den samme. Når du velger en divisor med et likt antall bits satt, oddness av resten er lik oddness av utbytte. Derfor, hvis oddness av utbytte endringer fordi et odde antall bits endringer, resten vil også endre seg., Så alle feil som endrer et odde antall bits som vil bli oppdaget av en CRC beregning, som er utført med en slik talet. Du har kanskje sett at de brukte talet verdier 0x8005 og 0x1021 faktisk har et odde antall biter, og ikke engang som er oppgitt her. Dette er fordi innsiden algoritmen det er en «skjult» litt ekstra 216 noe som gjør den faktiske brukes talet verdi 0x18005 og 0x11021 inne i algoritmen.,

Sist men ikke minst ønsker vi å registrere alle burst feil med vår CRC beregning med en maksimal lengde for å bli oppdaget, og alle lenger burst feil å bli oppdaget med en høy sannsynlighet. En burst feil er ganske vanlig i kommunikasjon. Det er den type feil som oppstår på grunn av lyn, relé bytte, etc. der i løpet av en liten periode alle biter er satt til ett., For å virkelig forstå dette trenger du også å ha noen kunnskap om modulo 2 algebra, så kan du akseptere at med en 16-bit divisor du vil være i stand til å oppdage alle pakker med en maksimal lengde på 16 biter, og alle lengre innslag med minst 99.997% sikkerhet.

I en ren matematisk tilnærming, CRC beregning er skrevet ned som polynom beregninger. Den talet verdi er som oftest ikke beskrevet som et binært tall, men et polynom av bestemt rekkefølge. I normalt liv noen polynomer er brukt oftere enn andre., De tre som brukes i on-line CRC beregning på denne siden er 16-biters bredt CRC16 og CRC-CCITT og 32-bits bredt CRC32. Det siste er trolig mest brukt nå, fordi blant andre er det CRC generator for all nettverkstrafikk, verifikasjon og validering.

For alle tre typer av CRC beregninger jeg har en gratis programvare biblioteket tilgjengelig. Test programmet kan brukes direkte til å teste filer eller strenger. Du kan også se på kildekoder og integrere disse CRC rutiner i ditt eget program., Vennligst vær klar over initialisering verdier av CRC beregning, og mulig er nødvendig for post-prosessering som å bla biter. Hvis du ikke gjør dette vil du kanskje få forskjellige resultater enn andre CRC-implementeringer. Alt dette pre-og post-prosessering er gjort i eksempelet program så det bør ikke være for vanskelig å lage din egen implementering arbeider. En vanlig brukt testen er å beregne CRC-verdien for ASCII-streng «123456789»., Hvis utfallet av din rutine samsvarer med resultatet av testen program eller utfallet på dette nettstedet, implementeringen er i arbeid og er kompatible med de fleste andre implementeringer.

Akkurat som en referanse polynom funksjoner for de mest vanlige CRC beregninger. Husk at den høyeste for perioden polynom (x16 eller x32) er ikke til stede i det binære tall, representasjon, men indirekte av algoritmen i seg selv.,

Litteratur
2002 Datamaskin-Nettverk, som beskriver felles nettverk systemer og teori og algoritmer bak gjennomføringen. Andrew S. Tanenbaum
ulike The Art of Computer Programming-er den viktigste referansen for semi-numeriske algoritmer. Polynomisk beregninger er beskrevet i dybden. Noen nivå i matematikk som er nødvendig for å fullt ut forstå det selv. Donald E. Knuth
DNP 3.,0, eller distribuert nettverk protokoll er en kommunikasjonsprotokoll som er utformet for bruk mellom transformatorstasjon datamaskiner, RTUs remote terminal units, Ieder intelligente elektroniske enheter og master-stasjoner for elektrisk verktøy i bransjen. Det er nå også brukes i kjente bransjer som behandling av spillvann, transport og olje-og gassindustrien. DNP User Group

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *