핵심 인사이트
- 오류 탐지(Error Detection)는 데이터 전송·저장 과정에서 비트 오류를 발견하는 기술로, 패리티 비트(Parity Bit)·체크섬(Checksum)·CRC(Cyclic Redundancy Check)는 중복 정보 추가량과 탐지 능력의 트레이드오프를 각각 다른 수준으로 구현한다.
- CRC는 다항식 나눗셈 원리를 이용해 1~수 바이트의 작은 FCS(Frame Check Sequence)로 버스트 오류까지 탐지할 수 있어, 이더넷·SATA·USB 등 거의 모든 디지털 통신 규격의 표준으로 채택됐다.
- 오류 탐지는 "발견만" 하고, 오류 정정(Error Correction)은 ARQ(자동 재전송)나 FEC(Forward Error Correction) 방식으로 분리 처리한다 — 이 분리 설계가 프로토콜 계층화의 핵심 원칙이다.
Ⅰ. 패리티 비트
패리티 비트 (Parity Bit):
짝수 패리티 (Even Parity):
데이터 7비트 + 패리티 1비트 = 8비트
전체 1의 개수가 짝수가 되도록 패리티 설정
예시:
데이터: 1010001 (3개의 1)
짝수 패리티: 1010001 | 1 (1 추가 -> 1이 4개)
1비트 오류 탐지:
수신: 1010011 | 1 (1이 5개, 홀수 -> 오류 탐지)
한계:
2비트 동시 오류 -> 탐지 불가 (1의 수 변화 없음)
오류 위치 알 수 없음 -> 정정 불가
홀수 패리티 (Odd Parity):
전체 1이 홀수가 되도록 설정
(짝수 패리티와 동일 원리, 반대 값)
📢 섹션 요약 비유: 패리티 비트는 계란 한 판을 셀 때 "짝수개면 정상"으로 검사하는 것 — 하나 깨져도 알 수 있지만 두 개 깨지면 놓친다.
Ⅱ. 체크섬
체크섬 (Checksum):
Internet Checksum (RFC 793):
데이터를 16비트 단위로 쪼갬
모두 더함 (1의 보수 덧셈)
결과의 1의 보수가 체크섬
예시:
데이터: 0xB3E7 + 0x4F2A = 0x0311 (올림 처리)
체크섬: ~0x0311 = 0xFCEE
검증:
수신측: 데이터 + 체크섬 합산 = 0xFFFF -> 정상
TCP/IP 헤더에 사용:
IPv4, TCP, UDP 모두 체크섬 포함
IPv6: 헤더 체크섬 제거 (상위 계층 의존)
한계:
같은 위치 비트 오류 쌍은 탐지 불가
CRC보다 탐지력 약함
📢 섹션 요약 비유: 체크섬은 영수증 합계 검산 — 모든 항목 더한 값이 맞으면 OK, 틀리면 어딘가 오류 있음.
Ⅲ. CRC
CRC (Cyclic Redundancy Check):
원리: 다항식 나눗셈
송신자: 데이터 D(x)를 생성 다항식 G(x)로 나눔
나머지 R(x)를 FCS로 붙여 전송
수신자: D(x)+R(x)를 G(x)로 나눠 나머지 = 0이면 정상
예시 (CRC-8):
생성 다항식: x^8 + x^2 + x + 1 (= 0b100000111)
데이터: 101001
계산 과정: XOR 기반 이진 나눗셈
표준 CRC 다항식:
CRC-8: 이더넷, 1-wire 프로토콜
CRC-16: USB, MODBUS
CRC-32: 이더넷 FCS, ZIP, SATA, PNG
CRC-64: ECMA, 저장 장치
탐지 능력:
- 모든 단일 비트 오류 탐지
- 모든 이중 비트 오류 탐지 (적절한 다항식)
- 홀수 개 비트 오류 탐지
- 길이 r 이하의 버스트 오류 100% 탐지
📢 섹션 요약 비유: CRC는 비밀 암호 나눗셈 — "보낸 숫자를 특정 수로 나눈 나머지"가 0이면 오류 없음, 아니면 뭔가 바뀐 것.
Ⅳ. 오류 정정 방식
오류 탐지 후 처리 전략:
ARQ (Automatic Repeat Request):
탐지 후 재전송 요청
종류:
Stop-and-Wait ARQ: 프레임 하나씩
Go-Back-N ARQ: 오류 이후 전체 재전송
Selective Repeat ARQ: 오류 프레임만 재전송
적용: TCP, Wi-Fi, 유선 통신
FEC (Forward Error Correction):
탐지 + 정정 데이터 포함 (재전송 없음)
해밍 코드 (Hamming Code): 1비트 정정
리드-솔로몬 코드: 다수 바이트 정정
LDPC / 터보 코드: 4G/5G 이동통신
적용: 위성통신, 광통신, DVD/Blu-ray
비교:
ARQ: 재전송 가능한 환경 (인터넷)
FEC: 재전송 불가 또는 지연 민감 환경 (위성)
📢 섹션 요약 비유: ARQ는 선생님이 틀린 답 보고 다시 써오라는 것, FEC는 시험지에 답과 정답 힌트를 함께 제출하는 것.
Ⅴ. 실무 시나리오 — 이더넷 FCS
이더넷 프레임 전송 (CRC-32):
[프리엠블][목적지 MAC][출처 MAC][타입][데이터][FCS]
^^^^
CRC-32 (4바이트)
송신 NIC:
1. 데이터 준비 완료
2. CRC-32 하드웨어 계산 (전용 레지스터)
3. FCS 필드에 삽입 후 전송
수신 NIC:
1. 프레임 수신
2. CRC-32 재계산
3. 수신 FCS와 비교
일치: 프레임 수락, 상위 계층 전달
불일치: 프레임 폐기 (자동)
성능:
10Gbps NIC: CRC 검사 하드웨어 오프로딩
CPU 개입 없음 -> 라인 속도 유지
이더넷 CRC-32 오류 탐지율:
32비트 미만 버스트 오류 -> 100% 탐지
32비트 랜덤 오류 -> 1 - 2^(-32) ≈ 99.9999999%
📢 섹션 요약 비유: 이더넷 FCS는 택배 포장 후 봉인 스티커 — 수신측이 스티커 훼손 여부로 내용물 변형 확인.
📌 관련 개념 맵
오류 탐지 (Error Detection)
+-- 방법
| +-- 패리티 비트 (단순, 1비트)
| +-- 체크섬 (TCP/IP)
| +-- CRC (이더넷, SATA, USB)
+-- 탐지 후 처리
| +-- ARQ (재전송)
| | +-- Stop-and-Wait
| | +-- Go-Back-N
| | +-- Selective Repeat
| +-- FEC (전방 오류 정정)
| +-- 해밍 코드
| +-- 리드-솔로몬
| +-- LDPC / 터보 코드
+-- 적용 계층
+-- 물리/데이터링크: CRC, 패리티
+-- 네트워크/전송: 체크섬 (IP, TCP)
📈 관련 키워드 및 발전 흐름도
[패리티 비트 (1940s)]
단순 홀짝 검사
|
v
[체크섬 (1960s)]
TCP/IP 인터넷 체크섬
|
v
[CRC (Castagnoli, 1961~)]
이더넷 CRC-32 (1980)
|
v
[해밍 코드 → RS 코드]
오류 정정으로 확장 (CD, DVD)
|
v
[LDPC / 터보 코드 (1990s~)]
4G LTE, 5G NR 표준
|
v
[현재: 하드웨어 오프로딩]
NIC/SSD 전용 CRC 엔진
CPU 개입 없는 라인 속도 처리
👶 어린이를 위한 3줄 비유 설명
- 오류 탐지는 편지를 보낼 때 마지막에 "이 편지 글자 수는 37개예요"라고 적는 것 — 받는 사람이 세어보고 다르면 뭔가 잘못된 거예요.
- CRC는 더 복잡한 수학 계산으로 만든 "비밀 잠금 번호"여서 데이터가 조금이라도 바뀌면 번호가 달라져요.
- 오류를 발견했을 때 다시 보내달라고 하는 방법(ARQ)과, 처음부터 정답지를 같이 보내서 스스로 고치는 방법(FEC) 두 가지가 있어요!