找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2749

积分

0

好友

365

主题
发表于 5 天前 | 查看: 21| 回复: 0

掌握DHCP协议的工作机制,是排查网络故障、规划IP地址方案的基础。这篇文章将带你深入理解DHCP的完整通信流程。

一、首次分配:DHCP四步握手与冲突检测

当一个DHCP客户端(例如新接入网络的电脑)首次启动时,它没有IP地址,会通过广播方式发起一个完整的交互过程,通常被称为DORA流程。

1. DHCP Discover:客户端发出“寻人启事”

客户端以广播形式发出DHCP发现报文,目标地址是255.255.255.255,目的是在网络中寻找可用的DHCP服务器。

DHCP协议首次分配四步握手抓包截图

2. DHCP Offer:服务器回应“我有空房”

收到Discover报文的DHCP服务器会回应一个Offer报文。注意,这个报文虽然目的是特定客户端,但通常仍以广播(255.255.255.255)或单播(如果客户端支持)形式发送,其中包含一个提议给客户端使用的IP地址、租期等信息。

在下面的抓包中,服务器192.168.100.11为客户端提供了IP地址192.168.100.101
DHCP Offer报文详情,显示分配的IP地址

3. DHCP Request:客户端确认“我要这间”

客户端收到一个或多个Offer后,会选择一个(通常是第一个收到的),再次以广播形式发送DHCP Request报文。广播的目的是通知所有DHCP服务器它选择了哪家的Offer。

报文中的Requested IP Address选项明确指出了客户端想要的IP,例如下图的192.168.100.101
DHCP Request报文详情,显示请求的特定IP地址

4. DHCP ACK:服务器最终“签约生效”

被选中的DHCP服务器收到Request后,发送DHCP ACK报文进行最终确认。这个报文包含了客户端可以正式使用的所有网络配置信息,包括IP地址、子网掩码、网关、DNS服务器地址,以及关键的租约时间

下图展示了ACK报文中包含的租约(8天)、续订时间(4天)、重绑定时间(7天)、网关和DNS等信息。
DHCP ACK报文详情,包含完整的配置选项

5. 冲突检测:最后的检查

获得IP地址后,DHCP客户端并非立即开始使用。为了确保网络中该IP没有冲突,客户端会发送一个ARP广播,查询“谁在使用这个IP?”。如果没有收到应答,说明IP空闲,客户端正式绑定该地址。如果发现有其他主机在使用(ARP冲突),客户端会向服务器发送DHCP Decline报文拒绝此IP,然后重新开始Discover过程。

二、续租机制:IP地址的“续约”流程

客户端获得IP后并非一劳永逸。DHCP设计的租期机制保证了IP地址可以回收再利用。续租过程主要发生在以下两个时间点:

DHCP续租请求抓包截图

从上图抓包可以看到(租期设为1分钟时):

  • 租期过半(50%):客户端会向给它分配地址的服务器发送一个单播的DHCP Request报文,请求续租。如果服务器同意(回复ACK),租期从此刻重置。
  • 租期87.5%:如果续租请求未收到响应,客户端会以广播形式再次发送DHCP Request,试图联系任何可用的DHCP服务器进行续租或获取新地址。
  • 租期到期(100%):如果至此仍未获得确认,客户端必须停止使用当前IP地址,并重新发起Discover过程。

租期设置的建议:过短的租期会导致频繁的续租通信,增加网络负担;过长的租期则会导致IP地址无法及时回收,可能造成地址耗尽。需要根据网络规模和客户端稳定性进行合理设置。

三、跨网段中继:当客户端与服务器不在同一广播域

在实际网络(尤其是企业网)中,DHCP客户端和服务器常常位于不同的子网。由于DHCP Discover/Request是广播报文,默认无法跨越路由器。此时就需要DHCP中继代理(通常配置在路由器或三层交换机上)来协助转发。

下图清晰地展示了中继场景下,通信在客户端-中继、中继-服务器两个网段间的传递关系。
DHCP中继代理跨网段通信示意图

通信流程详解

1. 客户端 -> 中继 -> 服务器

  • 客户端在其本地网段广播DHCP Discover。
  • 中继代理收到广播报文后,将其改为单播报文,转发给事先配置好的一个或多个DHCP服务器。
  • 关键一步:中继代理在转发时,会将自己的接口IP地址(客户端所在网段的那个IP)填入DHCP报文头的 Relay agent IP address 字段。这是整个中继过程的核心。

显示Relay Agent IP字段的中继抓包截图

2. 服务器 -> 中继 -> 客户端

  • 服务器收到报文后,根据 Relay agent IP address 来判断客户端属于哪个网段,并从对应的地址池(作用域)中选取一个IP地址。
  • 服务器将DHCP Offer以单播形式发送给中继代理(目的地址是中继代理的IP)。
  • 中继代理将Offer报文以单播(如果客户端支持)或广播形式转发到客户端所在网段。

3. 后续的Request/ACK流程

后续的DHCP Request和ACK报文的传递路径与上述过程类似:客户端在本网段广播,中继代理转换为单播转发给服务器;服务器的回复单播给中继,中继再转发给客户端。

抓包对比
下图左半部分显示了客户端与中继之间的报文,多为广播;右半部分显示了中继与服务器之间的报文,则全部是单播。这正是中继工作模式的直观体现。
客户端-中继与中继-服务器抓包对比

总结

DHCP协议通过Discover、Offer、Request、ACK四个步骤,优雅地实现了IP地址的自动分配。其内置的租约与续租机制确保了地址资源的有效流转。而在复杂的网络环境中,DHCP中继代理通过“广播转单播”和携带Relay Agent IP信息,巧妙地解决了跨网段分配的难题。

理解这些底层原理,不仅能帮助你在出现网络连接问题时快速定位(是没拿到地址?续租失败?还是中继配置错误?),也能让你在规划网络时做出更合理的决策,比如租期时长、中继代理部署位置等。如果你在实践中有更多关于网络协议的疑问或心得,欢迎到 云栈社区 与大家一起交流讨论。




上一篇:Claude Code源码泄露:从“补全工具”到“工程参与者”的AI范式转变
下一篇:一个43岁运维人的AI创业实验:用DeepSeek与Midjourney构建一人公司
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 16:37 , Processed in 0.583376 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表