장비 통신 프로토콜이란? Packet·Command·Response 구조 이해하기
장비끼리 대화하려면 왜 통신 프로토콜이 필요한가#
1장 선을 연결했다고 장비가 서로 대화할 수 있는 것은 아니다#
RS-232, RS-422, RS-485 또는 Ethernet으로 두 장비를 연결했다고 생각해보겠습니다.
물리적으로는 연결되어 있습니다.
장비 A
│
│ RS-485
│
장비 BBaud Rate도 같습니다.
9600-8-N-1A/B 배선도 정상입니다.
그런데 장비 A가 보내는 명령을 장비 B가 이해하지 못합니다.
왜 그럴까요?
전기적으로 데이터를 전달할 수 있다는 것과 그 데이터의 의미를 이해할 수 있다는 것은 다른 문제이기 때문입니다.
1.1 RS-485는 대화 규칙을 알려주지 않는다#
RS-485가 알려주는 것은 대략 다음과 같은 영역입니다.
어떤 전기 신호를 사용할 것인가
차동 신호를 어떻게 전달할 것인가
여러 Transceiver를 어떻게 연결할 것인가하지만 다음은 알려주지 않습니다.
0x10은 무슨 명령인가?
첫 번째 Byte는 Address인가?
Packet은 어디서 시작하는가?
Data Length는 어디에 있는가?
오류는 어떻게 확인하는가?
정상 처리되면 무엇을 응답하는가?이 규칙을 정하는 것이 통신 프로토콜입니다.
2장 프로토콜은 장비 사이의 언어다#
사람끼리 대화하려면 같은 언어와 문법이 필요합니다.
장비도 마찬가지입니다.
예를 들어 Controller가 다음 데이터를 보냅니다.
02 05 10 01 00 A7 03사람에게는 단순한 Hexadecimal 숫자처럼 보입니다.
하지만 Protocol을 알고 있다면 다음과 같이 해석할 수도 있습니다.
02
→ Start
05
→ Device Address
10
→ Command
01 00
→ Data
A7
→ Checksum
03
→ End즉 같은 Byte라도 약속을 알고 있어야 의미가 생깁니다.
3장 Packet은 문장이고 Protocol은 문법이다#
둘을 구분하면 이해하기 쉽습니다.
Packet 또는 Frame은 실제로 전달되는 데이터 덩어리입니다.
Protocol은 그 Packet을 어떻게 만들고 해석할지 정한 규칙입니다.
예:
[STX][ADDRESS][COMMAND][LENGTH][DATA][CHECKSUM][ETX]이라는 Packet 구조가 있다고 하겠습니다.
Protocol 문서는 각각의 Field가 무엇을 의미하는지 정의합니다.
| Field | 역할 |
|---|---|
| STX | Frame 시작 |
| Address | 대상 장비 |
| Command | 수행할 명령 |
| Length | Data 길이 |
| Data | 실제 전달 내용 |
| Checksum | 오류 검출 |
| ETX | Frame 종료 |
따라서 Packet을 캡처했다고 해서 바로 내용을 이해할 수 있는 것은 아닙니다.
Protocol Specification이 필요합니다.
4장 장비 통신의 기본은 Command와 Response다#
산업 장비 통신에서는 흔히 다음 구조를 사용합니다.
Controller
│
│ Command
▼
Device
│
│ Response
▼
Controller예를 들어 중앙 Controller가 Gate Controller에 상태를 묻습니다.
GET_STATUS장비가 응답합니다.
STATUS_OK실제 Binary Protocol에서는 다음처럼 표현될 수 있습니다.
TX
02 01 20 00 21 03
RX
02 01 20 01 00 22 03사람이 읽기 어렵더라도 Protocol 문서를 이용하면 각 Byte의 의미를 해석할 수 있습니다.
4.1 모든 Command가 Response를 갖는 것은 아니다#
Protocol에 따라:
Request → Response구조를 사용할 수도 있고:
Event → 일방 전송방식을 사용할 수도 있습니다.
예를 들어 Sensor가 차량을 감지할 때:
CAR_DETECTEDEvent를 Controller에 비동기적으로 전송할 수 있습니다.
따라서 장비 Protocol을 분석할 때:
누가 먼저 송신하는가?
응답이 반드시 있는가?
장비가 스스로 Event를 보내는가?도 확인해야 합니다.
5장 Device Address는 누구에게 보내는 데이터인지 알려준다#
RS-485처럼 여러 장비가 하나의 Bus를 공유한다면 Address가 특히 중요합니다.
예:
Master
│
├─ Device 1
├─ Device 2
├─ Device 3
└─ Device 4Master가:
05 10 01 ...을 보냈다고 가정하겠습니다.
Protocol에서 첫 번째 Byte가 Device Address라면:
05번 장비만 응답하도록 만들 수 있습니다.
5.1 Address도 RS-485가 정의하지 않는다#
RS-485 자체에는:
Device Address개념이 없습니다.
Address는:
Modbus RTU
BACnet
제조사 전용 Protocol같은 상위 Protocol이 정의합니다.
그래서 같은 RS-485 Cable을 사용하는 두 장비라도 Protocol이 다르면 서로 대화할 수 없습니다.
6장 Header와 Payload를 구분하면 Packet이 보이기 시작한다#
Packet은 보통 크게 다음처럼 나눌 수 있습니다.
Header
↓
Payload
↓
TrailerHeader#
Packet을 해석하는 데 필요한 정보를 포함할 수 있습니다.
예:
Start Marker
Address
Command
Length
VersionPayload#
실제로 전달하려는 Data입니다.
예:
카드 ID
온도
차량번호
Sensor 상태
Device 설정값Trailer#
Packet 끝이나 무결성을 확인하는 정보가 들어갈 수 있습니다.
Checksum
CRC
ETX모든 Protocol이 이 구조를 그대로 사용하는 것은 아니지만 분석할 때 매우 유용한 관점입니다.
7장 Binary Protocol과 Text Protocol은 무엇이 다른가#
장비 Protocol은 크게 Binary와 Text 형태로 나누어 생각할 수 있습니다.
7.1 Binary Protocol#
예:
02 01 10 03 41 42 43 9A 03장점:
Data 크기가 작음
처리가 빠름
Embedded 장비에 적합단점:
사람이 바로 읽기 어려움
Protocol 문서 없이는 분석이 어려움7.2 Text Protocol#
예:
DEVICE=01;CMD=STATUS;VALUE=OK또는 JSON:
{
"deviceId": 1,
"command": "status"
}장점:
사람이 읽기 쉬움
Debugging 편리
확장하기 쉬움단점:
Binary보다 Data 크기가 커질 수 있음
Parsing 비용이 증가할 수 있음어떤 방식이 무조건 더 좋은 것은 아닙니다.
장비 성능, Network 환경, 개발 편의성 등을 고려해 결정합니다.
8장 ASCII Protocol도 장비 통신에서 많이 사용한다#
Text Protocol이 항상 JSON을 의미하는 것은 아닙니다.
Legacy Device에서는 간단한 ASCII Protocol을 많이 사용합니다.
예:
<STX>OPEN,01<ETX>또는:
#STATUS,03\r\n처럼 구성할 수 있습니다.
여기에서도 Protocol 문서는 다음을 정의해야 합니다.
Message 시작 문자는 무엇인가?
Field 구분자는 무엇인가?
Command 이름은 무엇인가?
줄 끝은 CR인가 LF인가?
Checksum이 있는가?9장 Checksum과 CRC는 데이터가 깨졌는지 확인한다#
장거리 Serial Communication에서는 Noise나 Timing 문제 때문에 Data가 손상될 수 있습니다.
예:
송신
01 10 05 7A
수신
01 10 04 7AByte 하나가 달라졌습니다.
이런 문제를 검출하기 위해 Protocol은:
Checksum
LRC
CRC등을 사용할 수 있습니다.
9.1 Checksum과 CRC는 같은 것은 아니다#
Checksum은 여러 방식이 존재합니다.
예:
Byte 합계
XOR
보수CRC 역시 다양한 Polynomial과 초기값을 사용할 수 있습니다.
따라서:
CRC를 사용한다.라는 정보만으로는 부족합니다.
다음까지 확인해야 할 수 있습니다.
Polynomial
Initial Value
Byte Order
Final XOR
Reflection 여부Protocol 문서가 중요한 이유입니다.
10장 ACK와 NACK는 처리 결과를 알려준다#
일부 장비 Protocol은 다음과 같은 응답을 사용합니다.
ACK
→ 정상 수신 또는 정상 처리
NACK
→ 거부 또는 오류하지만 여기서 주의해야 합니다.
ACK가:
Packet을 정상적으로 받았다.는 의미일 수도 있고:
실제 장비 동작까지 완료했다.는 의미일 수도 있습니다.
Protocol에 따라 다릅니다.
10.1 통신 성공과 업무 완료를 구분한다#
예를 들어 차단기 Open Command를 보냅니다.
OPEN_GATE장비가 ACK를 보냅니다.
ACK이것이 반드시:
차단기가 실제로 완전히 열렸다.는 뜻은 아닐 수 있습니다.
실제 흐름은:
Command 수신
↓
ACK
↓
Motor 동작
↓
Open Sensor 감지
↓
OPEN_COMPLETED Event처럼 구성될 수도 있습니다.
따라서 통신의 성공과 물리적 업무 완료를 분리해서 봐야 합니다.
11장 Status Code와 Error Code가 필요한 이유#
Command를 처리하지 못했을 때 단순히:
FAIL이라고만 응답하면 원인을 알기 어렵습니다.
그래서 Protocol은 Error Code를 정의할 수 있습니다.
예:
| Code | 의미 예시 |
|---|---|
0x00 |
정상 |
0x01 |
잘못된 Command |
0x02 |
잘못된 Parameter |
0x03 |
Device Busy |
0x04 |
권한 없음 |
0xFF |
General Error |
이 값은 예시일 뿐이며 실제 의미는 제조사마다 다릅니다.
따라서 0xFF를 보고 임의로:
CRC Error다.라고 추측해서는 안 됩니다.
12장 Protocol Version은 왜 중요할까#
장비 Firmware가 업데이트되면서 Protocol도 바뀔 수 있습니다.
예:
Protocol v1
CMD 0x10
Data 4 Bytes새 버전:
Protocol v2
CMD 0x10
Data 8 Bytes라면 기존 Software가 Packet을 잘못 해석할 수 있습니다.
12.1 장비를 교체했는데 갑자기 통신이 안 된다면#
확인합니다.
Model
Firmware Version
Protocol Version
Packet Format
Command SetConnector와 Baud Rate가 같다고 Protocol까지 같다는 보장은 없습니다.
13장 모든 장비가 Protocol을 협상하는 것은 아니다#
일부 Network Protocol은 연결 초기 단계에서:
Version Negotiation
Capability Negotiation등을 수행합니다.
하지만 산업용 Serial Device에서는 그런 기능 없이:
정해진 설정
정해진 Packet
정해진 Command만 사용하는 경우도 많습니다.
따라서:
연결하면 서로 버전을 알아서 맞춘다.라고 가정해서는 안 됩니다.
14장 실제 장비 통합은 네 층을 나누어 봐야 한다#
서로 다른 제조사의 장비를 연동할 때 다음 네 가지를 구분하면 좋습니다.
Physical Interface
↓
Serial / Network 설정
↓
Protocol Frame
↓
Business Meaning예를 들어:
Physical Interface#
RS-485Serial Setting#
19200-8-E-1Protocol#
[ADDR][CMD][DATA][CRC]Business Meaning#
CMD 0x10
=
Gate Open입니다.
이 네 단계 중 하나라도 다르면 정상적으로 연동되지 않을 수 있습니다.
15장 주차관제 시스템으로 보면 어떻게 연결될까#
예를 들어 다음 시스템이 있다고 하겠습니다.
Card Reader
↓
Controller
↓
Server
↓
Gate Controller차량 또는 카드가 인식됩니다.
1단계#
Reader가 Controller에 Event를 보냅니다.
CARD_DETECTED2단계#
Controller 또는 Server가 권한을 확인합니다.
Authorized3단계#
Gate Controller에 Command를 보냅니다.
OPEN4단계#
Gate Controller가 처리 결과를 보냅니다.
ACK5단계#
Sensor를 통해 실제 상태를 확인할 수 있습니다.
GATE_OPEN이 흐름 전체가 하나의 Protocol일 수도 있고 여러 Protocol의 조합일 수도 있습니다.
16장 제조사가 다르면 Protocol Gateway가 필요할 수도 있다#
다음과 같은 시스템을 생각해보겠습니다.
Reader A
제조사 Protocol A
Controller B
제조사 Protocol B물리 Interface가 모두 RS-485라고 해도 Protocol이 다르면 직접 통신할 수 없습니다.
그 사이에서:
Protocol A
↓
Gateway
↓
Protocol B형태의 변환이 필요할 수 있습니다.
Gateway는:
Command Mapping
Data Conversion
Address Translation
Checksum 재계산등을 수행할 수 있습니다.
17장 Serial과 Ethernet도 Protocol 관점에서는 같은 질문을 던진다#
RS-485 장비:
RS-485
↓
Binary FrameEthernet 장비:
TCP/IP
↓
JSON처럼 구조가 다를 수 있습니다.
하지만 Integration 관점에서는 동일한 질문을 합니다.
어디서 Message가 시작되는가?
누구에게 보내는가?
어떤 Command인가?
Data 길이는 얼마인가?
정상 응답은 무엇인가?
오류는 어떻게 표현하는가?18장 TCP를 쓴다고 Protocol이 없어지는 것은 아니다#
TCP는 신뢰성 있는 Byte Stream을 제공합니다.
하지만 TCP 자체는:
이 Byte가 Gate Open Command다.라고 알려주지 않습니다.
예:
TCP
↓
01 05 10 00 35 7A이 Byte의 의미를 결정하는 것은 Application Protocol입니다.
따라서:
TCP를 쓰니까 별도 Protocol은 필요 없다.는 잘못된 생각입니다.
19장 TCP에서는 Packet 경계를 별도로 생각해야 한다#
TCP는 Byte Stream입니다.
Application에서:
Message A
Message B를 두 번 보냈다고 수신 측에서 반드시 같은 두 번의 read()로 들어온다는 보장은 없습니다.
따라서 Protocol에서:
Length
Delimiter
Fixed Length
Header등을 이용해 Message Boundary를 정의해야 합니다.
장비 Protocol 설계에서 매우 중요한 부분입니다.
20장 Raw HEX를 받으면 어디서부터 봐야 할까#
예를 들어 다음 Data를 얻었다고 하겠습니다.
02 05 10 03 41 42 43 A7 03바로 의미를 추측하지 않습니다.
다음 순서로 봅니다.
1. 시작 Byte가 있는가?
2. 끝 Byte가 있는가?
3. Length처럼 보이는 값이 있는가?
4. Address 후보는 무엇인가?
5. Command가 반복되는 위치가 있는가?
6. Payload는 어디인가?
7. 마지막 값이 Checksum인가?여러 Sample을 비교하면 Pattern을 찾기 쉬워집니다.
21장 한 Packet만 보고 Protocol을 추측하면 위험하다#
다음 두 Packet을 비교한다고 하겠습니다.
02 01 10 01 41 53 03
02 02 10 01 41 54 03변하는 위치:
01 ↔ 02를 보고 Address라고 추정할 수 있습니다.
하지만 Sample이 하나라면:
02가 Address인지 Length인지 Command인지 알기 어렵습니다.
그래서 Protocol 분석에서는 여러 조건에서 수집한 Frame을 비교하는 것이 중요합니다.
22장 Protocol 문서에서 먼저 찾아야 할 것#
제조사 문서가 있다면 다음 항목부터 찾습니다.
Physical Interface
Baud Rate
Data Bits
Parity
Stop Bits
Packet Format
Address
Command Table
Response Format
Checksum / CRC
Timeout
Retry
Protocol Version이 정도만 확보해도 대부분의 Integration 작업을 시작할 수 있습니다.
23장 Protocol 문서가 있어도 실제 로그와 비교해야 한다#
문서에는:
Firmware v1.5기준 Protocol이 적혀 있는데 현장 장비가:
Firmware v3.0일 수도 있습니다.
또는 제조사가 문서에 반영하지 않은 확장 Command가 있을 수 있습니다.
그래서:
Manual
+
실제 Raw Frame을 같이 확인하는 것이 좋습니다.
24장 통신 장애를 계층별로 나누면 훨씬 쉬워진다#
장비가 응답하지 않는다고 하겠습니다.
물리 계층#
전원
Cable
A/B
TX/RX
Ground전송 설정#
Baud
Data Bits
Parity
Stop BitsProtocol#
Address
Command
Length
CRCApplication#
권한
업무 상태
Database
장비 상태이렇게 나누면 원인을 훨씬 빠르게 좁힐 수 있습니다.
25장 CRC Error를 Protocol 문제로만 보지 않는다#
Frame 구조가 맞는데 CRC Error가 반복됩니다.
가능한 원인은:
CRC Algorithm 오류만 있는 것이 아닙니다.
다음도 가능합니다.
Noise
Baud 불일치
A/B Polarity
Collision
Reflection
Byte 누락즉:
CRC ERROR는 하위 전송 과정에서 Data가 손상됐다는 결과일 수도 있습니다.
26장 Timeout도 원인이 아니라 결과다#
Application Log:
DEVICE TIMEOUT을 봤다고 하겠습니다.
뜻은:
정해진 시간 안에
기대한 Response를 받지 못했다.입니다.
원인은 다음 어디든 있을 수 있습니다.
전원
Cable
Address
Command
Protocol Version
Device Busy
Network
Application따라서 Timeout이라는 단어 자체를 Root Cause로 취급하면 안 됩니다.
27장 시험 환경에서는 정상·오류 Frame을 비교해본다#
예를 들어 Simulator에서 정상 Frame을 보냅니다.
02 01 10 03 41 42 43 A7 03그다음 Length를 의도적으로 변경합니다.
02 01 10 05 41 42 43 A7 03Receiver가:
NACK
Frame Error
Timeout중 무엇을 반환하는지 확인합니다.
다음에는 Checksum을 바꿉니다.
02 01 10 03 41 42 43 FF 03이런 방식으로 Protocol의 실제 Error Handling 동작을 확인할 수 있습니다.
운영 장비가 아닌 Simulator나 Test Bench에서 수행해야 합니다.
28장 Protocol 분석에서는 원시 데이터를 보존한다#
장애가 발생하면 다음처럼 Parsing된 Log만 남는 경우가 있습니다.
Invalid Packet하지만 이것만으로는 분석하기 어렵습니다.
가능하다면 원시 데이터도 남깁니다.
RX RAW:
02 01 10 03 41 42 43 A7 03그리고:
Timestamp
Direction
Port
Device ID
Parsed Result를 함께 기록하면 분석에 큰 도움이 됩니다.
29장 개인정보가 포함된 Payload는 그대로 남기지 않는다#
장비 Data에는 다음이 포함될 수 있습니다.
카드 ID
차량번호
사용자 ID
출입 기록
결제 정보Protocol Debugging을 위해 Raw Packet을 저장하더라도 조직 정책과 관련 법규에 맞게:
Masking
접근 통제
보관 기간 제한
암호화를 적용해야 합니다.
Protocol Log가 곧 개인정보 Log가 될 수 있기 때문입니다.
30장 Protocol은 보안 기능과 같은 의미가 아니다#
자체 Binary Protocol을 사용한다고 해서 안전한 것은 아닙니다.
누군가 Format을 알게 되면:
Command 재전송
Frame 위조
Replay
Device Control등이 가능할 수 있습니다.
Protocol과 별개로:
Authentication
Authorization
Encryption
Replay Protection을 고려해야 합니다.
31장 장비 Protocol 분석 순서#
알 수 없는 장비를 처음 연동한다면 다음 순서가 효율적입니다.
1. Interface 확인
↓
2. 통신 설정 확인
↓
3. 제조사 Protocol 문서 확보
↓
4. 정상 Raw Frame 수집
↓
5. 여러 Frame 비교
↓
6. Header·Address·Command 후보 찾기
↓
7. Length 확인
↓
8. Payload 분리
↓
9. Checksum·CRC 확인
↓
10. Response 관계 확인
↓
11. Timeout·Retry 확인
↓
12. Simulator에서 재현32장 장비 통신에서 가장 자주 하는 실수#
32.1 RS-485가 같으면 서로 통신할 수 있다#
아닙니다.
상위 Protocol까지 같아야 합니다.
32.2 Packet을 Capture하면 의미를 바로 알 수 있다#
Protocol 문서나 여러 Sample 비교가 필요합니다.
32.3 ACK가 오면 장비 동작도 완료됐다#
Protocol 정의에 따라 다릅니다.
32.4 CRC Error면 CRC Code가 잘못됐다#
Physical Layer 손상도 의심해야 합니다.
32.5 TCP를 사용하면 Message Boundary도 자동으로 보존된다#
아닙니다.
TCP는 Byte Stream입니다.
32.6 Binary Protocol은 암호화되어 있다#
Binary라는 것과 Encryption은 전혀 다른 개념입니다.
32.7 제조사 문서와 장비가 항상 동일하다#
Firmware와 Protocol Version 차이를 확인해야 합니다.
33장 현장 점검표#
| 확인 항목 | 질문 |
|---|---|
| Interface | RS-232·RS-422·RS-485·TCP 중 무엇인가 |
| Serial 설정 | Baud·Data Bit·Parity·Stop Bit가 같은가 |
| Address | 대상 장비 Address가 맞는가 |
| Frame | 시작·끝·길이를 어떻게 판단하는가 |
| Command | Command Code가 무엇을 의미하는가 |
| Payload | 실제 업무 Data는 어디에 있는가 |
| Integrity | Checksum·CRC 방식은 무엇인가 |
| Response | 정상·오류 응답은 무엇인가 |
| Timing | Timeout·Retry 기준은 무엇인가 |
| Version | Firmware·Protocol Version이 맞는가 |
| Security | 인증·암호화가 필요한가 |
| Logging | Raw Frame과 Timestamp를 확보했는가 |
34장 자기 점검#
34.1 왜 장비 통신에 Protocol이 필요한가#
Byte의 위치와 의미, Command와 Response, 오류 검출 방식 등을 서로 동일하게 해석하기 위해 필요합니다.
34.2 RS-485를 사용하면 Address도 자동으로 생기는가#
아닙니다.
Address는 상위 Protocol에서 정의합니다.
34.3 Header와 Payload의 차이는 무엇인가#
Header는 Packet을 해석하는 데 필요한 제어 정보를 담고 Payload는 실제 전달하려는 Data를 담습니다.
34.4 ACK를 받으면 업무가 완료된 것인가#
반드시 그렇지 않습니다.
Protocol이 ACK를 어떤 의미로 정의했는지 확인해야 합니다.
34.5 Binary Protocol이면 안전한가#
아닙니다.
Binary Encoding과 Authentication·Encryption은 별개의 문제입니다.
35장 이 글을 마치며#
장비끼리 데이터를 주고받는다는 것은 단순히 Wire를 연결하고 Byte를 보내는 일이 아닙니다.
먼저:
Physical Interface가 필요하고:
Baud Rate
Data Bits
Parity
Stop Bits같은 전송 조건이 맞아야 합니다.
그 위에서:
Header
Address
Command
Length
Payload
Checksum같은 Protocol의 약속이 맞아야 비로소 서로의 말을 이해할 수 있습니다.
전체 구조를 보면:
업무 의미
↓
Command / Response
↓
Packet / Frame
↓
Byte Stream
↓
RS-232 / RS-422 / RS-485 / TCP
↓
Cable 또는 Network처럼 이어집니다.
특히 다음 다섯 가지를 기억하면 됩니다.
물리적으로 연결됐다는 것과 서로 대화할 수 있다는 것은 다른 문제입니다.
Protocol은 Byte가 어디서 시작하고 무엇을 의미하며 어떤 응답을 해야 하는지를 정의합니다.
RS-485나 TCP 같은 하위 기술이 Address·Command·업무 의미까지 정의해주는 것은 아닙니다.
ACK·CRC Error·Timeout 같은 값은 반드시 Protocol 정의와 하위 전송 상태를 함께 보고 판단해야 합니다.
서로 다른 제조사의 장비를 연결할 때는 Connector보다 Protocol Specification을 비교하는 것이 더 중요할 수 있습니다.
결국 장비 Protocol을 이해한다는 것은 Hexadecimal 숫자를 많이 외우는 것이 아닙니다.
원시 Byte 한 줄을 Address·Command·Length·Payload·검증값이라는 약속으로 다시 나누고, 그 값이 실제 장비의 어떤 행동으로 이어지는지를 추적할 수 있는 것이 핵심입니다.