본문 바로가기

Library/Data Communication

CRC(Cyclic Redundancy Check)

중복 검사 기법 중 가장 강력한 것으로 순환중복검사(CRC, Cyclic redundancy Check)가 있다. CRC는 2진 나눗셈을 기반으로 하는데, 요구되는 패리티를 얻기 위해서 CRC에서는 비트들 대신 CRC 또는 CRC 나머지라 불리는 중복 비트열이 데이터 단위의 끝에 덧붙여진다. 확장된 데이터 단위는 미리 정해진 2진수에 의해 정확히 나누어 떨어지며, 목적지에서는 들어오는 데이터 단위를 같은 수로 나누어본다. 이 단계에서 나머지가 없다면 데이터 단위는 손상되지 않은 않은 것으로 간주되어 받아들여진다. 나머지가 남으면 데이터 단위가 전송 중에 손상되었음을 나타내므로, 이때의 데이터 단위는 거부된다.

CRC에 의해 이용되는 중복 비트들은, 데이터 단위를 미리 정의된 제수(divisor)로 나눔으로써 얻어지고, 나머지는 CRC가 된다. 제대로 만들어진 CRC는 다음 두 가지 성질을 가져야 한다. CRC는 제수보다 정확히 하나 적은 비트를 가저야 하고, 데이터열의 끝에 나머지를 추가하여 얻어진 비트열은 제수로 나누어 떨어져야 한다.

즉, 첫 단계에서 n개의 열이 데이터 단위의 끝에 덧붙여진다. 숫자 n은 n + 1비트로 된, 미리 정의된 제수의 비트 수보다 하나 작은 값이다.

두 번째 단계에서 연장된 데이터 단위는 2진 나눗셈이라 불리는 과정을 이용하여 제수로 나누어진다. 이 나눗셈으로부터 얻어지는 나머지가 CRC가 된다.

세 번째 단계에서는, 두 번째 단계에서 얻어진 n비트의 CRC는 데이터 단위의 끝에 덧붙여진 열을 대체한다. CRC는 모두 0으로 구성된다.


CRC는 매우 효과적인 오류 검출 방법이다. CRC 제수가 앞에서 언급된 규칙에 의해 선택된다면 다음과 같다.

1. CRC는 홀수 비트에 영향을 주는 모든 폭주 오류를 검출할 수 있다.
2. CRC는 다항식 차수 이하의 길이를 갖는 모든 폭주 오류를 검출할 수 있다.
3. CRC는 다항식 차수 이상의 길이를 갖는 매우 높은 확률의 폭주 오류를 검출할 수 있다.