💡 핵심 인사이트
CRC에서 에러를 걸러내는 채의 촘촘함을 결정하는 것은 나눌 때 쓰는 '제수(Divisor)'입니다.
통신 공학자들은 이 제수를 단순한 2진수 비트열(10011)이 아니라 수학의 다항식($x^4 + x + 1$) 형태로 표현하여 부르며, 이를 **생성 다항식(Generator Polynomial)**이라고 합니다. 이것의 차수와 구조가 CRC의 성능을 결정합니다.
Ⅰ. 비트열과 다항식의 기적적인 매핑
네트워크 전공 서적을 보면 CRC 설명에 난데없이 $x^3 + x^2 + 1$ 같은 수학 방정식이 등장합니다. 당황할 필요 없습니다. 이는 단순히 이진수(0과 1)의 자리표시를 수학의 $x$ 거듭제곱으로 멋있게 표현한 것일 뿐입니다.
- 변환 규칙: 각 자리의 비트값이
1이면 $x$의 (해당 자리 위치)승을 살려두고,0이면 그 항을 날려버립니다. (맨 오른쪽 1의 자리는 $x^0 = 1$입니다). - 예시 변환:
1 0 1 1(4비트)- ➔ $1 \cdot x^3 + 0 \cdot x^2 + 1 \cdot x^1 + 1 \cdot x^0$
- ➔ $x^3 + x + 1$ (이것이 1011의 다항식 표현입니다!)
거꾸로 다항식 **$x^4 + x^2 + x + 1$**을 이진수로 바꾸면?
- 4승(1), 3승(없음=0), 2승(1), 1승(1), 0승(1) ➔
10111이 됩니다.
Ⅱ. 생성 다항식(Generator Polynomial)의 차수와 CRC 길이
생성 다항식에서 가장 높은 차수(최고차항, 윗 예시의 $x^4$)는 앞으로 송신기가 프레임 뒤에다 갖다 붙일 CRC 꼬리표(나머지)의 비트 길이를 결정합니다.
- 만약 생성 다항식이 $x^3 + x + 1$ 이라면 (최고차항 = 3):
- 나누는 숫자(제수)는
1011(4자리)입니다. - 수학적으로 4자리 숫자로 나누면 그 나머지는 무조건 3자리가 나옵니다.
- 따라서 CRC(FCS)의 크기는 최고차항과 똑같은 3비트가 됩니다.
- 송신기는 나눗셈을 하기 전에, 원본 데이터 꼬리에 이 차수만큼 '0'을 3개 미리 붙여놓고 연산을 시작합니다. (★계산 문제 핵심 포인트).
- 나누는 숫자(제수)는
Ⅲ. 좋은 생성 다항식의 조건
아무 다항식이나 대충 골라서 나누면 에러를 잘 못 잡습니다. 수십 년간 수학자들이 컴퓨터를 돌려 '가장 완벽하게 웬만한 에러를 다 걸러내는 신비한 숫자(다항식)'를 찾아내 국제 표준으로 박아두었습니다.
- CRC-16: $x^{16} + x^{15} + x^2 + 1$
- 블루투스나 구형 모뎀에서 씁니다. CRC 꼬리표가 16비트(2바이트) 달립니다.
- CRC-32: $x^{32} + x^{26} + x^{23} + ... + 1$
- 우리가 매일 쓰는 **이더넷(LAN), Wi-Fi, 압축파일(ZIP)**에서 데이터를 지키는 표준 다항식입니다. 프레임 끝에 32비트(4바이트)의 FCS가 붙어 무적의 에러 검출력을 자랑합니다.
📢 섹션 요약 비유: 생성 다항식은 공항 검색대의 '탐지 센서(X-ray)'의 스펙입니다. 대충 만든 다항식을 쓰면 권총(에러)을 못 잡고 통과시킵니다. 하지만 수학자들이 평생을 바쳐 조율한 CRC-32라는 완벽한 다항식(탐지기)을 문에 걸어놓으면, 캐리어 안의 손톱깎이(단 1비트의 에러)나 연속된 칼뭉치(버스트 에러)까지 99.999% 확률로 소리를 울리며 완벽히 걸러내는 무적의 보안 검색대가 됩니다.