관리 메뉴

안까먹을라고 쓰는 블로그

[통신관련] CheckSum, BCC 란? 본문

Language/C#

[통신관련] CheckSum, BCC 란?

YawnsDuzin 2021. 8. 4. 14:58

 

반응형
ckSum 이란? (BCC 동으로 판단)

 - 통신패킷의 헤더 내 포함되어 있는 값의 검사합으로 간단하게 오류를 검출하는 방법입니다.
   이 값을 통해 네트워크를 경유하여 전송 된 데이터의 무결성을 검사할 수 있습니다.
   (체크섬 표준은 RFC1071이 있다.)

 

체크섬의 계산은 아래와 같이 진행된다.
구분 내용
1 데이터를 2Byte(16진수, Hex) 단위로 나눠서 더한다.
2 덧셈결과가 2Byte를 초과하면 올림수(Carry)를 하위 바이트에 더한다. (2DE46 -> DE46 + 0002 = DE48)
3 덧셈결과에 1의 보수를 취한다. (0은 1로, 1은 0으로 치환)

 

IP Header : 4500 003c 1c46 4000 4006 0000(초기화된 체크섬 필드) ac10 0a63 ac10 0a0c

4500 + 003c + 1c46 + 4000 + 4006 + 0000 + ac10 + 0a63 + ac10 + 0a0c = 0002 4e17
0002 + 4e17 = 4e19
~4e19 = 
b1e6

IP Header : 4500 003c 1c46 4000 4006 b1e6 ac10 0a63 ac10 0a0c

수신 측에서는 체크섬을 포함하여 다시 체크섬을 구한다. IP 패킷에 문제가 없을 경우 수신 측 체크섬의 값은 0xffff(4e19 + b1e6)의 1의 보수인 0x0이 된다.

 

[출처] IP Header Checksum[헤더 체크섬]|작성자 Famous

 


■ ics900_PRO Scale 기준

 1. 합계 (STX ~ BCC전까지)
    STX(2) + ID NO(2) + COMMAND(1-2) + COMMAND(3-4) + DATA(1-2) + DATA(3-4) + DATA(5-6) + DATA(7-8) + DATA(9-10) + DATA(11-12) + DATA(13-14)
 2. 127(OX7F)로 나눠서 나머지 구하기
    합계 MOD 127(Ox7F)
 3. 2번의 구한 값을 136(Ox88)로 X-OR 하기
    (1은 0으로, 0은 1로 변환)
    
    
    ---------------------------------------------------------------------------------------
// STX(2) + ID NO.(2) + COMMAND(4) + DATA(14) + BCC(1) + ETX
// - STX(2)      - STX
// - ID NO.(2)   - "0"
// - COMMAND(4)  - "RTIM"
// - DATA(14)    - 0000012345.678
// - BCC(1)      - 
// - ETX(2)      - ETX

byte[] bTemp1 = new byte[] { 0x02, 0x30, 0x30, 0x52, 0x54, 0x49, 0x4D, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2E, 0x36, 0x37, 0x38 };
int iTemp1 = 0, iTemp2 = 0, iTemp3 = 0;

// 1. 합계 (iTemp1 = 928)
for (int i = 0; i < bTemp1.Length; i++) iTemp1 += bTemp1[i];    

// 2. 127(OX7F)로 나눠서 나머지 구하기 (iTemp2 = 39)
iTemp2 = (short)(iTemp1 % 127);

// 3. 2번의 구한 값을 136(Ox88)로 X-OR 하기 (iTemp3 = 137, sTemp = "AF")
iTemp3 = iTemp2 ^ 136;
string sTemp = iTemp3.ToString("X");

 

반응형
Comments