【问题标题】:CoAP, how to understand "Options"CoAP,如何理解“选项”
【发布时间】:2017-10-26 02:44:51
【问题描述】:

格式化 CoAP 数据包

[RFC 7252 CoAP][1]

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

是的,我看到了第 3.1 和 3.2 节,但无法理解他们告诉我的内容。该文件指出要参考以前的选项。好的,对于第一条没有前一个数据包且没有前一个选项的消息,你怎么办?

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

【问题讨论】:

    标签: coap


    【解决方案1】:

    如果您在 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 消息中使用值 7000 和值 Uri-Path 编码 2 个选项 Uri-Port 和值 /temp。选项总是按选项编号的升序编码。所以你首先编码Uri-Port,它的选项号为7,然后Uri-Path 的选项号为11

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

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

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

    【讨论】:

    • 你成就了我的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2021-01-28
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多