主机配置:DHCP
DHCP(动态主机配置协议),是在一台主机启动后,第一个运行的客户/服务器应用程序。换言之,当一台主机启动后,如果它认为自己当前应当连接到因特网上,但又不知道自己的IP地址时,DHCP就以引导程序的身份发挥作用。
每个连接到TCP/IP互联网的计算机都必须知道自己的IP地址、一个路由器的IP地址、一个名字服务器的IP地址以及自己的子网掩码这四种信息。
DHCP分组格式:
一、曾经使用过的协议
在DHCP成为正式的主机配置协议之前,还有过一些其他的协议。
1.RARP:
在因特网时代的初期,人们曾设计了一个称为逆地址解析协议(Reverse Address Resolution Protocol,RARP)来向被引导的主机提供IP地址。实际上,RARP是ARP的一个版本。ARP将一个IP地址映射为一个物理地址,而RARP则将一个物理地址映射成为一个IP地址。但是RARP已经被淘汰了,原因有两个:首先,RARP利用了数据链路层的广播服务,这也就表示每个网络上都必须存在一台RARP服务器。第二,RARP只能提供计算机的IP地址,但如今的计算机需要前面提到的所有四种信息。
2.BOOTP:
引导程序协议(BOOTstrap Protocol,BOOTP)是DHCP的先驱。它是一个客户/服务器协议,被设计用来克服RARP协议存在的缺陷。但是BOOTP是一个静态配置协议,当客户请求自己的IP地址时,BOOTP服务器就咨询一张表,将客户的物理地址映射成相应的IP地址。这就意味着客户的物理地址和IP地址之间的绑定是已经存在的。这个绑定关系是事先设定好的。
在某些场合,我们需要的是一个动态配置协议。例如,当一台主机从一个物理网络移动到另一个物理网络时,它的物理地址就改变了。再比如,有时候主机需要在某一段时间内使用一个临时的IP地址。BOOTP无法处理这种状况,因为物理地址和IP地址之间的绑定是静态的,是固定存放在一张表中的,除非管理员更改这张表。
而DHCP的设计就是为了解决这些不足之处。
3. DHCP:
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是一种客户/服务器协议,设计这个协议是为了将上述四种信息传递给无盘计算机或者第一次启动的计算机。DHCP是BOOTP的继承者,并且能够兼容BOOTP。
二、DHCP操作
DHCP客户和DHCP服务器可以在同一个网络上,也可以位于不同的网络。
1.DHCP客户和DHCP服务器在同一个网络
虽然这种情况不是很常见,不过管理员可以把客户和服务器放在同一个网络中。如图所示:
这种情况的操作如下:
(1)DHCP服务器在UDP端口67发出被动打开命令,等待客户请求。
(2)被引导的客户在UDP端口68发出主动打开命令。这个报文被封装成UDP用户报,其目的端口是67,源端口号是68。这个UDP用户数据报在封装成IP数据包。客户使用的是全0的源地址和全1的目的地址。
(3)服务器或者用广播报文,或者用单播报文来响应这个用户,它使用了UDP源端口号67和目的端口68.这个响应可以是单播的,因为服务器知道客户的IP地址,同时也知道客户的物理地址,也就是说它不需要使用ARP的服务进行从逻辑地址到物理地址的映射。但是某些系统不允许旁路掉ARP,结果就要使用广播地址。
2. DHCP客户和DHCP服务器在不同的网络
如图所示:
像其他应用层的进程一样,客户可以在某个网络上,而服务器可以在相隔好几个网络之外的另一网络上。这就带来了一个必须要解决的问题。DHCP请求是广播发送的,因为客户不知道服务器的IP地址。而广播的IP数据报不能通过任何路由器。路由器收到这样的分组就丢弃它。
要解决这个问题,就需要一个中介物。某台主机(或是一台能够配置为在应用层工作的路由器)可以用来充当中继。在这种情况下,该主机就称为中继代理。中继代理知道DHCP服务器的单播地址,并在端口67监听广播报文。当它收到这种类型的分组后,就把它封装成一个单播数据报,并且把此请求发送给DHCP服务器。携带了单播目的地址的分组可以被任何一个路由器转发,最终到达DHCP服务器。DHCP服务器知道这个报文来自中继代理,因为在请求报文中有一个字段定义了中继代理的IP地址。中继代理在收到回答后,再把它发送给DHCP客户。
三、配置
人们设计DHCP是为了提供静态和动态的地址分配。
1.静态地址分配
对于静态地址分配,DHCP有一个专门的数据库,可以静态地吧物理地址绑定到IP地址。
2.动态地址分配
DHCP还有第二个数据库,包括一个可用的IP地址池。第二个数据库使DHCP成为动态的。当DHCP客户请求临时的IP地址时,DHCP服务器就从可用(即为使用的)IP地址池中取出一个IP地址进行指派,这个IP地址的使用时间长短可协商。
当DHCP客户想DHCP服务器发送请求是,服务器首先检查它的静态数据库。若静态数据库中存在所请求物理地址的表项,则返回给这个客户的永久IP地址。反之,若静态数据库中没有这个表项,服务器就从可用IP地址池中选择一个IP地址,并把这个地址指派给客户,然后再把相应的表项加入到动态数据库中。
如果主机要从一个网络移动到另一个网络,或者与一个网络时连时断,那么DHCP的这种动态特性就有了用武之地。DHCP可以在有限时间内提供一个临时的IP地址。
从地址池指派的地址都是临时地址。DHCP服务器向客户授予某一段时间内对该地址池的租用权。当租用时效过期,客户或者停止使用这个IP地址,或者续租。服务器有权力选择同意或不同意续租。若服务器不同意,客户就停止使用这个地址。
3.转换状态
为了提供动态的地址分配,DHCP客户可以像状态机那样从一个状态转换到另一个状态,状态转换取决于收到的报文和发送的报文。在这种情况下,报文的类型是由包含在DHCP分组中的标记为53的选项来定义的。标记为53 的选项如图所示:
DHCP的不同状态:
(1)INIT状态
当DHCP客户首次启动时,它处于INIT状态(初始化状态)。客户使用端口67广播DHCPDISCOVER报文(一个带有DHCPDISCOVER选项的请求报文)。
(2)SELECTING状态
在发送DHCPDISCOVER报文后,客户就进入SELECTING(选择)状态。能够提供这种类型服务的服务器要用DHCPOFFER报文进行相应。在此类报文中,服务器提供了一个IP地址。它们还要提供租用时间长度,其默认值是1小时。在发送DHCPOFFER报文的服务器,把提供的IP地址锁定,使这个地址不会再提供给任何其他的客户。客户选择所提供的地址中的一个,并向所选择的服务器发送DHCPREQUEST报文。然后就进入REQUESTING状态。如果客户没有收到DHCPOFFER报文,它还要再尝试四次,每一次间隔2秒。如果对这些DHCPDISCOVER都没有收到回答,客户就睡眠5分钟后再试。
(3)REQUESTING状态
客户保持在这个REQUESTING(请求)状态,直至它收到来自服务器的DHCPACK报文为止,这个报文创建了客户物理地址和它的IP地址之间的绑定。客户收到DHCPACK报文后进入BOUND状态。
(4)BOUND状态
在这种状态下,客户可以使用该IP地址,直到租用时间到期。当到达租用时间的50%时,客户就再发送一个DHCPREQUEST报文以请求更新。于是,客户进入RENEWING。在BOUND(绑定)状态时,客户也可以取消租用,并进入到初始化状态。
(5)RENEWING状态
客户保持在RENEWING(更新)状态,直至下面两个事件之一发生。客户可以收到更新租用协定的DHCPACK报文。在这种情况下,客户把计时器复位,然后回到BOUND状态。或者,如果没有收到DHCPACK,同时到达租用时间的87.5%时,客户就进入REBINDING状态。
(6)REBINDING状态
客户保持在REBINDING(重新绑定)状态,直至下面三个事件之一发生。若客户收到一个DHCPNACK报文或者租用时间到期,则回到初始化状态,并尝试得到另一个IP地址。若客户收到DHCPACK报文,它就进入绑定状态,并把计时器复位。
DHCP不同状态的转换图: