"CoAP"의 두 판 사이의 차이

2,842 바이트 추가됨 ,  2년 전
편집 요약 없음
 
CoAP은 [[무선 센서 네트워크]] 노드처럼 자원에 제약이 있는 장치들에서 사용할 목적으로 고안된 [[서비스 계층]] 프로토콜이다. CoAP은 단순한 웹 연동을 위해 [[HTTP]]로 쉽게 변환되도록 설계되어 있으며 [[멀티캐스트]] 지원과 같은 특수한 요건을 충족하면서도 부하가 매우 낮으며 단순한 편이다.<ref>[https://tools.ietf.org/html/rfc7252 RFC 7252, Constrained Application Protocol (CoAP)]</ref><ref>"[http://hinrg.cs.jhu.edu/joomla/images/stories/IPSN_2011_koliti.pdf Integrating Wireless Sensor Networks with the Web]" , Walter, Colitti 2011</ref> 멀티캐스트, 낮은 부하, 단순성은 심도있게 [[임베디드 시스템|임베디드]]되는 경향이 있고 전통적인 인터넷 장치보다 훨씬 더 적은 메모리와 전력 공급을 지니는 경향이 있는 [[사물인터넷]](IoT) 및 [[사물통신]](M2M) 장치에 매우 중요하다. 즉, 효율성이 매우 중요하다. CoAP은 [[사용자 데이터그램 프로토콜|UDP]] 또는 UDP 유사 프로토콜을 지원하는 대부분의 장치에서 구동할 수 있다.
 
== 메시지 포맷 ==
=== CoAP 요청/응답 코드 ===
요청 코드는 다음의 형태를 취한다:
{| class="wikitable"
! colspan="8" |바이트
|-
!0
!1
!2
!3
!4
!5
!6
!7
|-
| colspan="3" |CLASS
| colspan="5" |CODE
|}
문서 상에서는 보통 `<class>`.`<nowiki><code>`</nowiki>와 같은 형태로 표현된다.
==== CoAP 등록 코드 ====
[https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#codes]에서 CoAP의 최신 등록 코드를 볼 수 있다.
{{multi-column numbered list|lst=disc|0|
<li>
Method: 0.XX
{{ordered list|start=0
| EMPTY
| GET
| POST
| PUT
| DELETE
| FETCH
| PATCH
| iPATCH
}}
</li>
<li>
Success : 2.XX
{{ordered list|
| Created
| Deleted
| Valid
| Changed
| Content
| item7_value = 31
| Continue
}}
</li>
|2|
<li>
Client Error : 4.XX
{{ordered list|start=0
| Bad Request
| Unauthorized
| Bad Option
| Forbidden
| Not Found
| Method Not Allowed
| Not Acceptable
| item8_value = 8
| Request Entity Incomplete
| Conflict
| item10_value = 12
| Precondition Failed
| Request Entity Too Large
| item12_value = 15
| Unsupported Content-Format
}}
</li>
|2|
<li>
Server Error : 5.XX
{{ordered list|start=0
| Internal Server Error
| Not Implemented
| Bad Gateway
| Service Unavailable
| Gateway Timeout
| Proxying Not Supported
}}
</li>
<li>
Signaling Codes : 7.XX
{{ordered list|start=0
| Unassigned
| CSM
| Ping
| Pong
| Release
| Abort
}}
</li>
}}
 
=== CoAP 메시지 구조 ===
{| class="wikitable"
|+CoAP 메시지 구조
! colspan="8" |바이트
! colspan="8" |바이트
! colspan="8" |바이트
! colspan="8" |바이트
|-
!0
!1
!2
!3
!4
!5
!6
!7
!0
!1
!2
!3
!4
!5
!6
!7
!0
!1
!2
!3
!4
!5
!6
!7
!0
!1
!2
!3
!4
!5
!6
!7
|-
| colspan="2" |VER
| colspan="2" |TYPE
| colspan="4" |TKL (토큰 길이: Token Length)
| colspan="8" |CoAP 요청/응답 코드
| colspan="16" |메시지 ID
|-
| colspan="32" |토큰 (TKL 바이트) (8바이트 최대)
|-
| colspan="32" |옵션 (사용 가능한 경우)<ref>[https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#option-numbers Options Numbers]</ref>
|-
|1
|1
|1
|1
|1
|1
|1
|1
| colspan="24" |페이로드 (사용 가능한 경우)
|}
CoAP 고정 헤더는 처음 4바이트이다. 이로써 토큰, 옵션, 페이로드를 생략할 경우 가장 작은 CoAP 메시지의 길이를 4바이트로 유지할 수 있게 한다.
 
이 매크로를 통해 C에서 고정 헤더의 정보를 쉽게 추출할 수 있다:<syntaxhighlight lang="c">
#define COAP_HEADER_VERSION(data) ( (0xC0 & data[0])>>6 )
#define COAP_HEADER_TYPE(data) ( (0x30 & data[0])>>4 )
#define COAP_HEADER_TKL(data) ( (0x0F & data[0])>>0 )
#define COAP_HEADER_CLASS(data) ( ((data[1]>>5)&0x07) )
#define COAP_HEADER_CODE(data) ( ((data[1]>>0)&0x1F) )
#define COAP_HEADER_MID(data) ( (data[2]<<8)|(data[3]) )
</syntaxhighlight>
 
== 구현체 ==