DHCP 全称 Dynamic Host Configuration Protocol(动态主机分配协议)。Dhcp的前身是bootp,BOOTP 最初是用于无磁盘主机连接的网络上面的,BOOTP 可以自动地为那些主机设定 TCP/IP 环境,但 BOOTP的缺点是:在设定tcp/ip前需要先获得客户端的硬件地址,并且,与 IP 的对应是静态的。而DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是server端,而另一个是client端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。


      Dhcp  有三种ip地址定位方式

            1、Automatic Allocation:dhcp服务器给一个客户端分配一个永久使用的ip地址


            2、Dynamic Allocation:动态分配,当 DHCP 从 DHCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址。


            3、Manual Allocation:管理员手动给少数的主机配置固定的ip地址,永远不会过期。


           
 

 


 
 
 
      1、寻找 dhcp服务器: 假设主机A刚刚加入 bcd所在的局域网,主机要跟外面的设备通讯必须要有ip地址,而初始的时候主机网卡的tcp/ip设置是空的。这个时候主机A会源ip为0.0.0.0 目的ip 为255.255.255.255 来发送广播包,这个包叫DHCP DISCOVER 包如图箭头1所示,这个包同时携带了主机A的mac地址信息。DHCP discover 的等待时间预设为 1 秒,也就是当第一个 DHCP discover包发出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。

      2、服务器提供 IP 租用地址:当 DHCP server监听到主机A发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设置(如 网关,掩码,dns等设置),响应给客户端一个 DHCP OFFER包如图 箭头2,包内还包含了地址的租期。并通过dhcp discover 包中的mac地址信息来发送给主机A。

      3、主机A 接受 IP 租约: 如果主机A收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer (通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包 如图 箭头3,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址。同时 主机A还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,主机A则会送出一个 DHCPDECLIENT 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。

      4、租约确认:当 DHCP 服务器接收到主机A的 DHCP request 之后,会向客户端发出一个 DHCPACK 响应。 如图:箭头4 以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。一旦 DHCP 主机A成功地从服务器那里取得 DHCP 租约之后,除非其租约已经失效并且 IP 地址也重新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接使用已经租用到的 IP 地址向之前之 DHCP 服务器发出 DHCP request 信息,DHCP 服务器会尽量让客户端使用原来的 IP 地址,如果没问题的话,直接响应 DHCPack 来确认则可。如果该地址已经失效或已经被其它机器使用了,服务器则会响应一个 DHCPNACK 封包给客户端,要求其从新执行 DHCP discover。

      此时 ,dhcp分配地址完毕,主机A可以正常的与其他设备通信了。