原文链接
理解DHCP的雏形BOOTP(Bootstrap Protocol)
DHCP的为什么要替代BOOTP;它们的区别在哪里?
理解DHCP的工作原理与每个过程的数据帧取证
Offer消息到底是以单播的方式进行发送,还是以广播的方式进行发送
关于DHCP服务器分配IP地址时的冲突检测
动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)被设计用于动态的为网络中的主机分配IP地址及其它相关的TCP/IP属性,它属于客户/服务模式的应用程序,使用UDP协议号67(服务端)和68(客户端)工作。它代替了网络管理员手工为网络中的计算机配置IP地址及其它TCP/IP属性的工作,如果网络中的计算机数量较大,使用人工静态配置IP地址容易造成配置错误,比如:把一个IP地址配置到两台不同的计算机,当配置量过大时,这种失误是很有可能的,造成过大的管理成本开销,所以,在中大型网络中通常都使用DHCP为计算机自动配置IP地址及其它相关的TCP/IP属性,本小节将以描述DHCP的工作原理与演示DHCP在思科路由器上的配置为重点。
理解DHCP的雏形BOOTP(Bootstrap Protocol):
DHCP的前生是BOOTP(Bootstrap Protocol),要理解DHCP,不得不说明一下这个BOOTP(Bootstrap Protocol),它比DHCP出现得更早,与DHCP提供类似的服务,用于网络早期的无盘工作站,这个无盘工作站在现今的网络应用中基本上已经退出应用市场了,如果还能看到它影子,那就是超市和商场所用的收银机。BOOTP的功能就是为这些无盘终端自动的分配IP地址、子网掩码、默认网关、DNS地址。
DHCP的为什么要替代BOOTP;它们的区别在哪里?
由于DHCP的出现,BOOTP逐渐被DHCP所替代,因为DHCP有更完善、更安全的工作机制、能够提供更灵活的IP地址分配方式、能够为客户机自动配置更多的TCP/IP参数,如果更具体的讲就是:BOOTP在分配IP地址时,IP地址和请求主机的MAC必须被预置到BOOTP服务器上,如果BOOTP客户端发来的IP地址请求消息中,请求主机的源MAC地址在BOOTP服务器上有记录,并对应了一个IP,那么,BOOTP服务器将对应的IP发放给BOOTP的客户端,如果没有对应记录的存在,请求会话将失败,这是BOOTP缺泛灵活性的一种典型代表;另外DHCP支持发放IP地址的“租约”机制,但是BOOTP不支持,关于“租约”机制,后面会有详细的描述;BOOTP只能最多分配4个网络参数,分别是IP地址、子网掩码、默认网关、DNS地址,DHCP可以提供更多的TCP/IP属性的自动配置。
理解DHCP的工作原理与每个过程的数据帧取证:
现在来理解DHCP的工作原理并取证每个工作过程的数据帧,如下图 9.12所示为DHCP的工作过程,这四个过程,基本上是现今网络领域公认的四大过程,但事实上,DHCP的工作原理在这四个公认的过程中还有一些小插曲,关于这一点,取证了如下图9.13所示的DHCP完整工作过程的数据帧,所以现在拟订一个清晰的学习思路:
理解DHCP四个工作步骤,并分析每个工作步骤的数据帧。
理解为什么在这四个工作步骤中会携带两个ARP请求消息,并分析这两个ARP请求消息。
第一步:DHCP客户端向本地子网发送一个DHCP的Discover消息,该消息是以广播的形式被发送到网络上,源MAC地址是发送源主机的MAC地址,源IP地址是0.0.0.0,因为此时的客户机还没有被DHCP动态的配置IP地址,目标MAC地址是广播MAC(FFFF.FFFF.FFFF),目标IP地址是广播IP(255.255.255.255),为什么该消息会是广播,因为客户端现在根本就不知道网络上谁是DHCP服务器,关于DHCP客户端发送的DHCP Discover消息的数据帧如下图 9.14所示。
图9.14 DHCP的在Discover数据帧
在执行DHCP第二步Offer消息前的小插曲:当收到客户端发来的Discover消息的DHCP服务器会立即查寻自己可对外提供IP地址的地址池,提供一个可以分配给DHCP客端的机会IP,比如192.168.2.5;注意:此时并不是立即将这个地址分配出去,这只是一个可供分配的机会IP,DHCP服务器会以自己的MAC作为源MAC,自己的IP作为源目标,向网络中发送一个目标IP地址为192.168.2.5(事实上,就是那个机会IP)的ARP请求,目的在于:确认这个它(DHCP服务器)认为可以分配给某个客户端的IP地址,是否正在被别的主机使用,如果网络上有主机正在使用这个IP地址,可能是管理员人工输入的,该主机就会对这个ARP请求应答,这说明,192.168.2.5这个地址正在被使用,反之,没有应答,就表示DHCP可以将这个地址分配给某个DHCP的客户端,关于DHCP用于检测机会IP是否被其它主机使用的数据帧如下图9.15所示。
第二步:DHCP服务器必须完在上述的小插曲后,方可确定机会IP地址可以提供给DHCP的客户端,这也是为什么在DHCP工作的四个步骤中会出现一个ARP消息的原因。此时DHCP向网络中发送一个Offer消息,为客户端提供IP地址。
注意:行业工程师一直在争论着一个问题:Offer消息到底是以单播的方式进行发送,还是以广播的方式进行发送,然后,在进行协议分析时,有时会出现广播消息的Offer数据帧;有时会出现单播消息的数据帧,这是怎么回事?
首先说明:DHCP服务器发送的Offer消息,即可以是单播形式,也可以是广播形式,这要分情况而定,如果将Offer消息单纯的定义为广播或是单播发送都是不严密的定义,事实上DHCP的Offer消息是广播还是单播,这取决于DHCP客户的具体情况,它可以从如下图图 9.16所示DHCP报文中的两个关键字段来做出定义,客户端IP地址(CIAddr)和标志(Flags)中的Broadcast flag来决定:
n如果Broadcast flag被转置位为1,则表示客户机不允许DHCP服务器的Offer消息以单播的方式回应,所以必须使用广播回应,在如下图 9.16所示的数据帧中Broadcastflag被转置位为0,所以DHCP服务器可以选择以单播的方式发送Offer消息。
n如果客户端IP地址(CIAddr)有一个明确的IP地址,这个已经存在的IP地址,可能是上次引导计算机时DHCP服务器提供的IP地址。那么,此时DHCP服务器的Offer消息将以单播的方式回应。
n如果Broadcast flag和客户端IP地址(CIAddr)都是0;此时,DHCP服务器既可以使用广播进行Offer消息发送,也可以使用上一步小插曲中的ARP记录进行单播发送,因为在小插曲中的机会地址检测说明网络上没有主机使用这个地址,所以,此时DHCP服务可以假定192.168.2.5这个IP地址可供请求主机使用,所以,可以使用单播的形式回送Offer消息给DHCP客户机,但事实上,请求主机此时还没有真正的获得这个IP。
第三步:当DHCP的客户机收到服务器发来的Offer消息后,它会以广播的形式发出一个DHCP的Request消息,正式向DHCP服务器申请IP地址,注意该消息并不是只发给提供机会IP的DHCP服务器,而是以广播的形式发送给网络中的所有DHCP服务器,因为一个网络上有可能存在多台DHCP服务器,现在DHCP客户端正是使用这个DHCP的Request广播向整个网络可能存在的所有DHCP服务器讲:“我现在准备申请192.168.2.1这台DHCP服务器所提供的192.168.2.5这个IP地址如下图 9.17所示,其它DHCP服务器,你们的好意心领了!”相当于是委婉的拒绝其它的DHCP服务器提供相应的IP地址,也就是说:如果网络上还有其它的DHCP服务器,它们收到这个Request广播后,拆开广播帧,发现该数据帧里面的DHCP服务器Identifier字段为192.168.2.1,就视作客户端对自己的拒绝。
第四步:当DHCP服务器收到客户端发来的Request消息后,提供IP地址的DHCP服务器会给DHCP客户端发送一个DHCP的ACK消息,目的在于告诉DHCP客户端分配的IP地址的“租期”生效;并且告之什么时间可以提交“续租请求”;以及什么时候被分配的IP地址将从客户机上解除绑定;如下图9.18所示,所谓IP地址的“租期”指示IP地址在客户机上存在的有效时间,思科的路由器一般“租期”为24小时(1天),“续租请求”指示当“租期”已经使用了一天的一半时间时即12小时的时候,DHCP客户端可以发送续订这个IP地址的请求,如果DHCP服务器有更多的地址供分配给其它主机,那么,DHCP服务器将答应客户端的“续租请求”,然后将“租期”时间重新复位到24小时,如果,此时DHCP服务器上的地址池很紧张,已经没有多余的IP地址可供分配给其它主机,那么,DHCP服务器将拒绝“租期”,但是,它暂时不会回收IP地址,直到解除绑定时间到期,它仍然没有多余的IP供分配,那么DHCP服务器将回收已经分配出去的IP地址。关于DHCP服务器发送ACK消息的类型,可以是单播,也可以是广播,这与第二步中的DHCP Offer消息一样,关键取决于DHCP的客户端的几个关键字段,在这里就不再重复描述。
当DHCP客户端完成IP地址申请后的一个小插曲:
当完成上述DHCP的四个工作过程后,得到IP地址的主机为了最终确保在网络中,没有其它主机正在使用分配给它的IP地址,DHCP客户端会向网络中发送一条IP地址冲突检测的ARP消息,如下图 9.19所示,源和目标IP地址都是自己的IP,源MAC地址为DHCP客户端的MAC地址,目标MAC全为0;这个ARP请求,将永远不希望得到回应,因为“自己请求解析自己,如果网络上没有一个相同的自己(冒牌货,实际上就是地址冲突)”那么,这个ARP请求永远不可能得到回应,如果主机回应了这个ARP请求,就表示网络上有两台主机正在使用相同的IP地址,此时,DHCP客户端会给DHCP服务器发送一个DHCP的Decline的消息,意思就是“DHCP服务器,我被你忽悠了!现在我不要你的IP地址”。