:: 진공에 대해 알려주마.

CRC16/CCITT-FALSE 본문

OVER VENT

CRC16/CCITT-FALSE

하이백 2024. 2. 26. 21:23

"This protocol uses a 16 bit CRC (CRC-CCITT (0xFFFF), nonreflected)."

통신 프로그램을 만들려고 보니 이렇단다. 뭐지 기존에 내가 알던 CRC(Cyclic Redundancy Check)랑 뭐가 다른 거지. 그 뒤에 붙어 있는 CCITT는 또 뭐야!! 

결론은 내가 사용하던 것이 그것이고 메뉴얼에 첨부된 계산법을 이용하여 프로토콜을 만들고 하다 보니 CRC에 관련한 자세한 내막을 몰랐던 거였다. CRC를 계산하는 아주 많은 method가 존재한다. 그중에 하나인 것이다. 그리고 CCITT (Consultative Committee on International Telegraphy and Telephony, 국제전신전화 자문위원)는 규격 중 하나를 만든 곳으로 만든 협회의 이름으로 네이밍 한 것이다.

CRC에는 여러 가지 method(공식)이 있다. 필요한 것을 찾아 계산하여 packet에 넣어주면 된다. 다음은 16 비트용 CRC를 위한 CRC 16 Family를 기술한 사이트이다. 
http://wiki.hash.kr/index.php/CRC-16

 


 

시리얼 혹은 소켓 통신의 프로토콜(Protocol)을 보면 parity bit, checksum 혹은 CRC 등이 포함되어 있다. 이는 송수신하는 패킷의 정합성(자료의 무결성)을 확보하기 위한 검증 방법이다. 보낸 패킷이 noise 등으로 손상되지 않았다는 것을 확인하는 방법이다. 

요즘에는 장치와 부품들의 성능이 우수하여 통신에 영향을 주는 항목들이 별로 없다. 그러나 예전에는 환경이 열악하여 접촉불량, 노이즈, 간섭 그리고 거리 등으로 통신선에 신호를 방해하는 요소가 많았다. 지금도 간혹 발생하긴 한다. 이러한 방해가 있었는지를 검증하기 위하여 보내는 패킷마다 검증할 수 있는 내용을 실어 보내고 받는 쪽에서도 같은 방식으로 계산을 하여 보낸 값을 검증을 하도록 하는 것이다.

양쪽에서 미리 계산법을 정하고 보내는 쪽에서 보낼 데이터를 계산하여 같이 보내고 받는 쪽에 선 받은 데이터만 계산하여 보낸 쪽의 계산 결과와 내가 계산한 결과가 같아야 이상이 없는 것으로 보고 다음 절차를 시작한다.

결국 CRC16/CCITT는 이 방식으로 계산하여 CRC 코드를 보낼 테니 너도 같은 방식으로 계산하여 검증하라는 것으로 매뉴얼에는 계산하는 방식도 함께 기술한다.

Send packet

 

실제 소스코드가 필요하신 분은 아래 주소를 참고하시라. 다양한 CRC16 알고리즘을 구현해 놓았다.
https://yogyui.tistory.com/entry/CCRC-16-%EA%B3%84%EC%82%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C

CRC는 통신용으로 패킷을 전송하는 경우 보내는 내용의 정합성을 검증하기 위한 체크 비트 역할을 한다. 보낸 데이터가 맞는지 데이터를 전부 더하거나 빼거나 등등하여 얻은 결과값을 실어 보내 받는쪽에서도 이를 다시 계산해 같이 보낸  값과 비교하여 검증하는 방식이다.

 


 

시리얼통신(Serial communication)에서 parity bit의 역할에 대해 찾아보았다. 경험상 해당 비트를 none으로 설정하고 사용치 않는다. 받은 데이타를 파싱(parsing)하여 원하는 규격이 아니면 버리면 된다. 굳이 바이트 단위로 받은 데이타를 검증할 필요가 없다. 

아래는 시리얼통신(RS-232)의  통신 규격을 표시한 것이다. 가장 흔하게 사용하는 9600N81 규격과 9600E72를 비교하여 표시하여 보았다. Start bit와 Stop bit는 하드웨어가 자동으로 추가하여 보내져 사용자가 관여할 일은 없다. 

Serial protocol 비교

 

위에서 보듯 보낸 데이터를 검증하기 위하여 Parity bit를 사용할 수 있다. Parity bit는 none, odd, even으로 구성되며 보내는 data bit 중에 1의 개수를 카운트하여 그 개수가 홀수, 짝수인지를 판별하여 0, 1로 지정하게 된다. 

 

'OVER VENT' 카테고리의 다른 글

PHENOMENON 005  (0) 2022.12.09
PHENOMENON 004  (0) 2022.11.20
BYTE, WORD, UINT, DWORD  (0) 2022.09.03
PCR, 신속항원검사, 선별진료소  (0) 2022.02.17
윈도우 엑스피  (0) 2021.12.29
Comments