DHCP简介
- DHCP是Dynamic Host Configuration Protocol(动态主机配置协议)的缩写
- DHCP是从BOOTP (Bootstrap Protocol)协议发展而来,其作用向主机动态分配IP地址及其他相关信息
- DHCP采用客户端/服务器模式,服务器负责集中管理,客户端向服务器提出配置申请,服务器根据策略返回相应配置信息
- DHCP是一个局域网的网络协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求。
- DHCP是应用层协议,报文采用UDP封装。服务器所侦听的端口号是67,客户端的端口号是68(使用UDP67端口作为源端口回应应答消息给主机,使用UDP68端口作为目的端口来广播信息,即DHCP服务器回应应答消息给主机的68号端口)
DHCP特点
- 即插即用性
客服端无须配置既能获得IP地址及相关参数。简化客服端网络配置,降低维护成本
- 统一管理
所有IP地址及相关参数信息由DHCP服务器统一管理,统一分配
- 使用效率高
通过IP地址租期管理,提供IP地址的使用效率
- 可跨网段实现
通过使用DHCP中继,可使处于不同子网中的客服端和DHCP服务器之间实现协议报文交互
DHCP系统组成
- DHCP服务器
能提供DHCP功能的服务器或具有DHCP功能的网络设备
- DHCP中继
一般为路由器或三层交换机等网络设备
- DHCP客服端
需要动态获得IP地址的主机
DHCP地址分配方式
- 手动分配
根据需求,网络管理员为某些少数特定的主机(如DNS服务器、打印机)绑定固定的iP地址,其地址不会过期
- 自动分配
为连接到网络的某些主机分配IP地址,该地址将长期由该主机使用
- 动态分配
主机申请IP地址最常用的方法。DHCP服务器为客户端指定一个IP地址,同时为此地址规定了一个租用期限,如果租用时间到期,客户端必须重新申请IP地址
IP地址动态获取过程
(图有错误,2,4应该为广播回应,因为那时状态,client为IP地址,所以无法发送单播)
- 首先,客户端向DHCP服务器发送一个DHCPdiscover的报文。
客户机第一次登录网络时,先广播发送一个DHCPdiscover信息,发起ip地址申请
(广播发送,可以理解为海投简历)
- 服务器端对客户端回应DHCPoffer。
DHCP服务器收到上面客户机发出的DHCPdiscover请求,会从自己尚未分配出去的ip地址池中挑选一个发给客户机,这个消息叫做DHCPoffer,有可能广播范围内不止一个DHCP服务器,那么客户机只接受自己收到的第一个DHCPoffer
(广播回应,可以理解为企业提供offer)
- 客户端向服务器发送DHCPrequest
客户机收到DHCPoffer后会再次广播发送一个DHCPRequest消息,通知提供给自己offer的DHCP服务器自己收到了offer,同时通知其他DHCP服务器,自己没有采用它们的offer,它们可以收回自己的offer了。
(广播发送,可以理解为告诉那些收到我的简历的企业,我不去你们那里了,同时通知提供给自己offer的企业自己收到了offer)
- 服务器端向客户端回复一个DHCPack
DHCP服务器收到刚才的request消息后,做出最后的确认,向客户机发送DHCPack消息,这个消息包括地址租借时长期限等消息
(广播回应,可以理解为企业与求职者的确认关系)
IP地址拒绝及释放
DHCP组约更新
- DHCP客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP服务器发送DHCPREQUEST消息包;如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%
- 如果在租期过去50%的时候没有更新,则DHCP客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系; 如果还不成功,到租约的100%时候,DHCP客户机必须放弃这个IP地址,重新申请
- 如果此时并没有DHCP可用,DHCP客户机会使用169.254.0.0/16中随机一个地址,并且每隔5min在进行尝试
DHCP中继工作原理
- 当DHCP客户端启动并进行DHCP初始化时,它在本地网络广播配置请求报文。
- 如果本地网络存在DHCP服务器,则可以直接进行DHCP配置,不需要DHCP中继。
- 如果本地网络没有DHCP服务器,则与本网络相连的且带DHCP中继功能的网络设备收到该广播报文后,进行适当的处理并转发给指定的在其它网络上的DHCP服务器。
- DHCP服务器根据客户端提供的信息进行相应的配置,并通过DHCP中继将配置信息发送给客户端,完成对客户端的动态配置。