๋ฐ˜๊ฐ€์›Œ์š”! ํ—ˆ๋ธŒ์ž…๋‹ˆ๋‹ค!

์ €๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ํ˜„๋Œ€ ์—ฐ๊ธˆ์ˆ ์‚ฌ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋Š๋‚€ ์ ๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด/์ด๋ชจ์ €๋ชจ

CRC๋ž€?

mmin.h 2020. 4. 29. 23:34

CRC๋ž€?

CRC(Cyclic Redundancy Checking) ์ˆœํ™˜ ์ค‘๋ณต๊ฒ€์‚ฌ๋Š” ์—๋Ÿฌ๊ฒ€์ถœ ๋Šฅ๋ ฅ์ด ์šฐ์ˆ˜ํ•œ ์ˆœํšŒ๋ถ€ํ˜ธ์˜ ์ผ์ข…์ด๋‹ค. ์ˆœํšŒ๋ถ€ํ˜ธ๋ž€ ์„ ํ˜• ๋ธ”๋ก ๋ถ€ํ˜ธ(๋ถ€ํ˜ธ์–ด ์ง‘ํ•ฉ์ด ์„ ํ˜• ๋ฒกํ„ฐ๊ณต๊ฐ„์„ ํ˜•์„ฑํ•˜๋Š” ๋ถ€ํ˜ธ)์˜ ์ผ์ข…์œผ๋กœ์„œ ์ฃผ์š”ํŠน์ง•์œผ๋ก  ์ž˜ ์ •์˜๋œ ์ˆ˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋ถ€ํ˜ธํ™”์— ์šฉ์ดํ•˜๋ฉฐ ๋งค์šฐ ํšจ์œจ์ ์ธ ๋ณตํ˜ธํ™” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

CRC์˜ ํŠน์ง•

1.     ์‚ฐ๋ฐœ ์—๋Ÿฌ(Random Error) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์—ฐ์ง‘ ์—๋Ÿฌ(Burst Error)์—์„œ๋„ ๊ฒ€์ถœ ๋Šฅ๋ ฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค. ์—ฐ์ง‘์—๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ํ•œ ๋ฌด๋ฆฌ์˜ ๋ฐ์ดํ„ฐ์— ์ง‘๋‹จ์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด์™€ ๋ฐ˜๋Œ€๋กœ ์—ฌ๊ธฐ์ €๊ธฐ ์‚ฐ๋ฐœ์ ์œผ๋กœ ๋Œ„๋คํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์‚ฐ๋ฐœ ์—๋Ÿฌ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

2.     ์ˆœํšŒ๋ถ€ํ˜ธ์— ๊ธฐ๋ฐ˜ํ•œ ์˜ค๋ฅ˜๊ฒ€์ถœ๋ถ€ํ˜ธ์ด๋‹ค. ์†ก์‹  ์ธก์—์„œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ํŠน์ • ๋‹คํ•ญ์‹์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒฐ๊ณผ๋ฅผ ์—ฌ๋ถ„์˜ FCS์— ๋ง๋ถ™์—ฌ ๋ณด๋‚ด๋ฉด, ์ˆ˜์‹ ์ธก์—์„œ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์™€์˜ ์ผ์น˜์„ฑ์œผ๋กœ ์˜ค๋ฅ˜๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์—ฌ๊ธฐ์„œ FCS๋ž€(Frame Check Sequence) ํ”„๋ ˆ์ž„ ๋ ๋ถ€๋ถ„์— ์ˆ˜์‹ ์ธก์˜ ์—๋Ÿฌ๊ฒ€์ถœ์„ ๋•๊ธฐ์œ„ํ•ด ์‚ฝ์ž…ํ•˜๋Š” ํ•„๋“œ์ด๋‹ค. ์ˆ˜์‹์ธก์€ ์ž์‹ ์ด ๊ฐ–๊ณ ์žˆ๋Š” FCS์™€ ์ „์†ก๋˜์–ด์˜จ ํ”„๋ ˆ์ž„์˜ FCS์™€ ๋น„๊ตํ•˜์—ฌ ์—๋Ÿฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๊ณ  ์—๋Ÿฌ ํ™•์ธ์‹œ์—๋Š” ํ•ด๋‹น ํ”„๋ ˆ์ž„์„ ํ๊ธฐํ•˜๊ณ  ์†ก์‹ ์ธก์— ์žฌ์ „์†ก์„ ์š”๊ตฌํ•œ๋‹ค.

 

 

CRC ์ƒ์„ฑ ๋ฐ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•

1.    ์†ก์‹ ๋‹จ

์ „์†กํ•  ์›๋ž˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„(k bit)์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ CRC๋‹คํ•ญ์‹์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ทธ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๋’ค์— FCS(n-k bits)๋กœ ๋ถ™์ธ๋‹ค. ์ด๋–„, ๊ทธ ๊ฒฐ๊ณผ ํ”„๋ ˆ์ž„(์›๋ž˜์˜ ๋ฐ์ดํ„ฐ + FCS)์ด ๋ฏธ๋ฆฌ ์ •์˜๋œ CRC ๋‹คํ•ญ์‹์— ์˜ํ•˜์—ฌ ์ •ํ™•ํžˆ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ํ”„๋ ˆ์ž„(์›๋ž˜์˜ ๋ฐ์ดํ„ฐ + FCS)(n bits)์„ ์†ก์‹ ํ•œ๋‹ค.

 

2.    ์ˆ˜์‹ ๋‹จ

์ˆ˜์‹ ๋œ ํ”„๋ ˆ์ž„ (n bits)์„ ๋ฐ›์€ ํ›„์— CRC ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ˆ˜์‹ ๋œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹  ์‹œ์™€ ๊ฐ™์€ ๋ฏธ๋ฆฌ ์ •์˜๋œ CRC ๋‹คํ•ญ์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋‚˜๋จธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.

์˜ค๋ฅ˜ ๊ฒ€์ถœ ๋ฐฉ๋ฒ•์€ ์ˆ˜์‹ ๋‹จ์—์„œ ์ž‰์—ฌ๋ถ„(FCS)์„ ํฌํ•จํ•œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜๋œ CRC ๋‹คํ•ญ์‹์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๊ณ  ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ์•„๋‹Œ ์ˆ˜๊ฐ€ ๋˜๋ฉด, ์ „์†ก ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

๋‹คํ•ญ์‹์˜ ํ‘œํ˜„

์˜ˆ๋กœ x4+x+1 ์ด๋ž€ ๋‹คํ•ญ์‹์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

-        0x3 = 0b0011 : x4+ 0x3+0x2+1x1+1x0 (MSB – ์šฐ์„ ์ฝ”๋“œ)

-        0xC = 0b1100 : 1x0+1x1+0x2+0x3+x4 (LSB – ์šฐ์„ ์ฝ”๋“œ)

-        0x9 = 0b1001 : 1x4+0x3+0x2+1x1+x0 (Koopman ํ‘œ์‹œ)

-       

๋‹คํ•ญ์‹(representations)

์ •์ƒ

(normal)

์—ญ๋ฐฉํ–ฅ

(reversed)

์—ญ๋ฐฉํ–ฅ์˜ ์—ญ์ˆ˜

(reversed reciprocla)

0x3

0xC

0x9

 

CRC ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•

- ๋Œ€์ƒ ํ•ญ๋ชฉ๋“ค

์›๋ž˜ ๋ฐ์ดํ„ฐ : D(x) (k bits)

์ž‰์—ฌ ๋ฐ์ดํ„ฐ : F(x) (n-k bits)

์ „์†ก ๋ฐ์ดํ„ฐ : T(x) (n bits)

๋ฏธ๋ฆฌ ์ •์˜๋œ CRC ๋‹คํ•ญ์‹ (Divisor) : P(x) (n-k+1 bits)

(n–k+1 bits)์˜ ๋น„ํŠธ ํŒจํ„ด (์ƒ์„ฑ ๋‹คํ•ญ์‹)

๋‚˜๋ˆ—์…ˆ ๋ชซ (Quotient) : Q(x) (k bits)     (๋ฒ„๋ ค์ง)

๋‚˜๋จธ์ง€ (Reminder) : R(x) (n-k bits)   (๋ง๋ถ™์—ฌ์ง)

 

- ๋‹คํ•ญ์‹ ํ‘œํ˜„

(์› ๋ฐ์ดํ„ฐ์˜ prescale)   D'(x) = xn-kD(x)

์›๋ž˜ ๋ฐ์ดํ„ฐ์— ์ƒ์„ฑ ๋‹คํ•ญ์‹์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ˆ˜๋ฅผ ๊ณฑํ•œ๋‹ค.

(์ฆ‰, ๊ทธ๋งŒํผ 0 ๊ฐ’์„ ๋ง๋ถ™์ด๋Š” ๊ฒƒ)

 

(์ด๊ฒƒ์„ ์ƒ์„ฑ๋‹คํ•ญ์‹์œผ๋กœ ๋‚˜๋ˆ”) D'(x)/P(x) = xn-kD(x)/P(x)

xn-kD(x)/P(x) = Q(x) + R(x)/P(x)

xn-kD(x) = Q(x)P(x) + R(x)

 

(์œ„์—์„œ xn-kD(x)์„ ์ „์†ก)   T(x) = xn-kD(x) + R(x)

T(x) = xn-kD(x) + R(x) = Q(x)P(x)

์ฆ‰, ์ „์†ก ๋น„ํŠธ ํŒจํ„ด T(x)๊ฐ€ ์ƒ์„ฑ๋‹คํ•ญ์‹ P(x)์— ์˜ํ•ด ์ •ํ™•ํžˆ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง„๋‹ค.

 

-CRC ๊ณ„์‚ฐ ๋ฐ ๋น„ํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์€, ์บ๋ฆฌ(overflow ๋ฐ borrow)๋ฅผ ๋ฌด์‹œํ•˜๊ณ , XOR (mod-2) ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋‚˜๋ˆ„๋Š” ์ˆ˜์ธ ์ œ์ˆ˜(Divisor)๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ด์ง„ ์†Œ์ˆ˜(Divisor)์— ์˜ํ•ด ๋‚˜๋ˆˆ๋‹ค.

        ์ด๋•Œ์˜ ์ œ์ˆ˜์˜ ๊ธธ์ด๋Š” `(๋ง๋ถ™์ด๋Š” ๋น„ํŠธ์ˆ˜ n-k) + 1

๋‚˜๋จธ์ง€(Reminder)๋Š” ๋‚˜๋ˆ—์…ˆ์˜ ๋‚˜๋จธ์ง€(Reminder)๋ฅผ ํ”„๋ ˆ์ž„์— ๋ง๋ถ™์—ฌ ์†ก์‹ ํ•œ๋‹ค.

์ด๋•Œ์˜ ๋‚˜๋จธ์ง€ ๊ธธ์ด๋Š” `n-k`์ด๋‹ค.

 

๊ณ„์‚ฐ์˜ˆ์‹œ