DHCP服务器
DHCP Server即DHCP服务器,负责客户端IP地址的分配。客户端向服务器发送配置申请报文(包括IP地址、子网掩码、缺省网关等参数),服务器根据策略返回携带相应配置信息的报文,请求报文和回应报文都采用UDP进行封装。
DHCP客户端与服务器的交互模式
DHCP客户端首次登录网络
DHCP客户端首次登录网络时,主要通过四个阶段与DHCP服务器建立联系。发现阶段,即DHCP客户端寻找DHCP服务器的阶段。DHCP客户端以广播方式发送DHCP DISCOVER报文,只有DHCP服务器才会进行响应。
提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到DHCP客户端的DHCP DISCOVER报文后,从IP地址池中挑选一个尚未分配的IP地址分配给DHCP客户端,向该DHCP客户端发送包含出租IP地址和其它设置的DHCP OFFER报文。
选择阶段,即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该DHCP客户端发来DHCP OFFER报文,DHCP客户端只接受第一个收到的DHCP OFFER报文,然后以广播方式向各DHCP服务器回应DHCP REQUEST报文,该信息中包含向所选定的DHCP服务器请求IP地址的内容。
确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCP REQUEST报文后,便向DHCP客户端发送包含它所提供的IP地址和其它设置的DHCP ACK确认报文。然后,DHCP客户端将其TCP/IP协议组件与网卡绑定。
除DHCP客户端选中的服务器外,其它DHCP服务器本次未分配出的IP地址仍可用于其他客户端的IP地址申请。
DHCP客户端再次登录网络
当DHCP客户端再次登录网络时,主要通过以下几个步骤与DHCP服务器建立联系:
DHCP客户端首次正确登录网络后,以后再登录网络时,只需要广播包含上次分配IP地址的DHCP REQUEST报文即可,不需要再次发送DHCP DISCOVER报文。
DHCP服务器收到DHCP REQUEST报文后,如果客户端申请的地址没有被分配,则返回DHCP ACK确认报文,通知该DHCP客户端继续使用原来的IP地址。
如果此IP地址无法再分配给该DHCP客户端使用(例如已分配给其它客户端),DHCP服务器将返回DHCP NAK报文。客户端收到后,重新发送DHCP DISCOVER报文请求新的IP地址。
DHCP客户端延长IP地址的租用有效期
DHCP服务器分配给客户端的动态IP地址通常有一定的租借期限,期满后服务器会收回该IP地址。如果DHCP客户端希望继续使用该地址,需要更新IP租约(如延长IP地址租约)。
实际使用中,在DHCP客户端启动或IP地址租约期限达到一半时,DHCP客户端会自动向DHCP服务器发送DHCP REQUEST报文,以完成IP租约的更新。如果此IP地址有效,则DHCP服务器回应DHCP ACK报文,通知DHCP客户端已经获得新IP租约。
IP地址的分配策略
- 手工分配地址:由管理员为少数特定客户端(如WWW服务器等)静态绑定固定的IP地址。通过DHCP将配置的固定IP地址发给客户端。
- 自动分配地址:DHCP为客户端分配租期为无限长的IP地址。
- 动态分配地址:DHCP为客户端分配具有一定有效期限的IP地址,到达使用期限后,客户端需要重新申请地址。绝大多数客户端得到的都是这种动态分配的地址。
IP地址分配的优先次序
- DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。
- 客户端以前曾经使用过的IP地址,即客户端发送的请求报文中请求IP地址选项的地址。
- 在DHCP地址池中,顺序查找可供分配的空闲IP地址,最先找到的IP地址。
- 如果在DHCP地址池中未找到可供分配的空闲IP地址,则依次查询超过租期、发生冲突的IP地址,如果找到可用的IP地址,则进行分配,否则报告错误。
防止IP地址重复分配的方法
为防止IP地址重复分配导致地址冲突,DHCP服务器为客户端分配地址前,需要先对该地址进行探测。
地址探测是通过Ping命令实现的,检测是否能在指定时间内得到Ping应答。如果没有得到应答,则继续发送Ping报文,直到发送Ping包的数量达到最大值。如果仍然超时,则可以认为没有设备使用该IP地址,从而确保客户端被分得的IP地址是唯一的(根据标准协议实现)。
IP地址预留
DHCP支持预留IP地址给客户端,预留的IP地址必须是地址池中的地址,并需要将其列入到不可分配的IP地址中,这些预留出去的地址一般用于被静态长期分配给某些特定主机(例如DNS、WWW等)。