IoT protocol CoAP 메시지 구조(Message Format) 요약 정리
CoAP(Constrained Application Protocol)는 제한된 환경에서 M2M(Machine To Machine) 요구사항을 충족하는 웹 프로토콜이며, 이런 특성으로 인해 IoT를 위한 프로토콜로 각광받고 있다고 한다. 본 포스트에서는 이러한 CoAP의 메시지 구조에 대해 알아봤으며, 앞으로 CoAP에 관한 더 많은 포스트를 게재할 예정이다.
CoAP는 RFC 7252에 정의 되어있다.
CoAP (Constrained Application Protocol)
CoAP의 상호 작용 모델은 HTTP의 클라이언트/서버 모델과 유사하다.
그림 1. |
CoAP의 메시지는 각 EndPoint간 UDP를 통해 전송된다.
그림 2. |
CoAP Message Format
그림 3. CoAP Message Format |
CoAP의 메시지 형식은 위 그림과 같다.
- Var
- T (Type)
메시지의 형식을 나타낸다.
- Confirmable(CON): 0 , ack를 요구하는 메시지
- Non-confirmable(NON): 1 , ack를 요구하지 않는 메시지
- Acknowledgement(ACK): 2 , CON 메시지에 대한 응답 메시지
- Rest(RST): 3 , 메시지가 수신되었으나 올바르게 처리하기 위한 내용이 누락되었음을 나타내는 메시지
메시지의 타입은 아래와 같은 형태의 메시지에 사용된다. Empty 메시지는 일반적인 경우 CON형식은 사용되지 않으나, RST메시지를 유도하기 위해서만 사용된다.
그림 4. |
- TKL (Token Length)
Token field의 길이 정보로 값은 0~8 bytes가 사용된다. 9~15는 추후 사용이 예약되어 있으며 현재는 사용하면 안 된다.
- Code
총 8 bits이며, 3 bits의 class와 5bits의 details로 나눠 있다.
class는 다음과 같다.
- Request : 0
- Success response : 2
- Client error response : 4
- Server error response : 5
0.00은 empty message를 의미한다. 상세한 내용은 다음 포스트에서 다룰 예정이다.
- Message ID
메시지 중복 탐지 및 ACK/RST 형식 메시지를 CON/NON 형식으로 매칭하는데 사용된다.
Message ID는 CON/NON 메시지를 보내는 쪽에서 생성되며, ACK/RST 응답 메시지를 송신할 때 수신된 Message ID를 사용해야 한다. Message ID는 EXCHANGE_LIFETIME내에서 중복되어서는 안 된다.
그림 5. CoAP 파라미터 |
- Token
Token 필드의 길이는 TKL의 값에 의해 정해진다. Token은 request와 response를 일치시키는데 사용된다. 모든 request에는 client가 생성한 token이 있으며, 서버는 요청 결과를 응답할 때 이 token을 반드시 반향해야 한다. Token은 동시 요청을 구별하기 위한 "request ID"라고 할 수 있다.
그림 6. 즉각적인 메시지 요청/응답 |
또한 아래 그림과 같이 시간을 두고 요청에 대한 응답을 보내는 경우 Token 값 0x73을 이용해 request와 response를 매칭할 수 있다.
그림 7. 시차를 둔 메시지 요청/응답 |
- Option
그림 8. Option format |
Option Delta : 이전 Option 번화와 이번 Option 번호화의 차이를 나타낸다.
- 0~12 - option delta를 나타낸다.
- 13 - 8 bits extended option delta 필드가 있다는 것을 의미하며, 확장 필드에는 option delta - 13 값이 들어간다.
- 14 - 16 bits extended option delta 필드가 있다는 것을 의미하며, 확장 필드에는 option delta - 269 값이 들어간다.
- 15 - payload marker용으로 예약되어 있으며, 사용해서는 안 된다.
Option Length: Option Value의 길이를 나타낸다.
- 0~12 - Option value 길이
- 13 - 8 bits extended option length 필드가 있다는 것을 의미하며, 확장 필드에는 option length - 13 값이 들어간다.
- 14 - 16 bits extended option length 필드가 있다는 것을 의미하며, 확장 필드에는 option length - 269 값이 들어간다.
- 15 - 사용해서는 안 된다.
Option Value: 다음과 같은 option value 형식이 있다.
- empty: 길이가 0으로 비어 있다.
- opaque: opaque 배열.
- uint: 네트웍 바이트 오더로 음수가 아닌 정수 데이터.
- string: utf-8 문자열
- 0xff (payload marker)
payload marker는 option의 끝과 payload의 시작을 의미한다. 하지만, option 뒤에 또 다른 새로운 option의 시작을 의미하기도 한다. payload marker가 없으면 payload가 없음을 의미한다.
- Payload
request/response에 따라 특정 데이터가 들어간다. 위 그림 6에서와 같이
요청에서는 payload에 'temperature'가 응답에서는 '22.5 C'의 데이터가
들어간다.
payload는 옵션이며 길이는 payload marker에서 UDP datagram의
끝까지의 길이를 사용하여 계산해야 한다.
관련 포스트
댓글
댓글 쓰기