动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP,是一个应用于局域网的网络协议,该协议允许服务器向客户端动态分配IP地址和配置信息。
DHCP位于OSI模型的应用层,使用UDP协议工作,主要有两个用途,一个是用于内部网或网络服务供应商自动分配IP地址给用户,另一个是用于内部网管理员作为对所有电脑作中央管理的手段。
DHCP具有如下几点功能:
- 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
- DHCP应当可以给用户分配永久固定的IP地址。
- DHCP应当可以同用其他方法获得IP地址的 主机共存(如手工配置IP地址的主机)。
- DHCP 服务器应当向现有的BOOTP 客户端提供服务。
DHCP中IP地址分配方式:
1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。
DHCP中继:DHCP中继代理,就是在DHCP服务器和客户端之间转发DHCP数据包。当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息。DHCP中继代理的数据转发,与通常路由转发是不同的,通常的路由转发相对来说是透明传输的,设备一般不会修改IP包内容。而DHCP中继代理接收到DHCP消息后,重新生成一个DHCP消息,然后转发出去。
在DHCP客户端看来,DHCP中继代理就像DHCP服务器;在DHCP服务器看来,DHCP中继代理就像DHCP客户端。
中继代理配置命令:
//让DHCP数据包可以穿越路由
SW(config-if)#ip helper-address + 目标IP
工作原理
1.DHCP Client以广播的方式发出DHCP Discover报文。
2.所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server,DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
3.默认情况下DHCP Client处理最先收到的DHCP Offer报文。
DHCP Client会发出广播DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
4.DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
5.DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCP Server发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
6.DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
DHCP租期
当DHCP客户端向DHCP服务器租用到IP地址后,DHCP客户端只是暂时使用这个地址。如果客户端在租约到期并没有更新租约,则DHCP服务器收回该IP地址,并将该IP地址提供给其他的DHCP客户端使用。如果原DHCP客户端又需要IP地址,可以向DHCP服务器重新租用另一个IP地址。
在默认情况下,Windows Server 2008对于有线网络创建的租约周期为8天,无线网络是6小时。
从DHCP客户端租到IP地址并正式开始使用时算起,在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
附:较综合的实验配置(包含DHCP的相关配置)欢迎阅读拙作CCNA综合实验
DHCP snooping
DHCP Snooping技术是DHCP安全特性,通过建立和维护DHCP Snooping绑定表过滤不可信任的DHCP信息,这些信息是指来自不信任区域的DHCP信息。DHCP Snooping绑定表包含不信任区域的用户MAC地址、IP地址、租用期、VLAN-ID 接口等信息。
当交换机开启了 DHCP-Snooping后,会对DHCP报文进行侦听,并可以从接收到的DHCP Request或DHCP Ack报文中提取并记录IP地址和MAC地址信息。另外,DHCP-Snooping允许将某个物理端口设置为信任端口或不信任端口。信任端口可以正常接收并转发DHCP Offer报文,而不信任端口会将接收到的DHCP Offer报文丢弃。这样,可以完成交换机对假冒DHCP Server的屏蔽作用,确保客户端从合法的DHCP Server获取IP地址。
我们不妨打个比方:
你的室友:DHCP服务器
室友女朋友:DHCP客户端
你:不可信任的DHCP信息
假设你的室友的女朋友是一个让你很心动的女孩子,你想追她但苦于没有她的联系方式(这个比方略显渣男哈哈)。
一个偶然的机会,你得到了她的微信号并加为好友。此时,你冒充他的男朋友给她发消息:我的手机坏了,现在在用室友的手机和你聊天。今晚七点我们操场南门见吧。
如果她(室友女朋友)信任了这条消息并出门赴约,将会产生被挖墙脚的隐患,这种情况显然是室友所不想看到的。为了避免这种情况的发生,你的室友应当告诫女朋友:除了我的微信号,别人给你发的消息都不要相信。如此一来,便可以避免被挖墙脚的风险。
即:信任端口可以正常接收并转发DHCP Offer报文,而不信任端口会将接收到的DHCP Offer报文丢弃。
默认情况下,设备上开启了DHCP snooping后,所以的端口均为不信任端口,需手动设置信任端口。
模拟实验
上图所示拓扑,TP为路由器
仅进行DHCP snooping 相关配置
SW-4
SW-4(config)#ip dhcp snooping
SW-4(config)#ip dhcp snooping vlan 10
SW-5
SW-5(config)#ip dhcp snooping
SW-5(config)#ip dhcp snooping vlan 10
查看DHCP snooping配置
注:中继代理把从客户端接收到的DHCP请求报文添加进option 82选项,可以标记终端设备所在的位置。只有信任端口才能转发option 82的数据包,不信任端口不能转发。为开启DHCP的设备,如果接收到带有option 82选项的数据包将不能识别。若要识别,需要开启信任option 82选项的数据包。
手动设置信任端口
SW-4(config-if)#interface range e0/0-1
SW-4(config-if)#ip dhcp snooping trust
未开启DHCP设备设置信任option 82选项
SW(config)#ip dhcp relay information trust-all
防止饥饿***
用户发送的DHCP 请求报文中,DHCP Server根据请求报文里面的client mac address字段来给用户分配IP,非法用户会通过伪造client字段的mac 地址来进行请求分配IP,这样导致DHCP Server 地址池很快被消耗,正常的用户会获取不到IP,对于这种***,交换机上可以在全局下使用如下命令来防止DHCP耗竭***
SW(config)#ip dhcp snooping verify mac-address
这样DHCP请求报文经过交换机的时候,交换机回去匹配二层帧头的mac地址与client字段里面的mac地址是否一致,如果不一致则丢弃报文,从而有效的防止了DHCP Server地址池由于被***而消耗地址。
限制DHCP包的转发速率
//限制dhcp包的转发速率,超过后接口就shutdown,默认不限制
SW(config-if)#ip dhcp snooping limit rate 10
//自动恢复因超过转发速率而关闭的端口,默认恢复时间为300s
SW(config)#errdisable recovery cause dhcp-rate-limit
//修改恢复时间
SW(config)#errdisable recovery interval 30
//查看相关配置
SW(config)#do show errdisable recovery