Notice
Recent Posts
Recent Comments
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

Creative Thinking Warehouse To be Rich

CRC(Cyclic Redundancy Check) 본문

정보통신 엔지니어링/[8] 통신이론

CRC(Cyclic Redundancy Check)

LASER - 기술통역가 2026. 2. 13. 15:01

**CRC(Cyclic Redundancy Check)**의 이해는 단순히 '나눗셈 공식'을 외우는 것이 아니라, **'데이터라는 거대한 숫자에 어떻게 하면 가장 확실하고 가벼운 지문을 남길 것인가?'**라는 관점에서 출발해야 합니다.

 

1. CRC의 최상위 원리: "다항식 나눗셈을 이용한 데이터 지문"

이 토픽의 출발점은 **"전송 중 비트 하나만 바뀌어도 바로 들통나게 만드는 가장 효율적인 방법은 무엇인가?"**라는 질문입니다.

  • 기초 상황: 단순한 '합계(Checksum)' 방식은 숫자의 순서가 바뀌면 잡아내지 못하는 허점이 있습니다.
  • 본질: 데이터를 하나의 거대한 **다항식(Polynomial)**으로 보고, 미리 약속된 **생성 다항식(Generator)**으로 나눕니다. 이때 발생하는 **'나머지(Remainder)'**가 바로 데이터의 지문(CRC 코드)이 됩니다.
  • 통찰: **'다항식 대수학'**이라는 수학적 원리를 레버리지하여, 아주 적은 오버헤드로 **버스트 에러(연속된 에러)**까지 잡아내는 강력한 신뢰성을 구축하는 것입니다.

2. 어디서부터 이해를 시작해야 할까? (3단계 핵심 논리)

복잡한 회로도 대신 **'수학적 흐름'**부터 파악하세요.

① 데이터를 숫자가 아닌 '식'으로 보기

  • 기본: 이진수 1011을 $1x^3 + 0x^2 + 1x^1 + 1x^0$이라는 식으로 변환합니다.
  • 이해: 이렇게 식으로 변환하면 수학적 연산(나눗셈)을 통해 데이터의 고유한 특성을 추출하기 쉬워집니다.

② XOR 연산의 마법: "올림 없는 나눗셈"

  • 기본: CRC의 나눗셈은 일반 산술이 아니라 모듈로-2(Modulo-2) 연산을 사용합니다.
  • 이해: 덧셈과 뺄셈이 모두 XOR로 처리됩니다. 이는 하드웨어(Shift Register)로 구현하기에 매우 단순하고 빠르다는 엄청난 경제적 이점을 제공합니다.

③ 나머지가 0이면 성공: "검증의 단순화"

  • 기본: 송신 측은 [데이터 + 나머지]를 보냅니다. 수신 측은 받은 전체를 똑같은 식(생성 다항식)으로 나눕니다.
  • 이해: 에러가 없다면 나머지는 반드시 0이 됩니다. "0이냐 아니냐"라는 단 하나의 질문으로 데이터의 무결성을 확신할 수 있습니다.

3. 사고(What, Why, How, So what) 기반 답안 매칭

질문 답안 목차 핵심 서술 내용 
Why 1. 개요 전송 중 발생하는 비트 에러, 특히 연속된 버스트 에러를 높은 확률로 검출하여 신뢰성을 확보하기 위함
What 2. 기술 개념 데이터를 다항식으로 간주하고 생성 다항식으로 나눈 나머지를 체크값으로 사용하는 에러 검출 방식
How 3. 구성도 Shift Register와 XOR 게이트로 구성된 하드웨어 로직 및 연산 과정 도식화
Attributes 4. 주요 특징 강력한 검출 성능, 하드웨어 구현 용이성, 낮은 오버헤드
So what 5. 활용 및 동향 Ethernet, 대용량 스토리지, 각종 통신 프로토콜의 표준 에러 검출 메커니즘으로 활용

💡 구글 시트 정리를 위한 한 줄 정리

  • A열(토픽): CRC (Cyclic Redundancy Check)
  • B열(개요): 다항식 나눗셈의 나머지 값을 이용하여 데이터 전송 중 발생한 에러를 검출하는 순환 중복 검사 기술.
  • L열(키워드): 다.항.식.나.머.지.검.출 (Generator Polynomial, Modulo-2, XOR Logic)

 **"복잡한 데이터를 다항식이라는 간결한 수학적 모델로 치환하여 무결성을 완벽하게 통제하는 것"**이 CRC의 본질입니다.

 


1. 개요

  • 데이터를 다항식으로 간주하고 송신 측에서 생성 다항식으로 나눈 나머지(FCS)를 부가하여 전송하면, 수신 측에서 동일한 다항식으로 나누어 에러를 검출하는 방식임.
  • 프레임 단위의 에러 검출에 주로 사용되며, 특히 연속적으로 발생하는 버스트 에러(Burst Error)에 대해 강력한 검출 능력을 보유함.

2. 기술 개념

  • 핵심 본질: "모듈로-2(Modulo-2) 나눗셈 연산". 일반적인 산술 연산과 달리 올림이나 내림이 없는 XOR 연산을 기반으로 하드웨어 구현 최적화.
  • 주요 구성 요소:
    • 생성 다항식(Generator Polynomial, $G(x)$): 송수신 간 약속된 제수(Divisor). 에러 검출 성능을 결정함.
    • FCS(Frame Check Sequence): 데이터 뒤에 추가되는 나머지 값(Remainder).
  • 동작 원리: 1. 송신 측: $M(x) \cdot x^n$을 $G(x)$로 나눈 나머지 $R(x)$를 구함.3. 수신 측: 수신된 전체 다항식을 $G(x)$로 나누어 나머지가 '0'이면 정상, 아니면 에러로 판단.
  • 2. 전송: $[M(x) + R(x)]$를 수신 측으로 전송.

3. 구성도 및 연산 프로세스

가. 구성도 설명

  1. Shift Register: 데이터를 한 비트씩 이동시키며 나눗셈 연산을 수행하는 저장소.
  2. XOR Gate: 생성 다항식의 계수가 1인 위치에 배치되어 비트 간 배타적 논리합 연산(Modulo-2) 수행.
  3. 연산 흐름: 입력 데이터가 레지스터를 통과하며 생성 다항식과의 XOR 연산을 반복하고, 최종적으로 레지스터에 남은 값이 CRC 결과(나머지)가 됨.

나. 논리 회로 메커니즘

  • 하드웨어적으로 피드백 루프(Feedback Loop) 구조를 가짐으로써 고속 비트 스트림 처리에 매우 유리함.

4. 특징 및 기술적 장단점

구분 주요 특징 및 장점 단점 및 고려사항
에러 검출 능력 버스트 에러 및 단일 비트 에러 검출력 매우 높음 에러 정정(Correction)은 불가능 (검출 전용)
구현 경제성 XOR 게이트와 레지스터만으로 간단히 구현 가능 생성 다항식 선택에 따라 검출 성능 차이 발생
처리 속도 비트 단위 직렬 처리가 가능하여 실시간성 우수 데이터 길이가 매우 짧을 경우 오버헤드 상대적 증가
신뢰성 Checksum 등 단순 합산 방식보다 신뢰도 압도적임 의도적인 데이터 변조(무결성 공격) 방어에는 한계

5. 활용 및 기술동향

가. 표준 프로토콜 활용

  • Ethernet (IEEE 802.3): 프레임 끝에 32비트 CRC(CRC-32)를 부가하여 데이터 링크 계층의 신뢰성 보장.
  • HDLC / PPP: 동기식 및 비동기식 전송 제어 프로토콜에서 프레임 에러 체크의 표준으로 사용.
  • 스토리지 기술: SATA, SAS 등 저장 장치 인터페이스와 압축 파일(ZIP, RAR)의 무결성 검증에 활용.

나. 최신 기술동향 (2026년 기준)

  • 병렬 CRC 연산 기법: 100Gbps 이상의 초고속 네트워크(Terabit Ethernet) 대응을 위해 직렬 처리를 넘어선 다중 비트 병렬 처리 알고리즘 고도화.
  • 가속기 하드웨어 내장: 최신 CPU 및 네트워크 인터페이스 카드(NIC) 내부에 하드웨어 가속기(Offloading) 형태로 탑재되어 소프트웨어 부하 최소화.
  • 보안 프로토콜과의 연계: 단순 전송 에러는 CRC로, 악의적 변조는 HMAC/Hash로 검증하는 계층적 무결성 체계 구축.
  • 임베디드 최적화: 저전력 IoT 기기를 위해 최소한의 게이트 수로 동작하는 경량 CRC-8, CRC-16 프로필 활용 확산.

CRC 연산의 본질을 가장 직관적으로 이해할 수 있도록, '빌림 없는 나눗셈(Modulo-2)' 과정을 직접 보여드리겠습니다.

1. 설정 (송신 측 상황)

  • 원본 데이터 ($M$): 1011 (다항식: $x^3 + x^1 + x^0$)
  • 생성 다항식 ($G$): 1101 (다항식: $x^3 + x^2 + 1$) - 나누는 수
  • 준비 작업: 생성 다항식이 4비트(3차식)이므로, 데이터 뒤에 0을 3개 붙입니다. (1011000)

2. XOR 나눗셈 과정 (Modulo-2)

XOR 연산 규칙만 기억하세요: "같으면 0, 다르면 1" (일반 나눗셈처럼 빌려오기 없음!)

Plaintext
 
               1 1 1 0  <-- 몫 (중요하지 않음)
        ________________
1 1 0 1 ) 1 0 1 1 0 0 0  <-- 데이터 + 000
          1 1 0 1        <-- 생성 다항식 배치
          -------
          0 1 1 0 0      <-- XOR 결과 (앞의 0은 무시하고 다음 비트 내려옴)
            1 1 0 1      <-- 맨 앞이 1이면 다시 나눔
            -------
            0 0 0 1 0 0  <-- XOR 결과 (맨 앞 1이 나올 때까지 비트 내려옴)
                  1 1 0 1
                  -------
                  0 1 0 1 <-- 마지막 남은 3비트가 "나머지(CRC)"

3. 결과 및 전송

  • 나머지(FCS): 101
  • 전송되는 패킷: 원본(1011) + 나머지(101) = 1011101

4. 수신 측 검증 (에러가 없는 경우)

수신자는 받은 1011101을 똑같은 생성 다항식(1101)으로 나눕니다.

Plaintext
 
               1 1 1 0
        ________________
1 1 0 1 ) 1 0 1 1 1 0 1
          1 1 0 1
          -------
          0 1 1 0 1
            1 1 0 1
            -------
            0 0 0 0 1 1 (앞의 0 무시)
                  0 0 0 0 (나눌 수 없음)
                  -------
                  0 0 0   <-- 나머지가 "0"이므로 패스!

5. 하드웨어에서는 어떻게 돌아갈까? (Shift Register)

기술사 답안지에는 이 나눗셈 과정과 함께 아래의 하드웨어 구조를 언급하면 고득점입니다.

  1. 입력: 1011000이 한 비트씩 들어옵니다.
  2. 연산: 맨 앞 비트가 1이 될 때마다 중간에 설치된 XOR 게이트가 생성 다항식의 값을 툭툭 쳐서 값을 바꿉니다.
  3. 종료: 모든 데이터가 통과하면 레지스터에 남은 값이 바로 101입니다.

이 연산 과정을 눈으로만 보지 마시고, 지금 바로 이면지에 XOR 나눗셈을 한 번만 직접 손으로 풀어보세요. 손끝에서 느껴지는 **"빌림 없는 나눗셈의 쾌감"**이 뇌에 개념을 박제해 줄 것입니다.