DHCP协议
定义
DHCP协议是一套让网络设备在接入时自动获得IP地址及配套参数的标准化协议,工作在应用层,报文封装在UDP中传输[1]。在IPv4环境下,服务器或中继代理在67号端口监听,客户端则在68号端口等待服务器与中继的回应[4]。
服务器通常向客户端下发的基本信息包括IP地址、子网掩码与默认网关,也可以附加DNS服务器地址、WINS服务器地址等选项;管理员通过配置服务器上的选项决定这些内容以何种方式解析并送达客户端[1]。协议本身的规范由 IETF 以RFC形式发布,IPv4部分以RFC 2131为准,选项定义见RFC 2132[5]。
原理
DHCP采用客户端/服务器结构,地址分配由客户端发起:服务器只有在收到主机的申请报文后,才会把地址与配置信息回送过去[3]。地址以“租约”形式提供,服务器发出的每个地址都带有以秒计的租用期限,客户端在期限内可以使用该地址;按规范,服务器在把地址交给客户端之前需要把租约信息写入持久存储,这可能成为服务器的性能瓶颈[4]。
典型的初次分配是四步交互:客户端以源地址0.0.0.0、目的地址255.255.255.255广播DHCPDISCOVER,询问可用的服务器;服务器回送DHCPOFFER并在YIADDR字段填入拟提供的地址;客户端广播DHCPREQUEST,声明选用哪台服务器的地址,使其他服务器释放预留;服务器最后以DHCPACK确认,租约生效[1]。DHCPREQUEST之所以仍用广播,是因为可能有多台服务器回应并已为客户端预留地址[1]。
报文格式沿袭BOOTP,前部为固定的引导字段,如OP、HTYPE、HLEN、HOPS、事务号TRANSACTION ID、ciaddr、yiaddr、siaddr、giaddr、chaddr等,可变长的options字段承载厂商自定义选项;报文类型由编码为0x53的选项标明,取值1至7依次对应DISCOVER、OFFER、REQUEST、DECLINE、ACK、NACK、RELEASE[3]。不同厂商的客户端与服务器支持的选项集合并不完全相同[1]。
地址分配有自动分配、动态分配与手工分配三种方式:自动分配给主机一个长期固定的地址;动态分配给出带时限的地址,到期或主动放弃后可供他人使用;手工分配由管理员指定地址,服务器只负责转达。三者之中,只有动态分配能让客户端不再需要的地址回到池中重复使用[3]。为满足服务器等需要固定地址的设备,服务器还可配置主机保留,把客户端标识(以太网MAC地址)与某个地址绑定[4]。
由于未取得地址的主机只能在本链路上通信,基础DHCPv4的作用范围限于本地链路,跨网段部署需借助DHCP中继代理,把请求转发给集中式服务器;中继功能常见于网络设备中,也有专门的软件实现。BOOTP中继代理的存在意味着不必在每个物理网络都放置一台DHCP服务器[4][3]。
发展历程
DHCP的前身是1985年发布的BOOTP(引导程序协议),该协议让网络客户端从配置服务器取得IP地址,但每增加一台客户端都需人工录入配置,也没有回收已用地址的机制;这些不足成为扩展BOOTP的直接动因[2][5]。
DHCP于1993年10月首次以标准轨道协议的形式定义在RFC 1531中,随即因编辑过程中的错误被RFC 1541取代;1997年3月发布的RFC 2131对协议作了扩充,并一直是IPv4网络所依据的标准[2][5]。1997年还发布了RFC 2132,用于规定DHCP选项与BOOTP厂商扩展[5]。
为配合IPv6,DHCPv6于2003年以RFC 3315发布,此后历经多次补充;2018年11月的RFC 8415整合了此前多份文档,成为现行的DHCPv6规范[5][2]。DHCPv6并非简单地把DHCPv4换成IPv6地址:其首要客户端标识是DUID而非MAC地址,设备可以一次申请多个地址,RFC 3633还加入了DHCPv4中没有的委派前缀机制,RFC 3736则规定如何为使用无状态地址自动配置的客户端提供配置信息[2]。
应用
DHCP最普遍的用途是为内部网络或网络服务供应商自动分配IP地址,同时作为内网管理员对所有计算机实施集中管理的手段[3]。在主机数量较多的局域网中,由服务器统一维护地址池,新接入的终端申请即得配置,管理员不必逐台手工设定[4]。
除地址之外,服务器还能下发几乎任意的参数,例如供路由器或主机网络引导时下载启动程序所用的TFTP服务器地址、用于时钟同步的时间服务器地址,以及各类与平台相关的共享设置[6]。DHCPv6的委派前缀机制则被用于向接入设备分配地址段,适应IPv6网络的编址方式[2]。
部署中常见的形式包括:由接入网设备充当DHCP中继,把不同网段的请求集中送到一台服务器;在地址紧张或地址段不连续时,用共享子网把多个受管子网配置在同一物理网络上[4]。
局限
DHCP在设计之初优先考虑实现的简单与部署的便利,并未内置完备的安全模型;按ISC的说明,DHCP协议本身对仿冒服务器几乎没有补救手段,防范措施通常要在协议栈的其他层次实现[7]。客户端接入网络时对网络一无所知,无法分辨应答来自管理员授权的服务器还是其他主机,因此可能拿到无法正确路由的地址,或被指引去使用他人控制的域名服务器与默认网关[7]。
这类问题并不必然出于恶意:在允许用户自带设备接入的网络中,有人误将家用或小型办公路由器的错误端口接入,就足以让该设备对外广播应答并干扰其他客户端,除非在交换机上阻断未授权的DHCP服务器[7]。由于DHCP服务器与客户端之间没有认证机制,随意添加的服务器同样可以分配地址和网络参数[8]。
针对上述风险,交换机侧的 DHCP Snooping 把端口划分为信任与不信任两类:指向服务器方向的端口设为信任端口,正常转发DHCP报文;其余端口收到DHCP-ACK与DHCP-OFFER时直接丢弃,从而保证客户端只从合法服务器获得地址,同时记录客户端IP地址与MAC地址的对应关系,为后续的地址合法性检查提供依据[9]。值得注意的是,该功能仅在设备位于客户端与服务器之间、或客户端与中继之间时才能正常工作[9]。
协议还存在其他边界:DHCPv4客户端不能永久占用一个地址,租约到期即须续租或重新申请[4];DHCP本身不承担路由功能,跨网段分配必须依赖中继[6];服务器必须在发放地址前把租约写入永久存储,在高负载场景下会形成性能瓶颈[4]。此外,使用DHCP的设备在联系不上服务器时,通常会自行取用一个链路本地地址[6]。
参见
参考资料
- 动态主机配置协议 (DHCP) 基础知识 - 跳至主要内容 跳到 Ask Learn 聊天体验 [引用日期2026-10-29]
- The History of DHCP [引用日期2026-10-29]
- [科普中国]-DHCP - 版权归原作者所有,如有侵权,请联系我们 [引用日期2026-10-29]
- About DHCP [引用日期2026-10-29]
- June 2011 [引用日期2026-10-29]
- DHCP [引用日期2026-10-29]
- Securing Your Network From DHCP Risks [引用日期2026-10-29]
- DHCP Server仿冒攻击 [引用日期2026-10-29]
- h3c.com 上的网页 [引用日期2026-10-29]