为什么 DHCP 客户端现在在租用后将端口保持打开状态?

dav*_*man 5 networking dhcp network-protocols

我注意到在一些嵌入式 Linux 系统上,dhcpcd 和 systemd-networkd 在获得租约后都会将 DHCP 客户端端口 68 保持打开状态。两个系统都这样做的事实表明,即使不是标准,也是最佳实践。

基本 DHCP 标准不要求这样做:DISCOVER-OFFER-REQUEST-ACK 的握手会按顺序进行,并且无需再次与服务器通信,直到达到租约 T1 且客户端续订为止。

为什么这些客户端现在让此端口保持开放状态?

har*_*ymc 0

我认为答案在 RFC 2131 - 动态主机配置协议 第 4.1 节,尤其是这一段:

DHCP 客户端负责所有消息重传。客户端必须采用重传策略,该策略结合了随机指数退避算法来确定重传之间的延迟。应选择重传之间的延迟,以便根据客户端和服务器之间的互联网络的特性,有足够的时间来传递来自服务器的答复。例如,在 10Mb/sec 以太网网络中,第一次重传之前的延迟应该是 4 秒,由从 -1 到 +1 范围内选择的统一随机数的值随机化。时钟分辨率粒度小于一秒的客户端可以选择非整数随机化值。下一次重传之前的延迟应该是 8 秒,由从 -1 到 +1 范围内选择的统一数字的值随机化。重传延迟应加倍,随后重传最多 64 秒。客户端可以向用户提供重传尝试的指示,作为配置过程进度的指示。

换句话说,客户端要承担消息重传的费用:

由于 DHCP 使用不可靠的 用户数据报协议 (UDP) 进行消息传递,因此客户端负责检测消息丢失并在需要时重新传输请求。