순환 중복 검사(巡環重復檢査), CRC(cyclic redundancy check)는 네트워크 등을 통하여 데이터를 전송할 때 전송된 데이터에 오류가 있는지를 확인하기 위한 체크값을 결정하는 방식을 말한다.

데이터를 전송하기 전에 주어진 데이터의 값에 따라 CRC 값을 계산하여 데이터에 붙여 전송하고, 데이터 전송이 끝난 후 받은 데이터의 값으로 다시 CRC 값을 계산하게 된다. 이어서 두 값을 비교하고, 이 두 값이 다르면 데이터 전송 과정에서 잡음 등에 의해 오류가 덧붙여 전송된 것 임을 알 수 있다.

CRC는 이진법 기반의 하드웨어에서 구현하기 쉽고, 데이터 전송 과정에서 발생하는 흔한 오류들을 검출하는 데 탁월하다. 하지만 CRC의 구조 때문에 의도적으로 주어진 CRC 값을 갖는 다른 데이터를 만들기가 쉽고, 따라서 데이터의 무결성을 검사하는 데는 사용될 수 없다. 이런 용도로는 MD5 등의 함수들이 사용된다.

중략
..

- 출처 : 위키피디아





CRC는 데이터 송수신에 있어서 오류가 있는지 없는지 검출하는 방식입니다. 검출 능력대비 오버헤드가 적은 편이라 많이 사용되는데 1학기에 프로젝트로써 진행해봤습니다.

CRC에 관한 동작 원리는 인터넷에 검색하면 잘 나오니 생락하겠습니다.


CRC는 젯수(polynomial)가 어떻게 구성되느냐에 따라 에러 검출 능력이 정해지는데 이 값이 표준으로 정해져 있습니다.
crc-32의 경우 x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 입니다.
C언에서 처리하기 쉽게 이진 패턴으로 바꾼후 이를 16진수로 바꿔주면 0x104c11db7가 됩니다.

자세히 보면 0x 1   04c1   1db7, 딱 한자리 차이로 32bit integer로 처리가 불가능합니다. 저는 직접 데이터 앞부분부터 한비트씩 피젯수 변수에 넣어주면서 나줘 주는 방식을 썼는데,

그냥 integer 자료형으로 변수를 생성하니 제대로 안돌아 갔죠.

찾아보니 long long 자료형을 쓰면 32bit 컴퓨터 환경에서도 64 bit integer가 사용 가능합니다.

뭐 이것만 해결하고 나면 나머진 그냥 나눗셈 잘 되게 해주기만 하면 되니 큰 문제 없을 껍니다. 다 짜놓은거 대충 200줄 내외이니 금방 하실수 있을 꺼에요.

 
아래는 제가 만든 프로그램 실행 화면 입니다.

저작자 표시 비영리 변경 금지
신고
Posted by Pric


TAG ,

댓글을 달아 주세요

  1. Favicon of http://oxycodonefr.magicrpm.com/ BlogIcon Robertsa 2014.09.08 15:08  댓글주소  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.