💡 핵심 인사이트
CRC(Cyclic Redundancy Check)는 단순한 더하기(쳌섬)나 1의 개수 세기(패리티)의 허점을 완벽하게 부숴버린, 데이터 링크 계층(이더넷, 와이파이)의 가장 강력하고 널리 쓰이는 오류 검출 1인자입니다.
원본 데이터를 길고 복잡한 '생성 다항식'이라는 마법의 숫자로 **나누기(나눗셈)**하여 남은 '나머지(Remainder)' 값을 프레임 꼬리(FCS)에 붙여 보내는 우아한 수학적 기법입니다.
Ⅰ. CRC의 압도적 위상
CRC 앞에서는 패리티 검사의 2비트 에러 통과나, 검사합의 상쇄 에러 꼼수가 통하지 않습니다. 송신 데이터가 아무리 길어도 1비트는 물론 연속적으로 깨지는 버스트 에러(Burst Error)의 99.999%를 칼같이 잡아냅니다. 구현도 하드웨어(Shift Register)로 만들면 빛의 속도로 연산되어 2계층 랜카드 칩셋에 무조건 탑재됩니다.
Ⅱ. CRC의 동작 원리 (나눗셈의 마술)
숫자(비트)를 나누고 그 **'나머지'**를 확인하는 것이 핵심입니다.
1. 양측의 약속 (생성 다항식)
송신기와 수신기는 통신을 시작하기 전, "우리는 데이터를 나눌 때 무조건 1011이라는 숫자로 나누자!"라고 약속합니다. 이 약속된 나누는 수(Divisor)를 **'생성 다항식(Generator Polynomial)'**이라고 부릅니다.
2. 송신 측의 연산 (FCS 구하기)
- 원본 데이터:
11010110 - 송신기는 이 원본 데이터를 아까 약속한 제수
1011로 나눕니다. (이때 우리가 아는 산수 나눗셈이 아니라 자리 올림이 없는 **XOR 연산(배타적 논리합)**을 사용해 기계적으로 미친 듯이 뺍니다). - 쫙 나누고 났더니 맨 끝에 **나머지(Remainder)값인
010**이 남았습니다. - 이 나머지
010을 바로 **CRC (또는 FCS, Frame Check Sequence)**라고 부릅니다. 송신기는 원본 데이터 뒤에 이 CRC를 딱 붙여서11010110010을 전송합니다.
3. 수신 측의 검증
- 수신기는 날아온 데이터 전체
11010110010을 받습니다. - 의심할 것도 없이 아까 약속했던 제수
1011로 이 거대한 숫자를 다시 XOR 나눗셈 해봅니다. - 결과 판정:
- 나머지가
0이다: "나누어떨어졌네? 오는 길에 1비트도 안 깨지고 완벽하게 왔다는 증거군. 합격!" - 나머지가
0이 아니다 (예: 110 등): "나누어떨어지지 않네? 중간에 누군가 비트를 훼손했군. 쓰레기통으로 가라!" (에러 검출)
- 나머지가
Ⅲ. 모듈로-2 (XOR) 연산의 특징
시험 문제에서 CRC 값을 직접 계산하라고 할 때 헷갈리면 안 되는 규칙입니다.
- XOR (Exclusive OR) 뺄셈: 윗자리 숫자와 아랫자리 숫자가 서로 같으면
0, **다르면1**을 내립니다. 위에서 숫자를 꿔오거나(Borrow) 자리를 올리는(Carry) 일반 수학 계산을 절대 하지 않습니다. - 예:
1010XOR1011➔ 앞에서부터(1=1➔0), (0=0➔0), (1=1➔0), (0!=1➔1)이므로 결과는0001입니다.
📢 섹션 요약 비유: CRC는 **'비밀 자물쇠 번호(나머지) 구하기'**입니다. 내가 보낼 금괴(원본 100kg)를 송수신자만 아는 비밀의 컵(생성 다항식 3kg)으로 퍼냅니다. 33번 퍼내면 금괴 1kg이 남습니다. 이 **남은 1kg(CRC 나머지)**을 상자에 같이 넣고 보냅니다. 수신자는 도착한 101kg 전체를 3kg 컵으로 다시 퍼내 봅니다. 도중에 쥐가 파먹지 않았다면 마지막엔 컵에 완벽히 딱 맞아떨어져 남는 금괴가 0kg이어야 정상임을 확신할 수 있습니다.