네트워크 프로토콜 관련해서 시험해 보았습니다.
프로토콜의 맨 마지막 형식은 CRC로 패킷 일부에 대한 CRC를 계산하도록 되어 있고, 사용하는 형식은 "표준 CRC 16"이라고 되어 있었습니다.
CRC 16 관련 코드를 찾아서 구현하고 서버로 패킷을 전송했습니다.
그런데 response packet에서 CRC 16 error를 확인할 수 있었습니다.
코드를 다시 한번 확인해 보아도 이유를 알 수가 없었습니다.
다행시 response packet에서 CRC 필드를 확인할 수 있고, 제가 사용하는 코드에 넣어서 시험했더니 받은 CRC 값과 계산한 CRC 값이 틀린겁니다.
검색을 해 봐도 이유를 확인하기 어렵고 ㅠㅠ
그러다 만난 사이트입니다.
사이트에 접속하면 아래와 같은 화면을 볼 수 있습니다.
(1) 입력한 데이터를 Hex로 확인합니다. Byte align이 맞지 않는 경우는 (3)의 9를 표시하는 방법을 참고하면 되겠습니다.
(2) 맨 아래 Processed data 필드 (3)를 활성화합니다. 실제 계산에 사용하는 입력 데이터를 확인할 수 있습니다.
(3) 실제 계산에 사용하는 데이터입니다.
(4) CRC 계산 방법을 선택합니다.
CRC16을 선택했는데, 사용하는 Algorithm이 아래와 같이 매우 다양했습니다.
입력 packet의 CRC와 일치하는 algorithm을 확인해보니 CRC-16/MODBUS였습니다.
이를 검색해서 코드를 사용했더니 CRC 에러가 발생하지 않았습니다.
- End -
반응형
'프로그래밍 > Tips & sites' 카테고리의 다른 글
[Obsidian] Google drive와 연동하기 (0) | 2022.04.03 |
---|---|
[Tips] 파워포인트 매크로 (0) | 2019.12.28 |
[Tips] VIM (0) | 2019.12.17 |
[Tips] Notepad++ (0) | 2019.12.15 |