CoAP,如何理解“选项”

bke*_*lly 1 coap

格式化 CoAP 数据包

[RFC 7252 CoAP][1]

在 RFC 7252 第 3 节,图 7 第三行,字节 9 ... 16 或更多,是选项字段。我找不到任何指定选项字段有多长的内容。我知道它可以改变,但与由字段 TKL 指定长度的 Token 字段不同,我无法识别在哪里指定了选项的长度。

是的,我看到了 3.1 和 3.2 节,但我无法理解他们在告诉我什么。该文件指出要引用以前的选项。好的,对于没有前一个数据包也没有前一个选项的第一条消息,你会怎么做?

当我的代码需要发送 CoAP 消息时,如何确定可以发送哪些选项?必须将哪些值加载到数据包中才能发送,例如,没有选项?

yen*_*niv 6

如果您在 RFC 的第 3.1 节中看到图 8,则第 4-7 位表示选项值的长度。

     0   1   2   3   4   5   6   7
   +---------------+---------------+
   |  Option Delta | Option Length |   1 byte
   +---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

位 0-3 将告诉您它是哪个选项。与此消息中编码的前一个选项相比,此半字节仅为您提供增量。对于消息中的第一个选项,没有先前的选项,因此位 0-3 为您提供选项编号。

让我们考虑一个示例,您需要在 CoAP 消息中Uri-Port使用值7000Uri-Path值对 2 个选项进行编码/temp。选项始终按选项编号的递增顺序进行编码。因此,您首先编码Uri-Port具有 Option number 的编码,7然后Uri-Path使用 Option number编码11

Uri-Port 由于这是消息中的第一个选项,因此选项增量将与选项编号相同Option delta = 0x7。端口值70002字节(0x1B58)如此Option length = 0x2。所以这个 Option 将被编码为72 1b 58.

Uri-Path 这不是此消息中的第一个选项。此选项的选项增量将为this option number - prev option numberie 11 - 7 = 4。编码temp将占用 4 个字节,因此Option length = 4. 所以这个选项会被编码为44 74 65 6d 70

请注意,这是针对选项编号和长度不超过 12 个字节的简化情况。当其中任何一个超过 12 个字节时,您可以使用 RFC 中指定的扩展选项 delta/length 进行编码。