CRC(Cyclic Redundancy Check, 순환 중복 검사)는 오류 검출 기법 중 하나로, 데이터 전송 중 발생할 수 있는 전송 오류를 탐지하기 위해 사용된다. CRC는 송신 측에서 데이터에 체크섬(checksum)을 붙여, 수신자가 데이터를 검증할 수 있도록 한다.
CRC의 동작 원리
CRC는 생성 다항식(generator polynomial)을 이용한 다항식 나눗셈에 기반하여 오류를 검출한다. 전송하고자 하는 데이터 비트를 다항식으로 표현하고, 이를 미리 정해진 생성 다항식으로 나누어 나머지 값을 계산한다. 이 나머지 값은 CRC 코드로서 전송 데이터와 함께 첨부되며, 수신 측은 동일한 생성 다항식을 사용해 데이터의 무결성을 검증한다.
CRC-32
CRC-32는 가장 널리 사용되는 CRC 유형 중 하나로, 32비트 생성 다항식을 사용하여 오류 검출을 수행한다.
#include <stdint.h>
uint32_t crc32(uint8_t *data, uint32_t length) {
uint32_t crc = 0xFFFFFFFF;
uint32_t polynomial = 0x04C11DB7;
for (uint32_t i = 0; i < length; i++) {
crc ^= (uint32_t)data[i] << 24;
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x80000000) {
crc = (crc << 1) ^ polynomial;
} else {
crc <<= 1;
}
}
}
return crc ^ 0xFFFFFFFF;
}
- 0x04C11DB7이라는 생성 다항식을 사용한다.
CRC는 높은 오류 검출률과 계산 속도가 빠르지만 오류 검출 후 오류 수정 기능이 없다는 단점을 가지고 있다.
728x90
'CS' 카테고리의 다른 글
2의 보수(Two's complement)란? (0) | 2024.10.23 |
---|---|
ISO 파일이란? (1) | 2024.10.14 |
인터럽트(Interrupt)란? (1) | 2024.10.10 |
BIOS / BootLoader란? (0) | 2024.10.07 |
JTAG / J-LINK란? (0) | 2024.10.07 |