DHCP获取IP地址的过程

2018年8月4日15:55:10 发表评论 895 views

DHCP获取IP地址的过程

DHCP是应用层协议,UDP是传输层协议,IP是网络层协议,以太网是链路层协议。数据在网络上传输的时候要自顶向下逐层封装的,典型的DHCP过程是这样的:

1:客户机向服务器发送DHCP_DISCOVER报文,申请IP。

2:服务器向客户机返会DHCP_OFFER报文,指定一个将要分配的IP。

3:客户机向服务器发送DHCP_REQUEST报文,请求这个IP。

4:服务器PING几次(一般是3次)这个IP,如果没得到响应的话,就说明这个IP现在空闲,可以分配给客户机,所以向客户机发送DHCP_ACK报文,确认可以分配。如果得到相应,则发送DHCP_NAK报文,拒绝分配。

5:如果客户端收到DHCP_ACK,责发送一次免费ARP,判断这个IP是否已经被用。没有被用的话则绑定这个服务器分配来的IP,否则向服务器发送DHCP_DECLINE报文,拒绝这次分配。并重新执行第一步。
如果收到的是DHCP_NAK,则直接重新执行第一步。

客户机申请IP之前确实没有IP,DHCP_DISCOVER报文都是以广播形式发送的,IP头里的目的地址是255.255.255.255,源地址是0.0.0.0。链路层目的地址是FF-FF-FF-FF-FF-FF,源地址是自己的mac地址。这样服务器收到客户端发来的DISCOVER报文之后,会根据源mac地址向客户机发送单播的DHCP_OFFER报文。

在看一下需要抓取的DHCP报文:

客户发出的IP租用请求报文
  DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。 


DHCP回应的IP租用提供报文
  任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。 

客户选择IP租用报文
  客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER包,并向网络中广播一个 DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。 

DHCP服务器发出IP租用确认报文
  被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。
客户配置成功后发出的公告报文
  客户机在收到DHCPACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。
至此一个客户获取IP的DHCP服务过程基本结束,不过客户获取的IP一般是用租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。

客户IP租用更新报文
(1)在当前租期已过去50%时,DHCP客户机直接向为其提供IP地址的DHCP服务器发送DHCPREQUEST消息包。如果客户机接收到该服务器回应的DHCPACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户机继续使用现有的 
IP地址,因为当前租期还有50%。 
(2)如果在租期过去50%时未能成功更新,则客户机将在当前租期过去87.5%时再次向为其提供IP地址的DHCP联系。如果联系不成功,则重新开始IP租用过程。 
(3)如果DHCP客户机重新启动时,它将尝试更新上次关机时拥有的IP租用。如果更新未能成功,客户机将尝试联系现有IP租用中列出的缺省网关。如果联系成功且租用尚未到期,客户机则认为自己仍然位于与它获得现有IP租用时相同的子网上(没有被移走)继续使用现有IP地址。 如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。

  DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。四次之后,如果仍未能收到服务器的回应,则运行Windows 2000的DHCP客户机将从169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。

 

APIPA

APIPA是一个DHCP故障转移机制。当DHCP服务器出故障时, APIPA在169.254.0.1到 169.254.255.254的私有空间内分配地址,所有设备使用默认的网络掩码255.255.0.0。客户机调整它们的地址使用它们在使用ARP的局域网中是唯一的。APIPA可以为没有DHCP服务器的单网段网络提供自动配置TCP/IP协议的功能。

运行情况

 

默认情况下,运行Windows 98/Me/2000/XP的计算机首先尝试与网络中的DHCP服务器进行联系,以便从DHCP服务器上获得自己的IP地址等信息,并对TCP/IP协议进行配置。如果无法建立与DHCP服务器的连接,客户端与本地 DHCP服务器通讯失败,无法更新它的租约,则计算机改为使用APIPA自动寻址方式,并自动配置TCP/IP协议。它将使用 APIPA分配的地址,以后每隔5分钟尝试与外界的DHCP服务器联系一次,直到它可以与 DHCP 服务器通讯为止。当这个DHCP服务器再次能为请求服务时,客户机将自动更新他们的地址。apipa存在于所有流行的各种版本的windows系统中。

自动专用IP

(Automatic Private IP Address,APIPA)是IANA(Internet AssingedNumbers Authority)保留的一个地址块,它的地址范围是 B 类地址块169.254.0.0~169.254.255.255 。当 由于网络故障而找不到DHCP 服务器 时,使用APIPA。
功能介绍
对于Windows操作系统,如果DHCP服务器不可用,则DHCP客户机在启动时自动配置IP地址和子网掩码。称之为“IP自动配置”的功能对于小型专用网络(如小型商用办公室或家用网络环境)上的客户机可能非常有用。
如果客户机被配置为使用DHCP服务器(而非使用IP地址和其他参数手动配置),则DHCP客户服务在计算机每次启动时应答。对于Windows2000,DHCP客户服务通过两个步骤的过程用IP地址和其他配置信息配置客户机:
DHCP客户机尝试定位DHCP服务器并从中获得配置。
如果找不到DHCP服务器,则DHCP客户机使用从Microsoft保留的B类网络(地址类型为169.254.0.0,子网掩码为255.255.0.0)中选择的地址自动配置其IP地址和子网掩码。
DHCP客户机通过使用免费ARP测试地址冲突,以确保它选择的IP地址未在网络上使用。如果发现冲突,则客户机会选择试用另一IP地址。对于每个地址冲突,客户机将重试最多10个地址的自动配置。
DHCP客户机在未使用的169.254.0.0网络范围中成功选择了地址后,将配置与该地址的接口。
客户机继续在后台每隔5分钟检查一次DHCP服务器。如果随后发现DHCP服务器,则客户机放弃它的自动配置信息。DHCP客户机然后使用由DHCP服务器提供的地址(以及它提供的任何其他DHCP选项信息)来更新其IP配置设置。
如果DHCP客户机以前从DHCP服务器获得租约,则事件按照下列修改的顺序出现:
如果客户机租约在启动时仍有效(未过期),客户机将尝试通过DHCP服务器续订其租约。
如果在续订尝试期间,客户机不能找到任何DHCP服务器,则它会尝试用Ping命令检测在租约中列出的默认网关。DHCP客户机根据Ping失败还是成功进行如下工作:
如果默认网关的Ping操作成功,则DHCP客户机假定它仍然位于获得当前租约的相同网络上,并继续使用租约。
在默认情况下,当50%的指派租约时间期满时,客户机随后在后台尝试续订其租约。
如果默认网关的Ping请求失败,则客户机认为它已移动到不能使用DHCP服务的网络,如家庭网络。 
客户机然后如前面所述自动配置其IP地址。自动配置客户机之后,它会继续在后台每隔5分钟定位DHCP服务器并获得租约。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: