写点什么

带你了解什么是 DHCP,为什么要用 DHCP?

作者:乌龟哥哥
  • 2022 年 4 月 12 日
  • 本文字数:5139 字

    阅读完需:约 17 分钟

前言


动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户 IP 地址进行动态管理和配置。DHCP 于 1993 年 10 月成为标准协议,其前身是 BOOTP 协议。DHCP 协议由 RFC 2131 定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,DHCP Server 为网络上的每个设备动态分配 IP 地址、子网掩码、默认网关地址,域名服务器(DNS)地址和其他相关配置参数,以便可以与其他 IP 网络通信。

1、为什么要使用 DHCP?

在 IP 网络中,每个连接 Internet 的设备都需要分配唯一的 IP 地址。DHCP 使网络管理员能从中心结点监控和分配 IP 地址。当某台计算机移到网络中的其它位置时,能自动收到新的 IP 地址。DHCP 实现的自动化分配 IP 地址不仅降低了配置和部署设备的时间,同时也降低了发生配置错误的可能性。另外 DHCP 服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新 DHCP 服务器上的相关配置即可,实现了集中化管理。


总体来看,DHCP 带来了如下优势:


  • 准确的 IP 配置:IP 地址配置参数必须准确,并且在处理“ 192.168.XXX.XXX”之类的输入时,很容易出错。另外印刷错误通常很难解决,使用 DHCP 服务器可以最大程度地降低这种风险。

  • 减少 IP 地址冲突:每个连接的设备都必须有一个 IP 地址。但是,每个地址只能使用一次,重复的地址将导致无法连接一个或两个设备的冲突。当手动分配地址时,尤其是在存在大量仅定期连接的端点(例如移动设备)时,可能会发生这种情况。DHCP 的使用可确保每个地址仅使用一次。

  • IP 地址管理的自动化:如果没有 DHCP,网络管理员将需要手动分配和撤消地址。跟踪哪个设备具有什么地址可能是徒劳的,因为几乎无法理解设备何时需要访问网络以及何时需要离开网络。DHCP 允许将其自动化和集中化,因此网络专业人员可以从一个位置管理所有位置。

  • 高效的变更管理:DHCP 的使用使更改地址,范围或端点变得非常简单。例如,组织可能希望将其 IP 寻址方案从一个范围更改为另一个范围。DHCP 服务器配置有新信息,该信息将传播到新端点。同样,如果升级并更换了网络设备,则不需要网络配置。

2、DHCP 是怎么工作的?

DHCP 协议采用 UDP 作为传输协议,DHCP 客户端发送请求消息到 DHCP 服务器的 68 号端口,DHCP 服务器回应应答消息给 DHCP 客户端的 67 号端口。


只有跟 DHCP 客户端在同一个网段的 DHCP 服务器才能收到 DHCP 客户端广播的 DHCP DISCOVER 报文。当 DHCP 客户端与 DHCP 服务器不在同一个网段时,必须部署 DHCP 中继来转发 DHCP 客户端和 DHCP 服务器之间的 DHCP 报文。在 DHCP 客户端看来,DHCP 中继就像 DHCP 服务器;在 DHCP 服务器看来,DHCP 中继就像 DHCP 客户端。

2.1 无中继场景时 DHCP 客户端首次接入网络的工作原理

如下图所示,在没有部署 DHCP 中继的场景下,首次接入网络 DHCP 客户端与 DHCP 服务器的报文交互过程,该过程称为 DHCP 报文四步交互。


无中继场景时 DHCP 客户端首次接入网络的报文交互示意图


第一步:发现阶段


首次接入网络的 DHCP 客户端不知道 DHCP 服务器的 IP 地址,为了学习到 DHCP 服务器的 IP 地址,DHCP 客户端以广播方式发送 DHCP DISCOVER 报文(目的 IP 地址为 255.255.255.255)给同一网段内的所有设备(包括 DHCP 服务器或中继)。DHCP DISCOVER 报文中携带了客户端的 MAC 地址(chaddr 字段)、需要请求的参数列表选项(Option55)、广播标志位(flags 字段)等信息。


第二步:提供阶段


与 DHCP 客户端位于同一网段的 DHCP 服务器都会接收到 DHCP DISCOVER 报文,DHCP 服务器选择跟接收 DHCP DISCOVER 报文接口的 IP 地址处于同一网段的地址池,并且从中选择一个可用的 IP 地址,然后通过 DHCP OFFER 报文发送给 DHCP 客户端。


通常,DHCP 服务器的地址池中会指定 IP 地址的租期,如果 DHCP 客户端发送的 DHCP DISCOVER 报文中携带了期望租期,服务器会将客户端请求的期望租期与其指定的租期进行比较,选择其中时间较短的租期分配给客户端。DHCP 服务器在地址池中为客户端分配 IP 地址的顺序如下:


  • DHCP 服务器上已配置的与客户端 MAC 地址静态绑定的 IP 地址。

  • 客户端发送的 DHCP DISCOVER 报文中 Option50(请求 IP 地址选项)指定的地址。

  • 地址池内查找“Expired”状态的 IP 地址,即曾经分配给客户端的超过租期的 IP 地址。

  • 在地址池内随机查找一个“Idle”状态的 IP 地址。

  • 如果未找到可供分配的 IP 地址,则地址池依次自动回收超过租期的(“Expired”状态)和处于冲突状态(“Conflict”状态)的 IP 地址。回收后如果找到可用的 IP 地址,则进行分配;否则,DHCP 客户端等待应答超时后,重新发送 DHCP DISCOVER 报文来申请 IP 地址。


设备支持在地址池中排除某些不能通过 DHCP 机制进行分配的 IP 地址。例如,客户端所在网段已经手工配置了地址为 192.168.1.100/24 的 DNS 服务器,DHCP 服务器上配置的网段为 192.168.1.0/24 的地址池中需要将 192.168.1.100 的 IP 地址排除,不能通过 DHCP 分配此地址,否则,会造成地址冲突。


为了防止分配出去的 IP 地址跟网络中其他客户端的 IP 地址冲突,DHCP 服务器在发送 DHCP OFFER 报文前通过发送源地址为 DHCP 服务器 IP 地址、目的地址为预分配出去 IP 地址的 ICMP ECHO REQUEST 报文对分配的 IP 地址进行地址冲突探测。如果在指定的时间内没有收到应答报文,表示网络中没有客户端使用这个 IP 地址,可以分配给客户端;如果指定时间内收到应答报文,表示网络中已经存在使用此 IP 地址的客户端,则把此地址列为冲突地址,然后等待重新接收到 DHCP DISCOVER 报文后按照前面介绍的选择 IP 地址的优先顺序重新选择可用的 IP 地址。


此阶段 DHCP 服务器分配给客户端的 IP 地址不一定是最终确定使用的 IP 地址,因为 DHCP OFFER 报文发送给客户端等待 16 秒后如果没有收到客户端的响应,此地址就可以继续分配给其他客户端。通过下面的选择阶段和确认阶段后才能最终确定客户端可以使用的 IP 地址。


第三步:选择阶段


如果有多个 DHCP 服务器向 DHCP 客户端回应 DHCP OFFER 报文,则 DHCP 客户端一般只接收第一个收到的 DHCP OFFER 报文,然后以广播方式发送 DHCP REQUEST 报文,该报文中包含客户端想选择的 DHCP 服务器标识符(即 Option54)和客户端 IP 地址(即 Option50,填充了接收的 DHCP OFFER 报文中 yiaddr 字段的 IP 地址)。


DHCP 客户端广播发送 DHCP REQUEST 报文通知所有的 DHCP 服务器,它将选择某个 DHCP 服务器提供的 IP 地址,其他 DHCP 服务器可以重新将曾经分配给客户端的 IP 地址分配给其他客户端。


第四步:确认阶段


当 DHCP 服务器收到 DHCP 客户端发送的 DHCP REQUEST 报文后,DHCP 服务器回应 DHCP ACK 报文,表示 DHCP REQUEST 报文中请求的 IP 地址(Option50 填充的)分配给客户端使用。


DHCP 客户端收到 DHCP ACK 报文,会广播发送免费 ARP 报文,探测本网段是否有其他终端使用服务器分配的 IP 地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送 DHCP DECLINE 报文,并重新向服务器请求 IP 地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。


当 DHCP 服务器收到 DHCP 客户端发送的 DHCP REQUEST 报文后,如果 DHCP 服务器由于某些原因(例如协商出错或者由于发送 REQUEST 过慢导致服务器已经把此地址分配给其他客户端)无法分配 DHCP REQUEST 报文中 Option50 填充的 IP 地址,则发送 DHCP NAK 报文作为应答,通知 DHCP 客户端无法分配此 IP 地址。DHCP 客户端需要重新发送 DHCP DISCOVER 报文来申请新的 IP 地址。

2.2 有中继场景时 DHCP 客户端首次接入网络的工作原理

有 DHCP 中继的场景中,首次接入网络的 DHCP 客户端和 DHCP 服务器的工作原理与无中继场景时 DHCP 客户端首次接入网络的工作原理相同。主要差异是 DHCP 中继在 DHCP 服务器和 DHCP 客户端之间转发 DHCP 报文,以保证 DHCP 服务器和 DHCP 客户端可以正常交互。下面仅针对 DHCP 中继的工作原理进行介绍。


如下图所示,在部署 DHCP 中继的场景下,首次接入网络 DHCP 客户端与 DHCP 服务器的报文交互过程。


有中继场景时 DHCP 客户端首次接入网络的报文交互示意图

第一步:发现阶段

DHCP 中继接收到 DHCP 客户端广播发送的 DHCP DISCOVER 报文后,进行如下处理:


  • 检查 DHCP 报文中的 hops 字段,如果大于 16,则丢弃 DHCP 报文;否则,将 hops 字段加 1(表明经过一次 DHCP 中继),并继续下面的操作。

  • 检查 DHCP 报文中的 giaddr 字段。如果是 0,将 giaddr 字段设置为接收 DHCP DISCOVER 报文的接口 IP 地址。如果不是 0,则不修改该字段,继续下面的操作。

  • 将 DHCP 报文的目的 IP 地址改为 DHCP 服务器或下一跳中继的 IP 地址,源地址改为中继连接客户端的接口地址,通过路由转发将 DHCP 报文单播发送到 DHCP 服务器或下一跳中继。


如果 DHCP 客户端与 DHCP 服务器之间存在多个 DHCP 中继,后面的中继接收到 DHCP DISCOVER 报文的处理流程同前面所述。

第二步:提供阶段

DHCP 服务器接收到 DHCP DISCOVER 报文后,选择与报文中 giaddr 字段为同一网段的地址池,并为客户端分配 IP 地址等参数,然后向 giaddr 字段标识的 DHCP 中继单播发送 DHCP OFFER 报文。


DHCP 中继收到 DHCP OFFER 报文后,会进行如下处理:


  • 检查报文中的 giaddr 字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。

  • DHCP 中继检查报文的广播标志位。如果广播标志位为 1,则将 DHCP OFFER 报文广播发送给 DHCP 客户端;否则将 DHCP OFFER 报文单播发送给 DHCP 客户端。

第三步:选择阶段

中继接收到来自客户端的 DHCP REQUEST 报文的处理过程同无中继场景下的选择阶段。


第四步:确认阶段


中继接收到来自服务器的 DHCP ACK 报文的处理过程同无中继场景下的确认阶段。

2.3 DHCP 客户端重用曾经使用过的地址的工作原理

DHCP 客户端非首次接入网络时,可以重用曾经使用过的地址。如下图所示,DHCP 客户端与 DHCP 服务器交互 DHCP 报文,以重新获取之前使用的 IP 地址等网络参数,该过程称为两步交互。



*DHCP 客户端重用曾经使用过的 IP 地址的报文交互过程*

第一步:选择阶段

客户端广播发送包含前一次分配的 IP 地址的 DHCP REQUEST 报文,报文中的 Option50(请求的 IP 地址选项)字段填入曾经使用过的 IP 地址。

第二步:确认阶段

DHCP 服务器收到 DHCP REQUEST 报文后,根据 DHCP REQUEST 报文中携带的 MAC 地址来查找有没有相应的租约记录,如果有则返回 DHCP ACK 报文,通知 DHCP 客户端可以继续使用这个 IP 地址。否则,保持沉默,等待客户端重新发送 DHCP DISCOVER 报文请求新的 IP 地址。

2.4 DHCP 客户端更新租期的工作原理

DHCP 服务器采用动态分配机制给客户端分配 IP 地址时,分配出去的 IP 地址有租期限制。DHCP 客户端向服务器申请地址时可以携带期望租期,服务器在分配租期时把客户端期望租期和地址池中租期配置比较,分配其中一个较短的租期给客户端。租期到期或者客户端下线释放地址后,服务器会收回该 IP 地址,收回的 IP 地址可以继续分配给其他客户端使用。这种机制可以提高 IP 地址的利用率,避免客户端下线后 IP 地址继续被占用。如果 DHCP 客户端希望继续使用该地址,需要更新 IP 地址的租期(如延长 IP 地址租期)。


DHCP 客户端更新租期的过程如下图所示。



*DHCP 客户端更新租期示意图*


  • 当租期达到 50%(T1)时,DHCP 客户端会自动以单播的方式向 DHCP 服务器发送 DHCP REQUEST 报文,请求更新 IP 地址租期。如果收到 DHCP 服务器回应的 DHCP ACK 报文,则租期更新成功(即租期从 0 开始计算);如果收到 DHCP NAK 报文,则重新发送 DHCP DISCOVER 报文请求新的 IP 地址。

  • 当租期达到 87.5%(T2)时,如果仍未收到 DHCP 服务器的应答,DHCP 客户端会自动以广播的方式向 DHCP 服务器发送 DHCP REQUEST 报文,请求更新 IP 地址租期。如果收到 DHCP 服务器回应的 DHCP ACK 报文,则租期更新成功(即租期从 0 开始计算);如果收到 DHCP NAK 报文,则重新发送 DHCP DISCOVER 报文请求新的 IP 地址。

  • 如果租期时间到时都没有收到服务器的回应,客户端停止使用此 IP 地址,重新发送 DHCP DISCOVER 报文请求新的 IP 地址。


客户端在租期时间到之前,如果用户不想使用分配的 IP 地址(例如客户端网络位置需要变更),会触发 DHCP 客户端向 DHCP 服务器发送 DHCP RELEASE 报文,通知 DHCP 服务器释放 IP 地址的租期。DHCP 服务器会保留这个 DHCP 客户端的配置信息,将 IP 地址列为曾经分配过的 IP 地址中,以便后续重新分配给该客户端或其他客户端。客户端可以通过发送 DHCP INFORM 报文向服务器请求更新配置信息。


如下图所示,部署 DHCP 中继时,更新租期的过程与上述过程相似。


3、DHCP 使用场景

DHCP 提供了两种地址分配机制,网络管理员可以根据网络需求为不同的主机选择不同的分配策略。


  • **动态分配机制:**通过 DHCP 为主机分配一个有使用期限的 IP 地址。

  • DHCP 使用了租期的概念,或称为设备 IP 地址的有效期。租用时间是不定的,主要取决于用户在某地连接 Internet 需要多久,这种分配机制适用于主机需要临时接入网络或者空闲地址数小于网络主机总数且主机不需要永久连接网络的场景。

  • **静态分配机制:**网络管理员通过 DHCP 为指定的主机分配固定的 IP 地址。

  • 相比手工静态配置 IP 地址,通过 DHCP 方式静态分配机制避免人工配置发生错误,方便管理员统一维护管理。

用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

还未添加个人简介

评论

发布
暂无评论
带你了解什么是DHCP,为什么要用DHCP?_DHCP_乌龟哥哥_InfoQ写作平台