DHCP 选项是否排序?

Are DHCP options ordered?

提问人:John Smith 提问时间:9/4/2023 更新时间:9/4/2023 访问量:101

问:

我正在一个小型设备上实现 DHCP,如果我假设消息类型 DHCP 选项始终是第一个选项,并且响应参数列表与请求参数列表的顺序相同,我可以进行一些解析优化。我实际上找不到这是否是标准要求的。有谁知道这是否真的是必需的?

c 解析 DHCP

评论

0赞 pmacfarlane 9/4/2023
我快速浏览了一下RFC2131,看不到任何对订单的引用。也许你可以比我更仔细地阅读它来检查。
0赞 Anya Shenanigans 9/4/2023
规范中没有任何内容需要它,如果你看一下像 dnsmasq 这样的实现,你会看到它对一个块的回复有一个固定的顺序,这可能不一定与请求的顺序匹配

答:

3赞 Moshe Katz 9/4/2023 #1

RFC 2131 § 4.1 涉及 DHCP 消息的构造。关于期权顺序的唯一限制是:

...最后一个选项必须始终是“结束”选项。

...

...“sname”和“file”字段中的选项(如果按照“options 重载”选项的指示使用)必须以字段的第一个八位字节开头,必须以“end”选项结尾,并且必须后跟“pad”选项以填充字段的其余部分。...

不要求其他选项按任何特定顺序列出。

此外,RFC 3046 § 2.0 讨论了“子选项”的实现,并明确指出:

子选项不需要按子选项代码顺序显示。

但是,RFC 2132 § 9.8 描述了“参数请求列表”DHCP 选项,其中说:

客户可以按偏好顺序列出选项。DHCP 服务器不需要按请求的顺序返回选项,但必须尝试按客户端请求的顺序插入请求的选项。

“必须尝试”意味着有时它不会发生(例如,如果响应不适合可用空间而不重新排列),因此,如果您希望与可能发送大量(或大量)选项的 DHCP 服务器一起使用,则可能无法依赖它。