格式化CoAP数据包
[RFC 7252 CoAP] [1]
在RFC 7252第3节,图7中,第三行,字节9 ... 16或更多,是Options字段。我无法找到任何指定选项字段有多长的内容。我知道它可以改变,但不像Token字段的长度是由字段TKL指定的,我无法识别指定选项长度的位置。
是的,我看到第3.1和3.2节,但我无法理解他们告诉我的内容。该文件说明参考以前的选项。好的,对于没有先前数据包且之前没有选项的第一条消息,您如何处理?
当我的代码需要发送CoAP消息时,如何确定可以发送哪些选项?必须将哪些值加载到要发送的数据包中,例如,没有选项?
答案 0 :(得分: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消息中对值为Uri-Port
和7000
且值为Uri-Path
的2个选项/temp
进行编码。选项始终按选项编号的递增顺序编码。因此,您首先对选项号为Uri-Port
的{{1}}进行编码,然后使用选项编号7
编码Uri-Path
。
<强> URI的端口强>
由于这是邮件中的第一个选项,因此选项增量将与选项编号相同,因此11
。端口值Option delta = 0x7
将7000
个字节2
,因此(0x1B58)
。因此,此选项将被编码为Option length = 0x2
。
<强> URI的路径强>
这不是此消息中的第一个选项。此选项的选项增量为72 1b 58
,即this option number - prev option number
。编码11 - 7 = 4
将占用4个字节temp
。因此,此选项将编码为Option length = 4
请注意,这是一个简化的情况,其中选项号和长度不超过12个字节。当其中任何一个超过12个字节时,使用RFC中指定的扩展选项delta / length进行编码。