DHCP的租约分为一下6个过程:

1.客户机请求IP:客户机以广播的方式发送DHCP Discover包来寻找DHCP服务器,广播中包含DHCP客户机的MAC和计算机名。

2.服务器响应:DHCP服务器接收到来到客户机的请求IP地址信息时,服务器就在自己的IP地址池中查找是否有合法的IP提供给客户机,如果有,DHCP服务器就把此IP地址做上标记,加入到DHCP Offer的消息中,然后DHCP服务器就广播一条Offer消息:DHCP客户机的MAC、提供的合法IP、子网掩码、默认网关、租约期限、DHCP服务器的IP地址。

3.客户机选择IP:客户机接收到DHCP Offer包后,提取里面的IP地址,然后广播DHCP Resquest消息到所有DHCP服务器,表明他接受提供的内容。数据包里包含客户机提供IP配置的服务标识符(服务器IP地址)。服务器查看服务器标识字段,以确定提供的IP地址时候被接受。

4.服务器确定租约:服务器收到DHCP Resquest后,就向客户机广播DHCP ACK消息成功确认。DHCP ACK中包含 地址的有效租期和其它配置的消息。

5.重新登录:DHCP客户机每次重新登录,不用再发送DHCP DIscover消息,直接发送包含前一次所分配的IP地址的DHCP Request 请求信息,DHCP服务器尝试让DHCP客户机继续使用原来的IP地址。如果此IP地址不能分配给原来的客户机,则服务器发送一个DHCP Nack否认信息,客户机收到此消息后就会重新发送DHCP Discover消息来请求新的地址。

6.更新租约:客户机到了50%的时候就开始准备续约了,85%的时候是第二次了,如果85%的时候还没有能获取到dhcp服务器的地址续约,客户端得赶紧另谋出路了,发DHCP discover包,找DHCP服务器

注:如果 DHCP客户机无法找到DHCP服务器,它将从TCP/IP的B类网段169.254.0.0中挑选一个 地址作为自己的 地址,并且每隔5 min 尝试与DHCP服务器进行通信。

 下面我们来考虑怎样***DHCP服务器,看看如下拓扑图:

我们可以通过***主机D,发送DHCP Discover 包来瞬间耗尽DHCP服务器A的地址池,然后建立流氓DHCP服务器,再发送RELEASE包,这样主机C就会在网上寻找DHCP服务器,D就会告诉DHCP客户端虚假的地址和网关。就达到了***DHCP的目的。用到的***是基于Ubuntu下的yersinia 软件

那么我们来讲讲怎么防御DHCP***:我们可以在交换机上启用端口监听,设置信任端口和非信任端口,默认下交换机端口都是非信任端口。 

非信任端口:连接终端设备的端口,该端口客户端只能发送DHCP请求报文,而丢弃来自该端口的其他所有DHCP报文(DHCP offer等)

信任端口:连接合法的DHCP服务器或者汇聚接口,能够转发和接收所有DHCP报文

防御DHCP的拓扑图:

开启交换机端口监听功能: Switch(config)#ipdhcp snooping

设置DHCP监听作用于那个VLAN: Switch(config)#ipdhcp snooping vlannumber

配置端口信任或非信任:  Switch(config-if)#ipdhcp snooping trust

报文中插入选项82信息:Switch(config)# ip dhcp snoopling infornamation option

限制DHCP报文速率,jianhuan DHCP 耗尽***:Switch(config-if)# ip dhcp snoopling limit rate rate(速率)

这样就可以达到防御DHCP***的目的。