动态主机配置协议DHCP
当某组织获得一块地址后,就可以为本组织内的主机或者路由器分配IP地址。这个分配工作可以由系统管理员手动通过网络管理工具来完成。也可以由动态主机配置协议(Dynamic Host Congfiguration,DHCP)来完成。现在,主机通常是使用DHCP自动获取IP地址。
当然,网络管理员也可以配置DHCP,使得一台主机一直使用相同的IP地址,或者某主机被分配一个临时的IP地址(即每次都可以是不同的IP地址)。
除了为主机分配IP地址外,DHCP还允许主机得知关于它的其他信息。如子网掩码、默认网关、本地DNS服务器的地址。
因为DHCP使主机自动获取IP地址等网络配置信息并使主机接入网络,所以DHCP也被称为即插即用协议(plug-and-play protocol)。这个协议大大的方便了网络管理人员,还被广泛地应用于有主机频繁加入和离开网络的住宅英特网接入网与无线局域网中。
当有主机加入或离开时,DHCP服务器就要更新其可用的IP地址。
当有一台主机加入时,DHCP服务器从其当前可用的地址池中分配一个任意地址给它;当一台主机离开时,其地址便被收回到这个池中。
DHCP运行过程
DHCP是一个客户--服务器协议。客户为主机。
在一个网络中新加入的主机会向DHCP服务器申请地址和得到相关网络配置信息。最简单情况是每个子网都配备一台DHCP服务器,如果某子网中没有服务器,那么就需要一个DHCP中继代理(通常为一台路由器),这个代理知道DHCP服务器的地址。
下图展示了DHCP客户--服务器的一个场景。图中有一台DHCP服务器和一台提供中继代理服务的路由器。
???
DHCP是一个4步骤的过程。
DHCP四步骤
DHCP服务器发现
一台新加入网络的主机首要任务便是找到与其能够交互的DHCP服务器。主机使用UDP分组向端口67发送DHCP发现报文(DHCP discover message)来完成该任务。
由于主机新加入该网络,并不知道该网络的IP地址也不知道DHCP服务器的地址。于是该主机在发送包含DHCP发现报文的IP数据报时,使用目的地址为255.255.255.255的广播地址和使用代表“本主机”的0.0.0.0作为源地址。
DHCP客户将该数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的子网。
DHCP服务器提供
DHCP服务器收到一个DHCP发现报文时,将使用DHCP提供报文(DHCP offer message)向客户做出响应。,这里仍然会使用广播地址255.255.255.255作为目的地址(现在客户主机并没有地址)。
一个子网中可能会存在好几台DHCP服务器,于是客户可能会在几个提供者之间进行优越选择。
每台服务器的提供报文会包含:发现报文的事务ID、向客户推荐的IP地址、网络掩码、以及IP地址租用期(address lease time),也是就IP地址的有效时间量。租用期通常为几小时或者几天。记为T,这个时间也表示在不更新租约的情况下地址可被租用的时间上限。
也包含更新时间(T1):客户从获得租约到尝试要求服务器更新租约的时间。
以及重绑定时间(T2):客户尝试要求DHCP服务器更新其地址的时间。默认情况下,T1 = T/2;T2 = 7T/8
DHCP请求
DHCP服务提供报文到达客户后,客户便知道了DHCP服务器的信息。这时,客户从一个或者多个提供者中选择一个,并向选择的服务器发送DHCP请求报文(DHCP request message),进行响应,回显配置参数。
此时的数据报目的地址IP地址仍为广播地址,除了被客户选中的服务器外,其余服务器若收到该报文发现报文选项中的服务器IP地址与自己的不同便不做任何响应,并清除相应地IP分配记录。
DHCP ACK
服务器使用DHCP ACK报文(DHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。如果服务器无法分配包含在DHCPREQUEST消息中的地址,该服务器将会响应一个DHCPNAK消息。
一旦客户收到DHCP ACK报文后,交互便完成了,客户可以在租用期内使用这个IP地址。
更新租约或获得其他消息
若一个主机已有一个IP地址并希望更新其租约,那么它便可跳过最初的DHCPDISCOVER/DHCPOFFER消息,直接通过DHCPREQUSEST消息请求当前当前正在使用的地址。然后协议运作流程如前所述,服务器可能同意也可能拒绝该要求。
客户需要配置其他信息,可使用DHCPINFORM消息代替DHCPREQUEST消息向服务器发出请求,表明想获取其他配置信息。此消息导致服务器会返回一个DHCPACK消息,其中包含请求的额外信息。
以图示例
下面以《计算机网络自顶向下方法》中的图,介绍DHCP协议运行过程(DHCP客户与服务器交互过程)。
yiaddr(意为“你的因特网地址”)指示被分配给新到达客户的地址
???????
新到达的客户向DHCP服务器发送发现报文。源地址为0.0.0.0,目的地址为广播地址255.255.255.255,源端口号为68,目的端口为67。事务ID为654。
服务器收到该发现报文后响应提供报文,提供报文包含了上文介绍的发现报文的事务ID、向客户推荐的IP地址、IP地址租用期等信息。
客户选择了提供报文然后做出响应发送请求报文。注意这里发送的IP数据报目的地址仍为广播地址,源地址仍为0.0.0.0。报文包含了客户需要的配置参数,现在的事务ID为原事务ID增加1。
服务器发送DHCP ACK报文进行响应,并证实客户要求的参数。
附图一张客户机的DHCP状态机
???
DHCP协议在客户机和服务器中都会运行一个状态机。状态用于指出协议下一个处理的消息类型。上图中,状态之间的转换源于消息的接收和发送或者超时。
需要注意上图中,从选择到INIT的箭头。这个箭头表示客户机可能接收来自不需要的地址的ACK。如果它没有发现所需要的地址,便会发送一个DHCPDECLINE消息,并转换到INIT状态。
本篇学习笔记主要介绍的是DHCP协议的主要作用以及整个运作流程,许多细节并未涉及。并且,本篇中的DHCP是针对于IPv4,IPv6使用的DHCP版本DHCPv6可能会在后面介绍。