일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자본주의
- matplot
- c#
- 딥러닝
- vscode
- 텐서플로우
- 오라클
- PYTHON MSSQL
- Visual Studio Code
- sql developer
- django
- 티스토리 초대장
- rs422
- MSSQL PYTHON
- rs485
- 장고
- 크롤링
- pymssql
- MX Component
- Python
- 윈도우10
- M2M
- MEAN Stack
- scrapy
- Serial
- windows10
- tensorflow
- 파이썬
- oracle
- MSSQL
Archives
- Today
- Total
안까먹을라고 쓰는 블로그
[통신관련] CheckSum, BCC 란? 본문
반응형
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");
반응형
'Language > C#' 카테고리의 다른 글
[C#] LINQ (0) | 2021.12.31 |
---|---|
VisualStudio 에서 CrystalReport 수정하기(feat. Windows10) (0) | 2021.08.04 |
[C#] WINFORM - 구글맵 연동 (0) | 2021.07.26 |
[C#] 시큐어코딩 - Cross Site Scripting (XSS) (0) | 2020.09.14 |
[C#] 딜레이 주기 (Feat. 윈도우폼에 영향없이) (0) | 2020.09.14 |
Comments