순환 중복 검사: Difference between revisions

From CS Wiki
No edit summary
No edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
[[분류:네트워크]][[분류:컴퓨터 구조]]
[[분류:네트워크]][[분류:컴퓨터 구조]]
*CRC, Cyclic Redundancy Check
;CRC, Cyclic Redundancy Check
'''CRC'''는 데이터 통신에서 오류를 탐지하는 대표적인 방법으로, '''데이터 전송 중 발생한 오류'''를 효과적으로 검출하기 위해 사용된다. CRC는 주로 네트워크 통신과 디지털 저장 장치에서 데이터 무결성을 검사하는 데 사용된다.
 
== 기본 개념 ==
CRC는 생성 다항식(Generator Polynomial)이라는 고정된 값을 사용하여 데이터를 다항식처럼 취급하고, 이를 나눗셈 연산을 통해 오류를 검출한다. '''송신 측'''에서 데이터를 전송할 때, 그 데이터를 생성 다항식으로 나눈 나머지를 함께 전송한다. '''수신 측'''은 동일한 방식으로 계산된 나머지를 확인하여 전송 중 오류가 발생했는지 판단한다.
 
== 생성 다항식 ==
'''Generator Polynomial'''
 
생성 다항식은 '''특정 다항식을 이진수'''로 표현한 값이다. CRC 계산에서 이 다항식은 송신된 데이터를 나누기 위한 '''나눗셈의 제수''' 역할을 한다.
 
* 다항식의 길이는 사용하는 CRC의 종류에 따라 다르며, 대표적인 생성 다항식에는 CRC-8, CRC-16, CRC-32 등이 있다.
 
예를 들어, '''1011'''이라는 다항식은 다음과 같이 해석된다.
 
* 다항식: x<sup>3</sup>+x+1 → 이진수: 1011
** 여기서 x<sup>3</sup>, x, 1에 해당하는 자리에 1이 있고, 나머지 자리는 0으로 채운다.
 
== CRC 동작 과정 ==
 
# '''생성 다항식 선택''': 송신 및 수신 측에서 동일한 생성 다항식을 미리 정의한다. 예시에서는 생성 다항식으로 '''1011'''을 사용한다고 가정한다.
# '''송신 측에서 CRC 코드 생성''':
#* 데이터를 '''이진수'''로 표현한 후, '''생성 다항식'''을 사용해 나눗셈을 수행한다.
#* 데이터를 전송하기 전에 데이터 뒤에 생성 다항식의 길이에 해당하는 '''0'''을 붙여 나머지를 구한다.
#* 나머지가 '''CRC 코드'''가 되며, 이 코드를 데이터 뒤에 덧붙여 전송한다.
# '''수신 측에서 오류 검출''':
#* 수신된 데이터에 대해 동일한 생성 다항식으로 나눗셈을 수행한다.
#* 그 결과가 '''0'''이면 오류 없이 정확하게 전송된 것으로 간주하고, '''0이 아니면 오류'''가 발생한 것으로 판단한다.
 
== CRC 예시 ==
'''데이터: 1101, 생성 다항식: 1011'''
 
# '''데이터 뒤에 3개의 0 추가'''
#* 데이터 길이가 4비트, 생성 다항식이 4비트(다항식 차수 + 1)이므로, 데이터 뒤에 '''000'''을 추가한다.
#* 데이터는 이제 '''1101000'''이 된다.
# '''데이터를 생성 다항식으로 나눗셈'''
#* 데이터를 생성 다항식으로 나눗셈하여 나머지를 구한다. XOR 연산을 사용하여 수행한다.
#* 최종 나머지 값은 '''100'''이다.
# '''나머지를 데이터에 추가'''
#* 계산된 나머지인 '''100'''을 원래 데이터인 '''1101''' 뒤에 붙여 '''1101100'''을 전송한다.
 
'''수신 측에서 검증'''
 
# 수신 측에서는 '''1101100'''을 받는다.
# 동일한 생성 다항식 '''1011'''으로 나눗셈을 수행하여 나머지를 계산한다.
#* 나머지가 '''0'''이면 오류 없이 정확히 전송된 것으로 간주된다.
 
== CRC의 특징 ==
 
* '''오류 검출률''': CRC는 단일 비트 오류, 두 비트 오류, 연속적인 비트 오류 등을 감지할 수 있으며, 높은 오류 검출 확률을 가지고 있다.
* '''빠른 계산''': XOR 연산을 사용하여 연산 속도가 빠르고, 하드웨어 및 소프트웨어에서 효율적으로 구현 가능하다.
* '''오류 수정 불가''': CRC는 '''오류 탐지'''에 특화되어 있으며, 오류를 '''수정'''할 수는 없다. 오류가 발견되면 데이터를 재전송하는 방식으로 대응한다.

Latest revision as of 12:50, 24 October 2024

CRC, Cyclic Redundancy Check

CRC는 데이터 통신에서 오류를 탐지하는 대표적인 방법으로, 데이터 전송 중 발생한 오류를 효과적으로 검출하기 위해 사용된다. CRC는 주로 네트워크 통신과 디지털 저장 장치에서 데이터 무결성을 검사하는 데 사용된다.

기본 개념[edit | edit source]

CRC는 생성 다항식(Generator Polynomial)이라는 고정된 값을 사용하여 데이터를 다항식처럼 취급하고, 이를 나눗셈 연산을 통해 오류를 검출한다. 송신 측에서 데이터를 전송할 때, 그 데이터를 생성 다항식으로 나눈 나머지를 함께 전송한다. 수신 측은 동일한 방식으로 계산된 나머지를 확인하여 전송 중 오류가 발생했는지 판단한다.

생성 다항식[edit | edit source]

Generator Polynomial

생성 다항식은 특정 다항식을 이진수로 표현한 값이다. CRC 계산에서 이 다항식은 송신된 데이터를 나누기 위한 나눗셈의 제수 역할을 한다.

  • 다항식의 길이는 사용하는 CRC의 종류에 따라 다르며, 대표적인 생성 다항식에는 CRC-8, CRC-16, CRC-32 등이 있다.

예를 들어, 1011이라는 다항식은 다음과 같이 해석된다.

  • 다항식: x3+x+1 → 이진수: 1011
    • 여기서 x3, x, 1에 해당하는 자리에 1이 있고, 나머지 자리는 0으로 채운다.

CRC 동작 과정[edit | edit source]

  1. 생성 다항식 선택: 송신 및 수신 측에서 동일한 생성 다항식을 미리 정의한다. 예시에서는 생성 다항식으로 1011을 사용한다고 가정한다.
  2. 송신 측에서 CRC 코드 생성:
    • 데이터를 이진수로 표현한 후, 생성 다항식을 사용해 나눗셈을 수행한다.
    • 데이터를 전송하기 전에 데이터 뒤에 생성 다항식의 길이에 해당하는 0을 붙여 나머지를 구한다.
    • 나머지가 CRC 코드가 되며, 이 코드를 데이터 뒤에 덧붙여 전송한다.
  3. 수신 측에서 오류 검출:
    • 수신된 데이터에 대해 동일한 생성 다항식으로 나눗셈을 수행한다.
    • 그 결과가 0이면 오류 없이 정확하게 전송된 것으로 간주하고, 0이 아니면 오류가 발생한 것으로 판단한다.

CRC 예시[edit | edit source]

데이터: 1101, 생성 다항식: 1011

  1. 데이터 뒤에 3개의 0 추가
    • 데이터 길이가 4비트, 생성 다항식이 4비트(다항식 차수 + 1)이므로, 데이터 뒤에 000을 추가한다.
    • 데이터는 이제 1101000이 된다.
  2. 데이터를 생성 다항식으로 나눗셈
    • 데이터를 생성 다항식으로 나눗셈하여 나머지를 구한다. XOR 연산을 사용하여 수행한다.
    • 최종 나머지 값은 100이다.
  3. 나머지를 데이터에 추가
    • 계산된 나머지인 100을 원래 데이터인 1101 뒤에 붙여 1101100을 전송한다.

수신 측에서 검증

  1. 수신 측에서는 1101100을 받는다.
  2. 동일한 생성 다항식 1011으로 나눗셈을 수행하여 나머지를 계산한다.
    • 나머지가 0이면 오류 없이 정확히 전송된 것으로 간주된다.

CRC의 특징[edit | edit source]

  • 오류 검출률: CRC는 단일 비트 오류, 두 비트 오류, 연속적인 비트 오류 등을 감지할 수 있으며, 높은 오류 검출 확률을 가지고 있다.
  • 빠른 계산: XOR 연산을 사용하여 연산 속도가 빠르고, 하드웨어 및 소프트웨어에서 효율적으로 구현 가능하다.
  • 오류 수정 불가: CRC는 오류 탐지에 특화되어 있으며, 오류를 수정할 수는 없다. 오류가 발견되면 데이터를 재전송하는 방식으로 대응한다.