什么是 DHCP?

DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP 。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘起动并连接上网络,BOOTP 则可以自动地为那些主机设定 TCP/IP 环境 。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的 。换而言之,BOOTP 非常缺乏 "动态性",若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费 。
DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端 。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据 。比较起 BOOTP,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求 。
DHCP 的分配形式
首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端搓商 TCP/IP 的设定环境 。它提供两种 IP 定位方式:
Automatic Allocation
自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址 。
Dynamic Allocation
动态分配,当 DHCP 第一次从 HDCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用 。当然,客户端可以比其它主机更优先的更新(renew)租约,或是租用其它的 IP 地址 。
动态分配显然比自动分配更加灵活,尤其是当您的实际 IP 地址不足的时候,例如:您是一家 ISP,只能提供 200 个IP地址用来给拨接客户,但并不意味着您的客户最多只能有 200 个 。因为要知道,您的客户们不可能全部同一时间上网的,除了他们各自的行为习惯的不同,也有可能是电话线路的限制 。这样,您就可以将这 200 个地址,轮流的租用给拨接上来的客户使用了 。这也是为什么当您查看 IP 地址的时候,会因每次拨接而不同的原因了(除非您申请的是一个固定 IP,通常的 ISP 都可以满足这样的要求,这或许要另外收费) 。当然,ISP 不一定使用 DHCP 来分配地址,但这个概念和使用 IP Pool 的原理是一样的 。
DHCP 除了能动态的设定 IP 地址之外,还可以将一些 IP 保留下来给一些特殊用途的机器使用,它可以按照硬件地址来固定的分配 IP 地址,这样可以给您更大的设计空间 。同时,DHCP 还可以帮客户端指定 router、netmask、DNS Server、WINS Server、等等项目,您在客户端上面,除了将 DHCP 选项打勾之外,几乎无需做任何的 IP 环境设定 。
DHCP 的工作原理
根据客户端是否第一次登录网络,DHCP 的工作形式会有所不同 。
第一次登录的时候:
寻找 Server 。当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包 。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0,而目的地址则为 255.255.255.255,然后再附上 DHCP discover 的信息,向网络进行广播 。
在 Windows 的预设情形下,DHCP discover 的等待时间预设为 1 秒,也就是当客户端将第一个 DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次 DHCP discover 广播 。若一直得不到响应的情况下,客户端一共会有四次 DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是 9、13、16 秒 。如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败 。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程 。

推荐阅读