2017-10-26 16 views
0

의 coap 패킷 포맷을 이해의 coap, 어떻게 "옵션"

[RFC 7252의 coap는 [1]

RFC에서

7252 제 3,도 7 번째 행 (바이트) 9 ... 16 어쩌면 더 많은 옵션 필드가 있습니다. 옵션 필드의 길이를 지정하는 항목을 찾을 수 없습니다. 나는 그것이 바뀔 수 있음을 이해하지만 길이가 TKL 필드에 의해 지정된 토큰 필드와 달리 옵션의 길이가 지정된 곳을 인식 할 수 없다.

예, 섹션 3.1과 섹션 3.2를 참조하지만 그들이 내게 무엇을 말하고 있는지 이해할 수는 없습니다. 이 문서에는 이전 옵션을 참조하는 내용이 나와 있습니다. 좋아, 이전 패킷이없고 이전 옵션이없는 첫 번째 메시지에 대해 무엇을합니까?

내 코드가 CoAP 메시지를 보내야 할 때 어떤 옵션을 보낼 수 있는지 어떻게 결정합니까? 전송할 패킷에 어떤 값을로드해야합니까 (예 : 옵션 없음)?

답변

3

RFC의 초 3.1에서 그림 8을 보면 비트 4-7은 옵션 값의 길이를 나타냅니다.

 0 1 2 3 4 5 6 7 
    +---------------+---------------+ 
    | Option Delta | Option Length | 1 byte 
    +---------------+---------------+ 

비트 0-3은 어떤 옵션인지 알려줍니다. 이 니블은이 메시지에 인코딩 된 이전 옵션과 비교하여 델타 만 제공합니다. 메시지의 첫 번째 옵션에는 이전 옵션이 없으므로 0-3 비트는 옵션 번호를 제공합니다.

당신이의 coap 메시지의 값 /temp으로이 옵션 값 7000Uri-PortUri-Path을 인코딩하는 데 필요로하는 곳에 예를 고려할 수 있습니다. 옵션은 항상 Option 번호의 오름차순으로 인코딩됩니다. 따라서 먼저 을 인코딩하고 옵션 번호는 인 Uri-Path 인 옵션 번호 7을 인코딩합니다. 이 메시지의 첫 번째 옵션이기 때문에

열린 포트는 , 옵션의 델타는 옵션 수 있도록 Option delta = 0x7으로 동일합니다. 포트 값 70002 바이트 (0x1B58)이므로 Option length = 0x2이됩니다. 따라서이 옵션은 인코딩되어 72 1b 58으로 인코딩됩니다.

우리 경로 이것은이 메시지의 첫 번째 옵션이 아닙니다. 이 옵션의 선택 델타는 this option number - prev option number, 즉 11 - 7 = 4이됩니다. 인코딩 temp은 4 바이트를 취하므로 Option length = 4입니다. 따라서이 옵션은 다음과 같이 인코딩됩니다. 44 74 65 6d 70

옵션 번호와 길이가 12 바이트를 넘지 않는 단순화 된 경우입니다. 이들 중 하나가 12 바이트를 초과하면 RFC에 지정된대로 확장 옵션 delta/length를 사용하여 인코딩합니다.

+0

내 하루를 보냈습니다! –