1. 背景
DHCP全称是Dynamic Host Configuration Protocol。其协议标准是RFC1541(已被RFC2131取代),主要实现服务器向客户端动态分配IP地址(如IP地址、子网掩码、网关、DNS)和配置信息。其系统架构是标准的C/S架构。RFC2131标准是基于Bootstrap 协议 (BOOTP)。
DHCP是处于上图中的应用层,传输层使用了UDP,可以通过网络分析工具对此进行分析。客户端通过68端口发出广播请求,服务器通过67端口发送广播回应请求。
2. 消息格式
3. 通信流程
如上图所示,DHCP的流程分为4步:DHCPDISCOVER(发现)、DHCPOFFER(提供)、DHCPREQUEST(请求)、DHCPACK(确认)。
3.1. DHCPDISCOVER
DHCP 客户端向范围内的所有可用 DHCP 服务器发送 DHCP 发现广播请求。客户端发送 DHCPDISCOVER 数据包,其UDP的目标地址为 255.255.255.255,源地址为 0.0.0.0。 DHCP 部分将数据包标识为发现数据包,并使用网卡的物理地址在两个位置标识客户端。
3.2. DHCPOFFER
从 DHCP 服务器接收 DHCP 提供广播响应,提供可用的 IP 地址租约。收到DHCPDISCOVER阶段发送的数据包后,DHCP 服务器通过发送 DHCPOFFER 数据包进行响应,其源地址为DHCP服务器地址,目标地址为255.255.255.255,DHCP 部分将数据包标识为 Offer。
3.3. DHCPREQUEST
DHCP 客户端广播请求在结束时要求提供 IP 地址租约和 DHCP 广播确认。客户端通过发送 DHCPREQUEST 来响应 DHCPOFFER。 在以下捕获的 IP 部分中,客户端的源地址仍为 0.0.0.0,数据包的目标地址仍为 255.255.255.255。 客户端保留 0.0.0.0,因为客户端尚未收到来自服务器的验证,可以开始使用提供的地址。 目标仍会广播,因为多个 DHCP 服务器可能已响应,并且可能保留对客户端提供的套餐的预留。 这让其他 DHCP 服务器知道他们可以释放其提供的地址并将其返回到其可用池。
3.4. DHCPACK
DHCP 服务器使用 DHCPACK 响应 DHCPREQUEST,从而完成初始化周期。 源地址是 DHCP 服务器 IP 地址,目标地址仍为 255.255.255.255。
4. 多DHCP问题
并不是同一网络出现多个DHCP服务器就一定存在问题,如为了增加网络的稳定性网络中设置了两个DHCP服务器,分别负责两段ip的分配保证分出去的ip不会出现冲突,当一个DHCP服务器出现异常后另外一个也可以正常工作;如为了方便特殊网络设备的管理,在DHCP基础上架设了一个私有的DHCP服务器,仅仅为特殊设备分配IP,并不为普通设备分配IP。当然一般情况下同一网络出现多DHCP会出现网络问题,要么是ip地址分配错误,要么是ip出现冲突。
在中小型网络中多DHCP服务器冲突是一种常见的网络故障,在该网络情况下可能会出现一些网络设备可能会联网异常,使用wireshak或者tcpdump工具对网络中端口68或67上的UDP进行监听,然后对数据进行分析找到DHCP服务器的MAC地址。
5. 参考协议标准
RFC 编号 | 标题 | 说明 | 链接 |
RFC 1541 | Dynamic Host Configuration Protocol (DHCP) | DHCP 早期版本规范 | RFC 1541 |
RFC 2131 | Dynamic Host Configuration Protocol (DHCP) | DHCP 核心规范,替代了 RFC 1541 | RFC 2131 |
RFC 2132 | DHCP Options and BOOTP Vendor Extensions | 定义了 DHCP 选项和 BOOTP 扩展 | RFC 2132 |
RFC 3315 | Dynamic Host Configuration Protocol for IPv6 (DHCPv6) | 适用于 IPv6 网络的 DHCP 协议 | RFC 3315 |
RFC 3646 | DNS Configuration options for Dynamic Host Configuration Protocol for IPv6 (DHCPv6) | 定义了在 IPv6 网络中传递 DNS 配置信息的选项 | RFC 3646 |
RFC 6221 | Lightweight DHCPv6 Relay Agent | 定义了轻量级的 DHCPv6 中继代理 | RFC 6221 |