分享
 
 
 

TCP/IP基础:DHCP协议

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

经过了前面的学习,相信您不再认为设定与管理 TCP/IP 网路是件轻松的事情。要成功的将您的网路用 TCP/IP 连接起来,您就得为每台电脑设定 IP、mask、gateway、等等繁琐的事情。要是您想管理好一个比较大的网路╋或是电脑节点经常改变(如手提电脑或拨接)╋这样的工作可以说是非常令人讨厌的╋而且出错的机会也比较多。要是,万一日后要进行 IP 重新规划╋其工作量也是相当惊人的。

面对这些情形╋DHCP 可以说您的菩萨了?它不但救苦救难╋而且神通广大。

什么是 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 封包中,此栏填写开机程式码所在 se

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有