格式化CoAP数据包
RFC 7252 CoAP
在RFC 7252节3中,图7的第三行,字节9. 16或更多,是Options字段。我无法找到指定选项字段的长度的任何内容。我知道它可以更改,但与TKL字段指定的令牌字段不同,我无法识别选项的长度是在哪里指定的。
是的,我看了第3.1和3.2条,但无法理解他们在告诉我什么。文档声明引用前面的选项。好的,如果第一条消息没有先前的数据包,也没有先前的选项,您会做什么?
当我的代码需要发送CoAP消息时,如何确定可以发送哪些选项?哪些值必须加载到数据包中才能发送,例如,没有选项?
发布于 2017-10-27 05:37:49
如果您在RFC的sec 3.1中看到图8,第4-7位表示选项值的长度。
0 1 2 3 4 5 6 7
+---------------+---------------+
| Option Delta | Option Length | 1 byte
+---------------+---------------+位数0-3会告诉你它是哪一个选项。与在此消息中编码的前面的选项相比,这个小块只给出了增量。对于消息中的第一个选项,没有前面的选项,所以位数0-3给出了选项号。
让我们考虑一个示例,在这个示例中,您需要在一条Uri-Port消息中编码2个选项,即7000值的Uri-Path和值/temp的Uri-Path。选项总是按选项号的递增顺序编码。因此,您首先编码具有选项号7的Uri-Port,然后用选项号11编码Uri-Path。
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进行编码。
https://stackoverflow.com/questions/46945044
复制相似问题