DHCP是BOOTP的扩展,是基于C/S模式的,它提供了一种动态指定IP地址和配置参数的机制。这主要用于大型网络环境和配置比较困难的地方。DHCP服务器自动为客户机指定IP地址,指定的配置参数有些和IP协议并不相关,但这必没有关系,它的配置参数使得网络上的计算机通信变得方便而轻易实现了。DHCP使IP地址的可以租用,对于许多拥有许多台计算机的大型网络来说,每台计算机拥有一个IP地址有时候可能是不必要的。租期从1分钟到100年不定,当租期到了的时候,服务器可以把这个IP地址分配给别的机器使用。客户也可以请求使用自己喜欢的网络地址及相应的配置参数。
DHCP是对BOOTP的扩展,它的包格式和BOOTP也一样,这样它就可以使用BOOTP的中转发代理来发送DHCP包了,这使得BOOTP和DHCP之间可以实现互操作。对于BOOTP转发代理来说,发的是DHCP包还是BOOTP包,它根本分不清楚。它们使用的服务器端口号是67和68,但是有些地方还有些不同:
DHCP定义了一种可以使IP地址使用一段有限时间的机制,在客户期限到了的时候可以重新分配这个IP地址。
DHCP为用户提供所有IP配置参数。
DHCP包长度比BOOTP包长度稍长。既然包比BOOTP的长,那也不是白带的,这多出的长度里包括了网络配置参数。
DHCP的包都比BOOTP的长,那协议也复杂了。DHCP有七种消息类型,而BOOTP只有两种。
下图中我们可以清楚地看到客户机请求获得网络地址和配置参数的最初几个步骤:
第一步的时候客户发出包的名称叫DHCPDISCOVER,而服务器返回包的名称叫DHCPOFFER。
1.BOOTP转发代理接收到请求包,并负责向DHCP其它网络内的DHCP服务器转发。
2.DHCP服务器以DHCPOFFER响应客户的要求,这个包内包括可用的IP地址和参数。
3.BOOTP转发代理接收包,并对它进行检查。假如它觉得没有问题,就向客户转发。
4.假如客户在发出DHCPOFFER包后一段时间内没有接收到回应,它有机会重新发送请求10次,否则就通知用户。客户机可以同时接收到许多个服务器的应答,它可以自己决定用哪一个。下图是客户决定了以后,向服务器发送应答时的情况。
5.当客户选定了某个目标服务器后,它会广播DHCPREQUEST包,用以通知选定的服务器和未选定的服务器。
6.转发工作仍然由BOOTP转发担任。
7.收到DHCPREQUEST包服务器会检查收到的包,假如包内的地址和提供的地址一致,证实现在客户机选择的是这台服务器提供的地址,假如不是,自己提供的地址被拒绝了。
8.被选定的服务器在接收到DHCPREQUEST包以后,因为某些原因可能不能向客户提供这个网络地址或参数,它可以向客户发送DHCPNAK包,假如可以提供则可以发送DHCPACK包。
客户在收到包后,检查内部的网络地址和租用时间,假如客户觉得这个包有问题,它可以发送DHCPDECLINE包拒绝这个地址,然后重新发送DHCPDISCOVER包。假如觉得没有问题,就可以接受这个配置参数。同样当客户接收到DHCPNAK包时,它也可以发送DHCPDISCOVER包。客户可以在租期到期之前释放网络地址,这通过发送DHCPRELEASE包来实现。
用户下一次可以再次获得相同的IP地址。在这一过程中,许多步骤就可以不用麻烦了,老客户当然要方便一点了。
1.客户在发送的DHCPREQUEST包内包括自己以前使用的IP地址。
2.此包由BOOTP转发代理转发。
3.DHCP服务器检查DHCPREQUEST包内包括的配置参数。
4.它假如是原来提供这个网络地址的参数的服务器,它会认出这些数来,并以DHCPACK包回应。
5.客户接收到DHCPACK包后,它可以接收或拒绝,假如拒绝它可以申请新的网络地址。
当然了,假如服务器觉得客户的请求是无效的,服务器会以DHCPNAK包响应,客户接收到这个包后,会重新会获得网络地址而发送DHCPDISCOVER包。