DHCPv4 中的选项 60(供应商类别标识符)用于什么?

DHCPv4 中的选项 60(供应商类别标识符)用于什么?

当使用 Wireshark 查看设备和 Wi-Fi 路由器(DHCP 服务器)之间的 DHCP 过程时,我注意到大多数设备在其 DHCP Discover 数据包中提供了“供应商类别标识符”(或选项 60)。我看到的一些供应商类别标识符示例如下:

  • udhcp 1.23.2
  • android-dhcp-13
  • 微软 5.0

经过谷歌搜索,结果发现“android-dhcp-13”对应于 Android 设备(运行 Android 13),而“MSFT 5.0”对应于 Windows 设备。然而,我找不到太多关于动态主机配置协议版本号的含义是什么?

更重要的是,为什么设备是否向 DHCP 服务器提供此参数?DHCP 服务器是否使用此供应商 ID 向设备提供特定参数?

答案1

基本上,供应商类别标识符用于通知 DHCP 服务器特定供应商和/或型号信息。版本号不具有任何特殊含义,因为 DHCP 服务器主要根据子字符串(或正则表达式)匹配 VCI 类别信息。

此匹配在 DHCP 服务器端完成,以便:

  1. 从为此设备类设置的特定池中分配租约和租约参数(路由器、名称服务器等)。
  2. 通过选项 43 供应商特定信息将特定配置选项告知硬件设备(例如接入点、IP 电话等)。这些通常是 AP 的控制器 IP 地址、IP 电话的 SIP 服务器地址以及设备可能接受的其他类型的供应商定义选项。
  3. 当请求网络启动时提供适当的 PXE 环境设置,即根据型号/类型将它们引导到适当的 TFTP 服务器并启动映像。

所有这些都是可选的,因此默认情况下 DHCP 服务器不会解释选项 60 的值,因此需要进行配置。

答案2

我无法找到有关“udhcp”和版本号含义的太多信息?

当然,这是一个实时 Linux 启动系统或类似系统。当实时 Linux 启动时,它会启动一个内核,然后内核会加载一个包含最小 Linux 文件系统的 initrd.gz。这通常基于忙碌箱以节省空间并使事情变得更容易。 Busybox 提供了一个名为“udhcpc”的 DHCP 客户端。

查看 udhcpc 的代码,我们看到:

https://elixir.bootlin.com/busybox/1.23.2/source/networking/udhcp/dhcpc.c#L1266

str_V = "udhcp "BB_VER;

稍后 str_V 被加载为“供应商类别”的内容(选项 60)

https://elixir.bootlin.com/busybox/1.23.2/source/networking/udhcp/dhcpc.c#L1366

client_config.vendorclass = alloc_dhcp_option(DHCP_VENDOR, str_V, 0);

当 busybox 版本1.23.2使用你得到

    BB_VER =  1.23.2 

然后客户端将使用供应商类字符串:

udhcp 1.23.2

当客户端在启动时启动 DHCP DORA 序列时,这正是您在 Wireshark 捕获的 DHCPDISCOVEY 数据包中看到的内容。

关于“供应商类别”的含义,您可以查看

RFC2132 DHCP 选项和 BOOTP 供应商扩展

9.13.供应商类别标识符

DHCP 客户端使用此选项来选择性地识别 DHCP 客户端的供应商类型和配置。该信息是一串 n 个八位字节,由服务器解释。供应商可以选择定义特定的供应商类别标识符来传达有关客户端的特定配置或其他标识信息。例如,标识符可以对客户端的硬件配置进行编码。没有配备解释客户端发送的类别特定信息的服务器必须忽略它(尽管可能会报告它)。响应的服务器应该只使用选项 43 将供应商特定信息返回给客户端。

此选项的代码为 60,其最小长度为 1。

代码长度 供应商类别标识符
+-----+-----+-----+-----+---
| 60 | n | i1 | i2 | ...
+-----+-----+-----+-----+---

后来其他标准如远程控制定义供应商类标识符的特定内容,在这种情况下,告诉 DHCP 或代理 DHCP 服务器,启动客户端不仅需要 IP 和相关选项,还需要网络启动,这需要额外的参数,如 TFTP 服务器的 IP 和 NBP(网络启动程序)。

所有符合 PXE 标准 v2.1 的 PXE 启动客户端都应向供应商类标识符添加以下形式的字符串:

“PXEClient:Arch:xxxxx:UNDI:yyyzzz” – 用于客户端和服务器之间的事务。 “PXEServer” – 用于服务器之间的事务。 (这些字符串区分大小写。此字段不得以空结尾。)标签 93 和 94 中的信息嵌入在类标识符字符串中 xxxxx = 客户端系统架构 0 – 65535 yyy = UNDI 主版本 0 – 255 zzz = UNDI 次版本 0 – 255 分隔符为“:”(冒号)

相关内容