摘要
- DHCPv4 动态租约并非只有一个“到期时间”:T1 让客户端进入 RENEWING,优先询问原出租服务器;T2 让它进入 REBINDING,以广播方式寻找其他获本地管理授权的服务器;最终到期则终止地址使用权。
- 重绑定扩大的是可听见请求的范围,不是把权威交给任何能回包的主机。只有新的 DHCPACK 能建立下一段有效租期;链路仍通、邻居缓存仍有回应,都不能代替授权。
从一台仍能上网的电脑说起
屏幕上的视频没有停,TCP 连接仍在传输,网卡也没有报错。唯一消失的是那台曾经分配 IPv4 地址的 DHCP 服务器。
如果只看数据流,客户端似乎没有理由改变什么。可它保存的不只是一个地址,还保存了一段有边界的许可。随着这段时间减少,客户端依次进入三种不同的处境:先争取让原服务器延续绑定,再向更大的受权服务器集合求助,最后在没有确认时退出。
所谓“自动续租”容易抹平这个设计。DHCP 真正做的是按剩余时间改变谁可以参与决定,同时拒绝把没有回答解释成永久同意。
动态分配把地址变成可收回的资源
1993 年 10 月发布的 RFC 1541 将动态分配描述为:地址只交给客户端一个有限时期,或者一直到客户端主动释放。服务器管理由地址与配置参数构成的 binding,也就是绑定。
这使有限地址池能够串行复用。同一个地址今天属于一台笔记本的一段会话,明天可以交给另一台终端,而不必假装第一次分配产生了永久所有权。
RFC 2131 在 1997 年延续了三类分配。自动分配可以是永久的;手动分配表达管理员决定;动态分配才依赖租约时钟以及续租、重绑定和到期后的状态转换。因而,DHCP 地址首先是一项由本地策略维护的限时配置决定,而不是客户端发现后便可长期占有的事实。
一个租约同时携带三条时间边界
RFC 2132 分别定义了三个选项:51 是地址租期,58 是续租时间 T1,59 是重绑定时间 T2。它们都是从地址分配起计算的秒数,而不是某个日历时刻。
若服务器没有给出有效的 T1、T2,RFC 2131 把默认值设为租期的二分之一与八分之七,并建议加入少量随机变化,避免大量客户端同时发起请求。这两个比例只是协议的后备值,不是对所有网络的调参建议;服务器可以发送其他有效值。
顺序比比例更重要。T1 给原权威留下充分的直接会话时间。T2 在到期前开启更宽的恢复路径。租期终点则不是第三次重试提醒,而是当前绑定本身的终点。
T1 保留了原出租者的优先权
BOUND 状态的客户端到达 T1 后进入 RENEWING。它知道原服务器地址时,会向那台服务器发送 DHCPREQUEST,并把正在使用的地址放在 ciaddr。这不是重新收集多个报价,也不是从零开始竞争地址。
原服务器最清楚自己建立的绑定、背后的地址池政策,以及续租时是否应同时修改网关、DNS 或其他配置。它可以用 DHCPACK 延长租约,也可以依照管理决定改变参数或拒绝继续。
一次没有回答不等于撤销。只要旧租约仍有效,客户端仍拥有此前取得的许可,可以有节制地重传,并以距离 T2 的剩余时间安排下一次尝试。控制面短暂故障不会立即切断数据面;但同样,服务器的沉默不会让计时器消失。
T2 放宽了寻找范围,却没有放宽授权标准
如果 T2 到来前仍没有 DHCPACK,客户端进入 REBINDING。它广播 DHCPREQUEST,在 ciaddr 中继续声明当前地址,但不携带服务器标识。这样,原服务器不可达时,其他服务器也能听见请求。
然而,听见并不等于有权回答。RFC 2131 允许另一台服务器延续租约的前提,是它具备本地管理权威。多服务器站点必须有办法让绑定状态和管理责任保持一致;一个偶然可达、却不了解地址池现状的应答者并不会因为广播而获得托管权。
这正是重绑定的锋利之处。它以扩大响应者集合提升可用性,却没有把网络可达性误当成委任。若复制状态陈旧,一台服务器可能认定地址仍被占用,另一台却认定它可以重新分配。广播只会暴露冲突,不能替运营者制造一致性。
ACK、NAK 与沉默是三种不同判决
RENEWING 或 REBINDING 期间收到 DHCPACK,客户端会记录返回的租期与配置,并重新启动 T1、T2。新的确认可能携带变化后的参数,因此续租并非只把一个数字往后挪。
DHCPNAK 的含义相反:当前网络配置已不可接受。客户端必须停止使用并回到初始化。若收到 NAK 还继续发包,保存下来的旧状态就会变成与地址池控制者竞争的地址主张。
沉默在租期内既不是 ACK,也不是 NAK。它只让客户端继续受旧租约保护并按边界重试。但若到期前没有 ACK,RFC 2131 要求客户端进入 INIT,停止其他网络处理,再以未配置状态请求地址。
此时交换机端口也许仍然亮着,默认路由也许还会转发,ARP 缓存中的邻居也可能回应。这些现象证明的只是局部数据路径尚可使用,而不是地址权利仍然存在。到期线把“未能保持续租”与“未经授权继续使用”分开。
重启后记住的地址也只是请求
客户端重启时可能保存着上次地址,也可能确信自己回到了同一网络。INIT-REBOOT 允许它请求这个地址,却不允许把记忆当作所有权。
请求使用广播,因为旧服务器或旧网络可能已经不再相关。服务器可以用 DHCPACK 确认,也可以用 DHCPNAK 拒绝。如果暂时联系不到服务器,RFC 2131 只允许客户端在原租约尚未用完的部分继续使用旧配置。
于是,“重启后地址没变”成为需要服务器判断的结果。DHCP 尊重连续性,但不从客户端磁盘上的一个值推导当前权威。
服务器后来获得了提前拉动续租的办法
最初的状态机主要由客户端计时器推动。RFC 3203 后来定义了单播 FORCERENEW,使服务器可以在 T1 之前要求客户端进入正常 RENEW 流程,例如在配置必须调整时。
FORCERENEW 本身不会偷偷改写客户端配置。它触发普通的 DHCPREQUEST;服务器若要客户端放弃地址,仍需以 DHCPNAK 回答,让客户端重新发现配置。
伪造的触发消息可能反复中断活动会话,因此 RFC 3203 要求按照 RFC 3118 的方法认证 FORCERENEW。这个扩展从另一个方向说明了同一原则:服务器可以提前要求重新审视租约,但必须经过受控状态转换,不能凭一条无来源命令重写本地事实。
服务器的许可也不能证明链路上没有冲突
真实的 DHCPACK 能证明管理服务作出过分配决定,却不能证明本地链路没有其他主机使用相同地址。配置权威与链路观察是两类证据。
RFC 5227 要求 IPv4 主机在开始使用新配置地址前进行探测。DHCP 客户端若发现冲突,应发送 DHCPDECLINE。此时,服务器的计划遇到了相反的现场证据,必须重新处理。
所以一条 DHCP 租约能支持的结论很有限:某个受管理服务曾把地址在一段时间内分给某客户端。它不能认证客户端背后的人,不能证明法律所有权,不能保证端到端连通,也不能排除重复地址。
来源及证据边界
本文的协议与历史事实来自 RFC 1541、RFC 2131、RFC 2132、RFC 3118、RFC 3203 与 RFC 5227:
- https://www.rfc-editor.org/rfc/rfc1541.html
- https://www.rfc-editor.org/rfc/rfc2131.html
- https://www.rfc-editor.org/rfc/rfc2132.html
- https://www.rfc-editor.org/rfc/rfc3118.html
- https://www.rfc-editor.org/rfc/rfc3203.html
- https://www.rfc-editor.org/rfc/rfc5227.html
这些文件界定的是 DHCPv4 协议契约。它们不能证明任何具体产品或网络今天使用什么默认值、部署了何种故障切换、客户端是否正确实现,或某种实现占多少市场份额。DHCPv6 是另一套协议;T1、T2 的默认比例也不能证明每台服务器都会发送、每个客户端都会采用这些值。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
