深度分析DHCP工作原理

一、DHCP产生的背景

随着网络规模的不断扩大和网络复杂度的提高,越来越多的设备连接到网络中,每台设备都需要分配唯一的IP地址,手工配置需要很大的工作量,而且难以对整个网络进行集中管理;而且有时经常出现计算机的数量超过可供分配的IP地址的情况;同时随着便携机及无线网络的广泛使用,计算机的位置也经常变化,相应的IP地址和一些网络参数也必须经常更新,从而导致网络配置越来越复杂。DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)就是为解决这些问题而发展起来的。
Dhcp的前身是BOOTP协议(BOOTSTRAP PROTOCOL),它是一种较早出现的远程启动的协议,通过与远程服务器通信以获取通信所需的必要信息,主要用于无磁盘的客户机从服务器得到自己的IP地址、服务器的IP地址、启动映象文件名、网关IP等等。BOOTP协议使用TCP/IP网络协议UDP的67/68通讯端口。但 BOOTP服务存在的缺陷:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的。而且若IP地址不可用(例如IP地址冲突),不能自动重新申请一个新的IP地址,而需要管理员来处理。而且随着无线联网和移动便携技术的发展,BOOTP已经变得不再合适了。总而言之,BOOTP 非常缺乏 "动态性" ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。
为处理自动地址分配,IETF设计了一个新协议,即动态主机配置协议DHCP(Dynamic HostConfiguration Protocol)。使用的是UDP的67、68端口传输,它的工作模式最基本的是基于Client/Server,DHCP CLIENT将采用知名端口号68 DHCP SERVER采用知名端口号67进行交互。此协议从两种方式上扩充了BOOTP。首先,DHCP可使计算机通过一个报文获取所需的全部配置信息。例如:DHCP报文除能获取IP地址外,还能获取子网掩码。第二,DHCP允许计算机快速、动态的获取IP地址。为使用DHCP的动态地址分配机制,管理员必须配置DHCP服务器,使其能提供一组IP地址,称之为地址池。任何时候一旦有新的计算机连接到网络上,该计算机就与服务器联系,并申请一个IP地址。服务器从配置的地址池中选择一个地址,并将它分配给该计算机。为做到通用,DHCP允许分配三种类型的地址,管理员可以选择DHCP如何响应每个网络或每台主机。首先,DHCP允许手工配置,管理人员可以为特定的某台计算机配置特定的地址;其次,DHCP也允许自动配置,管理人员允许DHCP服务器为第一次上网的机器分配一个永久地址;同时,DHCP允许完全动态分配,服务器可以使计算机在一段有限时间内“租用”一个地址。当ip地址到期后或主机明确表示放弃这个地址时,服务器就会回收该Ip地址,就可以然后把该Ip地址分配给其他的客户端,这样就可以提高ip地址的利用率。

二、DHCP工作原理

主要有四个报文交互过程,基本的交互完后,还有两个比较重要的交互过程:
第一个阶段为发现阶段:
当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 地址设定,它会向网络发出一个 DHCP DISCOVER 报文。因为客户端还不知道自己属于哪一个网络,所以报文的源Ip为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。一般情况下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播,如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,客服端会继续在 5 分钟之后再重复一次 DHCP discover 的过程。
第二个阶段为提供阶段:
该网络中的dhcp服务器受到discover报文后,都会做出响应:服务器首先会查找绑定的租约信息,主要分成两种情况考虑:
1)该客户对应的租约已存在且未被再次分配(包括租约到期和未到期的租约),则直接分配已记录的地址信息
2)该客户对应的租约不存在,则从对应的地址池中查找,该处地址池应该有个前提条件,就是可用的地址池,应当和接收口的IP为同一网段,或同giaddr字段同一网段,否则也无法分配,从尚未出租的IP地址中挑选一个最前面的Ip地址连同其它的参数设定,响应给客户端一个 DHCP OFFER 报文。由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,offer报文就根据mac地址来单播发送给客服端的。
3)RFC上有一种情况,就是discover中带有request address的情况,若带有该字段,则直接分配该地址,前提是该地址未被占用.占用的话应该会重新查找一个新的可用地址.
怎么确定这个ip地址在网络中没有被别人占用呢,我司采取的做法是服务器ping所要提供的ip地址,默认是ping2个报文,若是没有回复DHCP服务器就向主机发送DHCPOFFER单播数据包,包含IP地址、MAC地址、域名信息以及地址租期;但是DHCP服务器DHCPOFFER中指定的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
第三个阶段为选择阶段:
DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,但只会挑选其中一个 DHCP offer,通常只接受收到的第一个DHCPOFFER数据包。并且会向网络发送一个DHCP request广播报文,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。 这样其他的服务器就会释放之前预分配给客户端的IP地址。同时,客户端还会向网络发送一个 ARP 报文,查询网络上面有没有其它设备使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLIENT 报文给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。
第四个阶段为确认阶段:
即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP REQUEST请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK确认信息,以确认 IP 租约的正式生效。然后DHCP服务器便将该IP地址与客户端的mac地址绑定在租约绑定表中。
这个时候若是收到ACK报文,则获得使用配置参数的租期,这个时候开始启用2个定时器T1与T2来负责配置信息的更新,T1触发事件为租期的50%,T2触发事件为租期的87.5%.在租约期限一半的时候也会发出 DHCP request ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它DHCP服务器通信。如果网络上再没有任何DHCP服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开始,再一次重复整个过程。要是客服端想退租,可以随时送出 DHCPRELEASE 报文释放该地址。
重新登入:以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP DISCOVER发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP REQUEST请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ACK确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP NAK否认信息。
当原来的DHCP客户机收到此DHCP NAK否认信息后,它就必须重新发送DHCP DISCOVER发现信息来请求新的IP地址。
更新租约:DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
注:Dhcp报文类型分析:
dhcpdiscover: 此为client开始DHCP过程中的第一个请求报文
dhcpoffer : 此为server 对dhcpdiscover 报文的响应
dhcprequst : 此为client 对dihcpoffer 报文的响应
dhcpdeclient: 当client发现server 分配给它的IP地址无法使用,如 IP地址发生冲突时,将发出此报文让server禁止使用这次分配的IP地址。
dhcpack : server对 dhcprequst 报文的响应,client收到此报文后才真正获得了IP地址和相关配置信息。
dhcpnak : 此报文是server对client的dhcprequst报文的拒绝响应,client 收到此报文后,一般会重新开始DHCP过程。
dhcprelease :此报文是 client主动释放IP地址,当server 收到此报文后就可以收回IP地址分配给其他的client.
本文介绍了动态地址分配协议DHCP的产生背景和工作原理。希望对大家学习DHCP有所帮助,接下来的几篇文章中我将会对这个协议进行更深入的分析。
敬请关注!

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

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

目前评论:1   其中:访客  1   博主  0

    • avatar 常平婚纱摄影 1

      来学习学习了,,,,