快捷搜索:

什么是 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 的历程。

供给 IP 租用地址。当 DHCP 办事器监听到客户端发出的 DHCP discover 广播后,它会从那些还没有租出的地址范围内,选择最前面的空置 IP ,连同其它 TCP/IP 设定,相应给客户端一个 DHCP OFFER 封包。

因为客户端在开始的时刻还没有 IP 地址,以是在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 XID 编号来辨别该封包,DHCP 办事器相应的 DHCP offer 封包则会根据这些资料通报给要求租约的客户。根据办事器真个设定,DHCP offer 封包会包孕一个租约刻日的信息。

吸收 IP 租约。假如客户端收到收集上多台 DHCP 办事器的相应,只会遴选此中一个 DHCP offer 而已(平日是最先抵达的那个),并且会向收集发送一个DHCP request广播封包,奉告所有 DHCP 办事器它将指定吸收哪一台办事器供给的 IP 地址。

同时,客户端还会向收集发送一个 ARP 封包,查询收集上面有没有其它机械应用该 IP 地址;假如发明该 IP 已经被占用,客户端则会送出一个 DHCPDECLINE 封包给 DHCP 办事器,回绝吸收其 DHCP offer ,并从新发送 DHCP discover 信息。

事实上,并不是所有 DHCP 客户端都邑无前提吸收 DHCP 办事器的 offer ,尤其这些主机安装有其它 TCP/IP 相关的客户软件。客户端也可以用 DHCP request 向办事器提出 DHCP 选择,而这些选择会以不合的号码填写在 DHCP Option Field 里面:

换一句话说,在 DHCP 办事器上面的设定,未必是客户端全都吸收,客户端可以保留自己的一些 TCP/IP 设定。而主动权永世在客户端这边。

租约确认。当 DHCP 办事器接管到客户真个 DHCP request 之后,会向客户端发出一个 DHCPACK 相应,以确认 IP 租约的正式生效,也就停止了一个完备的 DHCP 事情历程。

DHCP 发放流程

第一次登录之后:

一旦 DHCP 客户端成功地从办事器哪里取得 DHCP 租约之后,除非其租约已经掉效并且 IP 地址也从新设定回 0.0.0.0 ,否则就无需再发送 DHCP discover 信息了,而会直接应用已经租用到的 IP 地址向之前之 DHCP 办事器发出 DHCP request 信息,DHCP 办事器会只管即便让客户端应用原本的 IP 地址,假如没问题的话,直接相应 DHCPack 来确认则可。假如该地址已经掉效或已经被其它机械应用了,办事器则会相应一个 DHCPNACK 封包给客户端,要求其重新履行 DHCP discover。

至于 IP 的租约刻日却是异常讲究的,并非如我们租屋子那样简单, 以 NT 为例子:DHCP 事情站除了在开机的时刻发出 DHCP request 哀求之外,在租约刻日一半的时刻也会发出 DHCP request ,假云云时得不到 DHCP 办事器切实着实认的话,事情站还可以继承应用该 IP ;然后在剩下的租约刻日的再一半的时刻(即租约的75%),还得不到确认的话,那么事情站就不能拥有这个 IP 了。至于为什么不是到租约刻日完全停止才放弃 IP 呢?,对不起,小弟也是不学无术之人,没有去追究了,只知道要回答 MCSE 题目的时刻,您必然要记得 NT 是这么事情的便是了。

如果您想退租,可以随时送出 DHCPLEREASE 敕令解约,就算您的租约在前一秒钟才得到的。

跨收集的 DHCP 运作

早年面描述的历程中,我们不难发明:DHCDISCOVER 因此广播要领进行的,其情形只能在同一收集之内进行,由于 router 是不会将广播传送出去的。但假如 DHCP 办事器安设在其它的收集上面呢?因为 DHCP 客户端还没有 IP 情况设定,以是也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包通报出去,是以这情形下 DHCP DISCOVER 是永世没法子抵达 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

DHCP REQUEST 时孕育发生的数值,以作 DHCPREPLY 时的依据。

SECONDS

Client 端启动光阴(秒)。

FLAGS

从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播要领传送封包给 client ,另外尚未应用。

ciaddr

如果 client 端想继承应用之前取得之 IP 地址,则列于这里。

yiaddr

从 server 送回 client 之 DHCP OFFER 与 DHCPACK 封包中,此栏填写分配给 client 的 IP 地址。

siaddr

若 client 必要透过收集开机,从 server 送出之 DHCP OFFER、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 为该项数据长度,着末为项目内容。

CODE LEN VALUE

此字段完全兼容 BOOTP ,同时扩充了更多选项。此中,DHCP 封包可使用编码为 0x53 之选项来设定封包种别:

项值 种别

1 DHCP DISCOVER

2 DHCP OFFER

3 DHCP REQUEST

4 DHCPDECLINE

5 DHCPACK

6 DHCPNACK

7 DHCPRELEASE

DHCP 的选项异常多,有空请查阅 RFC 或相关文献,并好好理解,这里不再论述了。

DHCP 协议之 RFC 文件

RFC-951、RFC-1084、RFC-1123、RFC-1533、RFC-1534、RFC-1497、RFC-1541

您可能还会对下面的文章感兴趣: