CRC 오류 검출 원리와 통신 시스템 적용

CRC의 Modulo-2 나눗셈 원리, 생성 다항식, 오류 검출 특성과 통신·저장 시스템에서의 구현 고려사항을 정리한다.

2026-08-14 · 최초 발행 2025-08-10

데이터 끝에 붙는 나머지가 오류를 가려내는 방식

CRC(Cyclic Redundancy Check)는 데이터 블록의 전송 오류를 찾아내는 코드다. 데이터와 생성 다항식을 이진 다항식으로 다루고, XOR 기반의 이진 나눗셈에서 나온 나머지를 검사 비트로 붙인다.

일반적인 패리티 검사나 체크섬보다 오류 검출 능력이 뛰어나며, 연속적으로 발생하는 Burst Error와 산발적인 Random Error를 검출할 수 있다. 길이가 서로 다른 임의의 비트 블록에도 적용할 수 있어 통신 시스템과 저장 매체의 무결성 검사에 쓰인다.

Modulo-2 연산과 생성 다항식

CRC의 계산은 캐리가 없는 Modulo-2 연산을 기반으로 한다. 이진수에서 XOR은 이러한 캐리 없는 덧셈과 같은 역할을 한다. 데이터와 생성 다항식을 다항식 형태로 표현한 뒤 나눗셈을 수행한다.

데이터 블록데이터에 0 추가생성 다항식으로 나눗셈나머지 계산CRC 생성데이터 + CRC 전송

데이터 끝에는 생성 다항식의 차수만큼 0을 덧붙인다. 확장된 데이터를 생성 다항식으로 Modulo-2 나눗셈하고, 이때 일반적인 나눗셈의 뺄셈 대신 XOR을 사용한다. 연산 뒤 남은 나머지가 CRC 값이며, 원본 데이터와 함께 전송된다.

이진 나눗셈으로 CRC를 구하는 예

원본 데이터가 1101이고 생성 다항식이 1011 (x³ + x + 1)인 경우를 보자.

1. 생성 다항식의 차수는 3이므로, 데이터에 3개의 0을 추가: 1101000

2. Modulo-2 나눗셈 수행:
   1011 ) 1101000
          1011
          ----
           0110
           0000
           ----
            1100
            1011
            ----
             1110
             1011
             ----
              1010
              1011
              ----
               001 ← 나머지 = CRC

3. 최종 전송 데이터: 1101001 (원본 데이터 + CRC)

통신과 저장 매체에서의 CRC

이더넷은 프레임 검사에 CRC-32를 사용한다. USB 통신은 데이터 패킷의 무결성 검증에 CRC-16을 활용하며, 디스크 저장 시스템은 섹터 데이터 오류를 검출한다. 모바일 통신의 무선 데이터 전송과 ZIP, RAR 등의 압축 파일 무결성 검증도 CRC의 적용 대상이다.

일치불일치데이터 생성CRC 계산데이터 + CRC 전송수신 CRC 확인데이터 수락오류 감지 재전송 요청

수신 측은 받은 데이터로 CRC를 다시 계산해 전송된 값과 비교한다. 값이 일치하면 데이터를 수락하고, 일치하지 않으면 오류를 감지해 재전송을 요청한다.

사용 환경에 따라 달라지는 CRC 표준

  • CRC-16: 16비트 CRC로 USB, Modbus 등에서 사용한다.
  • CRC-32: 32비트 CRC로 이더넷, ZIP 파일 등에서 사용한다.
  • CRC-CCITT: 16비트 CRC로 X.25, HDLC, Bluetooth 등에서 사용한다.
  • CRC-8: 8비트 CRC로 ATM 헤더 검사 등에 사용한다.

검출만으로 충분하지 않은 상황

CRC는 모든 오류를 100% 검출하지는 못한다. 특정 패턴의 오류가 검출되지 않을 수 있고, 오류를 찾아낼 뿐 정정하지는 못한다.

더 높은 차수의 생성 다항식을 사용하거나, CRC와 추가 오류 검출·정정 코드를 결합하는 방법을 고려할 수 있다. 중요 데이터라면 CRC 외에 해시 함수 같은 추가 검증을 수행한다.

처리 방식 선택과 최적화

하드웨어 구현은 고속 처리에 적합하며 FPGA나 ASIC에서 사용할 수 있다. 소프트웨어 구현은 유연성이 높고 다양한 알고리즘을 적용하기 쉽다.

소프트웨어 경로에서는 룩업 테이블로 계산 속도를 높이거나, 비트 단위 연산 대신 바이트·워드 단위로 처리할 수 있다. 병렬 처리 역시 성능 개선을 위한 선택지다. CRC를 적용할 때는 필요한 처리 속도와 구현 환경에 따라 이 방식을 선택한다.

CRC오류 검출데이터 무결성통신 프로토콜생성 다항식