πŸ“‘ CRC(Cyclic Redundancy Check)


1️⃣ CRC κ°œμš”

CRC(Cyclic Redundancy Check)λŠ” λ””μ§€ν„Έ 톡신 및 데이터 μ €μž₯ λΆ„μ•Όμ—μ„œ 였λ₯˜ κ²€μΆœμ„ μœ„ν•΄ 널리 μ‚¬μš©λ˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.
솑신 μΈ‘μ—μ„œ 데이터 λΉ„νŠΈμŠ€νŠΈλ¦Όμ„ νŠΉμ •ν•œ 생성 닀항식(Generator Polynomial)둜 λ‚˜λˆ—μ…ˆ(Modulo-2 Arithmetic)을 μˆ˜ν–‰ν•΄ λ‚˜λ¨Έμ§€(R, FCS)λ₯Ό κ΅¬ν•œ ν›„, 이λ₯Ό 데이터 뒀에 λΆ™μ—¬ μ „μ†‘ν•˜λ©°, μˆ˜μ‹  μΈ‘μ—μ„œλŠ” λ™μΌν•œ 생성 λ‹€ν•­μ‹μœΌλ‘œ κ²€μ¦ν•˜μ—¬ 였λ₯˜λ₯Ό νŒλ³„ν•©λ‹ˆλ‹€.


2️⃣ CRC 계산 κ³Όμ •

✍️ 솑신 μΈ‘

1️⃣ 데이터(Message, M) μ€€λΉ„

  • μ†‘μ‹ μžκ°€ μ „μ†‘ν•˜λ €λŠ” μ‹€μ œ 데이터 λΉ„νŠΈμŠ€νŠΈλ¦Ό.

2️⃣ 데이터 뒀에 생성 닀항식 P(x)의 차수(n)만큼 0을 λΆ™μž„

T = M Γ— 2ⁿ

3️⃣ Modulo-2 λ‚˜λˆ—μ…ˆ μˆ˜ν–‰

T Γ· P(x) = Q (λͺ«), R (λ‚˜λ¨Έμ§€)
  • μ—¬κΈ°μ„œ R이 λ°”λ‘œ CRC λ‚˜λ¨Έμ§€(FCS)μž…λ‹ˆλ‹€.

4️⃣ 전솑 데이터 생성

T* = T + R
  • XOR μ—°μ‚°(Modulo-2 λ§μ…ˆ)으둜 λΆ™μž„.

✍️ μˆ˜μ‹  μΈ‘

1️⃣ T* μˆ˜μ‹  ν›„ λ™μΌν•œ P(x)둜 λ‚˜λˆ—μ…ˆ μˆ˜ν–‰**

T* Γ· P(x) = Q', R'
  • R’ = 0 β†’ 였λ₯˜ μ—†μŒ.
  • R’ β‰  0 β†’ 였λ₯˜ λ°œμƒ.

3️⃣ Modulo-2 μ—°μ‚°μ˜ νŠΉμ§•

  • λ§μ…ˆ(+)κ³Ό λΊ„μ…ˆ(-)이 XOR둜 동일.
    • 예) 1+1=0, 1+0=1, 0+0=0
  • λ‚˜λˆ—μ…ˆμ€ 반볡적인 XOR μ—°μ‚°μœΌλ‘œ κ΅¬ν˜„.
  • λ”°λΌμ„œ CRC 계산은 λ””μ§€ν„Έ νšŒλ‘œμ™€ ν”„λ‘œκ·Έλž¨ λͺ¨λ‘μ—μ„œ 효율적으둜 μˆ˜ν–‰ κ°€λŠ₯.

4️⃣ 1λΉ„νŠΈ 였λ₯˜ κ²€μΆœ

데이터 전솑 쀑 단일 λΉ„νŠΈκ°€ λ’€μ§‘νžˆλŠ” 였λ₯˜(예: 1β†’0 λ˜λŠ” 0β†’1)κ°€ λ°œμƒν•˜λ©΄ 였λ₯˜ 닀항식 E(x)=xᡏ둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

  • μ†‘μ‹ μžκ°€ μ „μ†‘ν•œ 데이터 T*λŠ” 섀계상 P(x)둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λ„λ‘ λ§Œλ“€μ–΄μ Έ μžˆμ–΄ μˆ˜μ‹ μžκ°€ λ‚˜λˆ΄μ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 0이닀.
  • 1λΉ„νŠΈ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄:
    T*' = T* + E(x)
    
    (T*' Γ· P(x)) = (T* Γ· P(x)) + (E(x) Γ· P(x)) = 0 + (E(x) Γ· P(x))
    
  • E(x)λŠ” λ‹¨μΌν•­μ΄λ―€λ‘œ P(x)둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•ŠμŒ β†’ R’ β‰  0 β†’ 였λ₯˜ κ²€μΆœ.

βœ… CRCλŠ” 단일 λΉ„νŠΈ 였λ₯˜λ₯Ό 100% κ²€μΆœν•œλ‹€.


5️⃣ 2λΉ„νŠΈ 및 3λΉ„νŠΈ 였λ₯˜ κ²€μΆœ

CRC λ‹€ν•­μ‹μ˜ ꡬ쑰에 따라 2λΉ„νŠΈ, 3λΉ„νŠΈ 였λ₯˜ κ²€μΆœλ ₯이 κ²°μ •λœλ‹€.

  • λŒ€λΆ€λΆ„μ˜ 잘 μ„€κ³„λœ CRC 닀항식은 거의 λͺ¨λ“  2λΉ„νŠΈ 였λ₯˜λ₯Ό κ²€μΆœ κ°€λŠ₯.
  • 일뢀 CRC 닀항식은 3λΉ„νŠΈ 였λ₯˜λ„ 높은 κ²€μΆœλ₯ μ„ 보μž₯.
  • Burst Error(μ—°μ†λœ λΉ„νŠΈ 였λ₯˜)도 CRC μ°¨μˆ˜μ— 따라 νŠΉμ • κΈΈμ΄κΉŒμ§€ 100% κ²€μΆœμ΄ κ°€λŠ₯.

βœ… CRC의 였λ₯˜ κ²€μΆœ λŠ₯λ ₯은 생성 닀항식 P(x)의 섀계에 λ‹¬λ €μžˆλ‹€.


6️⃣ CRC λ‹€ν•­μ‹μ˜ μ€‘μš”μ„±

  • 생성 닀항식 P(x)κ°€ 1(x⁰)이라면 μ–΄λ–€ 데이터든 λ‚˜λ¨Έμ§€κ°€ 항상 0 β†’ 였λ₯˜ κ²€μΆœ λΆˆκ°€λŠ₯.
  • λ”°λΌμ„œ CRC μ„€κ³„μ—μ„œλŠ” λ°˜λ“œμ‹œ μ°¨μˆ˜κ°€ 1 이상인 닀항식을 선택해 κ²€μΆœλ ₯을 확보.
  • μ˜ˆμ‹œ:
    • CRC-4: x⁴ + x + 1 (0b10011)
    • CRC-8: x⁸ + xΒ² + x + 1 (0x07)
    • CRC-16: x¹⁢ + xΒΉΒ² + x⁡ + 1 (0x1021)
    • CRC-32: xΒ³Β² + … + 1 (0x04C11DB7)

μ΄λŸ¬ν•œ 닀항식듀은 IEEE, ITU λ“± ν‘œμ€€ν™” κΈ°κ΄€μ—μ„œ 였λ₯˜ κ²€μΆœ μ„±λŠ₯을 μˆ˜ν•™μ μœΌλ‘œ λΆ„μ„ν•œ ν›„ μ±„νƒλœ 것이닀.


7️⃣ CRC의 μˆ˜ν•™μ  ν‘œν˜„ μš”μ•½

단계 μˆ˜μ‹
솑신 데이터 μ€€λΉ„ T = M Γ— 2ⁿ
λ‚˜λ¨Έμ§€ 계산 R = T mod P(x)
전솑 데이터 T* = T + R
μˆ˜μ‹ μž 검증 T* Γ· P(x) = R’
였λ₯˜ νŒλ³„ R’ = 0 β†’ 정상, R’ β‰  0 β†’ 였λ₯˜

8️⃣ κ²°λ‘ 

βœ… CRCλŠ” Modulo-2 연산을 μ‚¬μš©ν•˜μ—¬ 데이터 전솑 쀑 λ°œμƒν•  수 μžˆλŠ” 단일 λΉ„νŠΈ 였λ₯˜, 닀쀑 λΉ„νŠΈ 였λ₯˜(2λΉ„νŠΈ, 3λΉ„νŠΈ) 및 Burst Errorλ₯Ό κ²€μΆœν•˜λŠ” κ°•λ ₯ν•œ 방식이닀.
βœ… CRCκ°€ 였λ₯˜λ₯Ό 잘 κ²€μΆœν•˜λŠ” μ΄μœ λŠ” 생성 닀항식 P(x)λ₯Ό μ–΄λ–»κ²Œ μ„ νƒν•˜λŠλƒμ— λ‹¬λ €μžˆμœΌλ©°, ν‘œμ€€ CRC 닀항식은 μ΄λŸ¬ν•œ 였λ₯˜ κ²€μΆœ λŠ₯λ ₯을 κ·ΉλŒ€ν™”ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆλ‹€.
βœ… λ”°λΌμ„œ CRCλŠ” λ„€νŠΈμ›Œν¬ 톡신, 데이터 μ €μž₯ μž₯치, 무선 톡신 λ“±μ—μ„œ 데이터 무결성을 κ²€μ¦ν•˜λŠ” 데 맀우 μ€‘μš”ν•œ 역할을 μˆ˜ν–‰ν•œλ‹€.


ν•„μš”ν•˜λ‹€λ©΄ μ‹€μ œ 예제(Modulo-2 λ‚˜λˆ—μ…ˆ)λ‚˜ νŠΉμ • CRC 닀항식 섀계 κ³Όμ •κΉŒμ§€ μžμ„Ένžˆ μΆ”κ°€λ‘œ λ‹€λ£° 수 μžˆμ–΄μš”. μ–Έμ œλ“  λŒ“κΈ€μ΄λ‚˜ λ¬Έμ˜μ£Όμ„Έμš”! πŸš€