电脑技术学习

DHCP协议

dn001

  什么是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;的工作形式会有所不同。;;;;;;;
第一次登录的时候﹕;;
1.;寻找;Server。当;DHCP;客户端第一次登录网路的时候﹐也就是客户发现本机上没有任何;IP;资料设定﹐它会向网路发出一个;DHCPDISCOVER;封包。因为客户端还不知道自己属于哪一个网路﹐所以封包的来源位址会为;0.0.0.0;﹐而目的位址则为;255.255.255.255;﹐然后再附上;Dhcpdiscover;的信息﹐向网路进行广播。;
在;Windows;的预设情形下,Dhcpdiscover;的等待时间预设为;1;秒﹐也就是当客户端将第一个;Dhcpdiscover;封包送出去之后﹐在;1;秒之内没有得到回应的话﹐就会进行第二次Dhcpdiscover;广播。若一直得不到回应的情况下﹐客户端一共会有四次;Dhcpdiscover;广播(包括第一次在内)﹐除了第一次会等待;1;秒之外﹐其余三次的等待时间分别是;9﹑13﹑16秒。假如都没有得到;DHCP伺服器的回应﹐客户端则会显示错误信息﹐宣告;Dhcpdiscover;的失败。之后﹐基于使用者的选择﹐系统会继续在;5;分钟之后再重复一次;Dhcpdiscover;的过程。;
2.;提供;IP;租用位址。当;DHCP;伺服器监听到客户端发出的;Dhcpdiscover;广播后﹐它会从那些还没有租出的位址范围内﹐选择最前面的的空置;IP;,连同其它;TCP/IP;设定,回应给客户端一个;DHCPOFFER;封包。
由于客户端在开始的时候还没有;IP位址﹐所以在其;Dhcpdiscover;封包内会带有其MAC;位址信息﹐并且有一个;XID;编号来辨别该封包﹐DHCP;伺服器回应的;Dhcpoffer;封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定﹐Dhcpoffer;封包会包含一个租约期限的信息。;
3.;接受;IP;租约。假如客户端收到网路上多台;DHCP伺服器的回应﹐只会挑选其中一个Dhcpoffer;而已(通常是最先抵达的那个)﹐并且会向网路发送一个Dhcprequest广播封包﹐告诉所有;DHCP;伺服器它将指定接受哪一台伺服器提供的;IP;位址。
同时﹐客户端还会向网路发送一个;ARP;封包﹐查询网路上面有没有其它机器使用该;IP位址﹔假如发现该;IP;已经被占用﹐客户端则会送出一个;DHCPDECLINE;封包给;DHCP;伺服器﹐拒绝接受其;Dhcpoffer﹐并重新发送;Dhcpdiscover;信息。;
事实上﹐并不是所有;DHCP;客户端都会无条件接受;DHCP;伺服器的;offer;﹐尤其这些主机安装有其它;TCP/IP;相关的客户软体。客户端也可以用;Dhcprequest;向伺服器提出;DHCP选择﹐而这些选择会以不同的号码填写在DHCP;Option;Field;里面﹕



换一句话说﹐在;DHCP伺服器上面的设定﹐未必是客户端全都接受﹐客户端可以保留自己的一些;TCP/IP;设定。而主动权永远在客户端这边。
4.租约确认。当;DHCP伺服器接收到客户端的;Dhcprequest;之后﹐会向客户端发出一个DHCPACK;回应﹐以确认;IP租约的正式生效﹐也就结束了一个完整的;DHCP;工作过程。
如上的工作流程如下图:; ;;


DHCP;发放流程;
第一次登录之后﹕;
一旦;DHCP;客户端成功地从伺服器哪里取得;DHCP;租约之后﹐除非其租约已经失效并且IP;位址也重新设定回;0.0.0.0;﹐否则就无需再发送;Dhcpdiscover;信息了﹐而会直接使用已经租用到的;IP;位址向之前之;DHCP;伺服器发出;Dhcprequest;信息﹐DHCP;伺服器会尽量让客户端使用原来的;IP;位址﹐假如没问题的话﹐直接回应;Dhcpack;来确认则可。假如该位址已经失效或已经被其它机器使用了﹐伺服器则会回应一个;DHCPNACK;封包给客户端﹐要求其从新执行;Dhcpdiscover。;
至于;IP;的租约期限却是非常考究的﹐并非如我们租房子那样简单﹐;以;NT;为例子﹕DHCP;工作站除了在开机的时候发出;dhcprequest;请求之外﹐在租约期限一半的时候也会发出;dhcprequest;﹐假如此时得不到;DHCP;伺服器的确认的话﹐工作站还可以继续使用该;IP;﹔然后在剩下的租约期限的再一半的时候(即租约的75%)﹐还得不到确认的话﹐那么工作站就不能拥有这个;IP;了。至于为什么不是到租约期限完全结束才放弃;IP;呢﹖﹐对不起﹐小弟也是不学无术之人﹐没有去深究了﹐只知道要回答;MCSE;题目的时候﹐您一定要记得;NT;是这么工作的就是了。
要是您想退租,可以随时送出;DHCPLEREASE;命令解约﹐就算您的租约在前一秒钟才获得的。;
跨网路的;DHCP;运作;
从前面描述的过程中,我们不难发现:DHCDISCOVER;是以广播方式进行的,其情形只能在同一网路之内进行﹐因为;router;是不会将广播传送出去的。但假如;DHCP;伺服器安设在其它的网路上面呢﹖由于;DHCP客户端还没有;IP;环境设定﹐所以也不知道;Router;位址﹐而且有些;Router;也不会将;DHCP广播封包传递出去﹐因此这情形下;DHCPDISCOVER;是永远没办法抵达;DHCP;伺服器那端的,当然也不会发生;OFFER;及其他动作了。要解决这个问题,我们可以用;DHCP;Agent;(或;DHCP;Proxy;)主机来接管客户的;DHCP请求﹐然后将此请求传递给真正的DHCP;伺服器﹐然后将伺服器的回复传给客户。这里﹐Proxy;主机必须自己具有路由能力,且能将双方的封包互传对方。
若不使用;Proxy,您也可以在每一个网路之中安装;DHCP;伺服器﹐但这样的话﹐一来设备成本会增加﹐而且﹐治理上面也比较分散。当然啰﹐假如在一个十分大型的网路中﹐这样的均衡式架构还是可取的。端视您的实际情况而定了。
DHCP;封包格式


以下为各栏位的简要说明:;
OP;
若是;client;送给;server;的封包,设为;1;,反向为;2;。
HTYPE;
硬体类别,Ethernet;为;1;。
HLEN;
硬体位址长度,;Ethernet;为;6;。
HOPS
若封包需经过;router;传送,每站加;1;,若在同一网内,为;0;。
TRANSACTION;ID;
DHCPREQUEST;时产生的数值,以作;DHCPREPLY;时的依据。
SECONDS;
Client;端启动时间(秒)。
FLAGS
从;0;到;15;共;16;bits;,最左一;bit;为;1;时表示;server;将以广播方式传送封包给client;,其余尚未使用。
ciaddr;
要是;client;端想继续使用之前取得之;IP;位址,则列于这里。
yiaddr;
从;server;送回;client;之;DHCPOFFER;与;DHCPACK;封包中,此栏填写分配给;client;的IP;位址。
siaddr;
若;client;需要透过网路开机,从;server;送出之;DHCPOFFER、DHCPACK、DHCPNACK;封包中,此栏填写开机程式码所在;server;之位址。;
giaddr;
若需跨网域进行;DHCP;发放,此栏为relay;agent;的位址,否则为;0;。
chaddr;
Client;之硬体位址。
sname;
Server;之名称字串,以;0x00;结尾。
file;
若;client;需要透过网路开机,此栏将指出开机程式名称,稍后以;TFTP;传送。
options;;;;;;
答应厂商定议选项(Vendor-Specific;Area),以提供更多的设定资讯(如:Netmask、Gateway、DNS、等等)。其长度可变,同时可携带多个选项,每一选项之第一个;byte;为资讯代码,其后一个;byte;为该项资料长度,最后为项目内容。


DHCP;的选项非常多,有空请查阅;RFC;或相关文献,并好好理解,这里不再叙述了。
DHCP;协定之;RFC;文件;
RFC-951﹑RFC-1084﹑RFC-1123﹑RFC-1533﹑RFC-1534﹑RFC-1497﹑RFC-1541