如果我有一台运行 DHCP 服务器的 Windows PC。我预计启动需要几分钟。我的网络将有来自不同供应商的各种其他设备,它们将在几秒钟内启动。
我还没有找到 DHCP 客户端重试的“标准”。这些设备会在 Windows DHCP 服务器启动之前超时吗?如果会,最好的解决方法是什么?
澄清:不涉及 Windows 客户端。客户端是工业嵌入式设备,例如摄像头、加热器和机器人。
我并不担心 DHCP 服务器宕机后会发生什么。这些都是嵌入式设备,全部连接到一个电源。我想知道早上“工厂”开机时该怎么办。
答案1
好的,我有几个想法:
- DHCP 堆栈的数量与天上的星星一样多。好吧,不完全是,但你明白我的意思。嵌入式网络堆栈尤其以不完整的“标准”实现而闻名。因此,你的设备很可能将要在 DHCPd 准备就绪之前启动,将要APIPA,以及惯于重试 DHCP。唯一可以验证这一点的方法是检查所涉及的每个设备的行为。
- 重启交换机(其他人建议的)可能不起作用。我见过许多嵌入式设备发出 DHCP 请求一次作为启动序列的一部分,然后再也不重试,即使 NIC 上的 PHY 链路状态发生变化。
以下是我推荐的解决方案:
市场上有电源排序 PDU。这些 PDU 通常是两级或三级,具有可编程延迟。有了这些 PDU,当它们通电时,它们将启动第一级,等待指定的秒数,启动第二级,等等。您可以将交换机和服务器连接到第一级,让 PDU 等待 5 分钟,让服务器完成启动,然后启动第二级,该级上有所有其他设备。
答案2
我能想到的 Windows DHCP 客户端有三种情况。我无法与非 Windows DHCP 客户端交谈,但我必须假设它们的操作方式相同。
A跑步当 DHCP 服务器不可用时,具有有效租约的 Windows DHCP 客户端:DHCP 客户端将继续使用其当前租用的 IP 地址。当它到达续订阶段 (T1) 时,它将尝试续订其现有租约。如果它无法与可以续订现有租约的 DHCP 服务器通信,则客户端将继续尝试续订其租约,直到它到达重新绑定阶段 (T2),此时它将尝试联系任何 DHCP 服务器。如果 T2 计时器到期,则客户端将释放其 IP 地址。
具有活动租约的 Windows DHCP 客户端重新启动当 DHCP 服务器不可用时:DHCP 客户端将继续使用其当前租用的 IP 地址。当它到达续订阶段 (T1) 时,它将尝试续订其现有租约。如果它无法与可以续订现有租约的 DHCP 服务器通信,则客户端将继续尝试续订其租约,直到它到达重新绑定阶段 (T2),此时它将尝试联系任何 DHCP 服务器。如果 T2 计时器到期,则客户端将释放其 IP 地址。需要注意的是,据我所知,如果 DHCP 客户端在重新启动时无法联系到 DHCP 服务器,则应释放其现有的 IP 地址,因为它无法确认是否可以继续使用该 IP 地址。Windows 客户端似乎并非如此,这让我有点困惑。无论如何,我对 Windows 客户端的测试表明,当 DHCP 服务器不可用时,它们确实会在重新启动后保留其现有的租用 IP 地址。
Windows DHCP 客户端才不是有现有租约:当然,DHCP 客户端将无法联系 DHCP 服务器,并将为自己分配一个 APIPA IP 地址。正如 Neil T 在他的回答中所述,DHCP 客户端才不是拥有有效租约的主机大约每 5 分钟会尝试联系 DHCP 服务器一次。
答案3
Windows 客户端通常会给服务器大约 60 秒的时间(大概)来完成配置。之后,它们会切换到回退模式,设备每 5 分钟检查一次。如果等待 5 分钟太久,您可以重新启动它们所连接的交换机。如果交换机具有此功能,即使是热启动也可以。
答案4
是否有原因导致这些客户端无法获得静态 IP 地址?虽然“技术上不合法”,但我曾见过一些地方为某些设备分配了 192.168.0.0/16 空间中的地址,然后配置 DHCP 服务器开始分配高于已分配地址的地址。
如果这不合理,为什么不将 DHCP 租约设置为两周或更长时间?