TCP/IP基础:DHCP协议

经过了前面的学习,相信您不再认为设定与管理 TCP/IP 网路是件轻松的事情。要成功的将您的网路用 TCP/IP 连接起来,您就得为每台电脑设定 IP、mask、gateway、等等繁琐的事情。
要是您想管理好一个比较大的网路�o或是电脑节点经常改变(如手提电脑或拨接)�o这样的工作可以说是非常令人讨厌的�o而且出错的机会也比较多。要是,万一日后要进行 IP 重新规划�o其工作量也是相当惊人的。
  面对这些情形�oDHCP 可以说您的菩萨了�s它不但救苦救难�o而且神通广大。
  什么是 DHCP?
  DHCP 是 Dynamic Host Configuration Protocol 之缩写�o它的前身是 BOOTP。BOOTP 原本是用于无磁碟主机连接的网路上面的�s网路主机使用 BOOT ROM 而不是磁碟起动并连接上网路�oBOOTP 则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬体位址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 "动态性" ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常可观的浪费。
  DHCP 可以说是 BOOTP 的增强版本�o它分为两个部份�s一个是伺服器端�o而另一个是客户端。所有的 IP 网路设定资料都由 DHCP 伺服器集中管理�o并负责处理客户端的 DHCP 要求�r而客户端则会使用从伺服器分配下来的IP环境资料。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考量,DHCP 也完全照顾了 BOOTP Client 的需求。
  DHCP 的分配形式
  首先�o必须至少有一台 DHCP 工作在网路上面�o它会监听网路的 DHCP 请求�o并与客户端搓商 TCP/IP 的设定环境。它提供两种 IP 定位方式�s
  Automatic Allocation
  自动分配�o其情形是�s一旦 DHCP 客户端第一次成功的从 DHCP 伺服器端租用到 IP 位址之后�o就永远使用这个位址。
  Dynamic Allocation
  动态分配�o当 DHCP 第一次从 HDCP 伺服器端租用到 IP 位址之后�o并非永久的使用该位址�o只要租约到期�o客户端就得释放(release)这个 IP 位址�o以给其它工作站使用。当然�o客户端可以比其它主机更优先的延续(renew)租约�o或是租用其它的 IP 位址。
  动态分配显然比自动分配更加灵活�o尤其是当您的实际 IP 位址不足的时候�o例如�s您是一家 ISP �o只能提供 200 个IP位址用来给拨接客户�o但并不意味着您的客户最多只能有 200 个。因为要知道�o您的客户们不可能全部同一时间上网的�o除了他们各自的行为习惯的不同�o也有可能是电话线路的限制。这样�o您就可以将这 200 个位址�o轮流的租用给拨接上来的客户使用了。这也是为什么当您查看 IP 位址的时候�o会因每次拨接而不同的原因了(除非您申请的是一个固定 IP �o通常的 ISP 都可以满足这样的要求�o这或许要另外收费)。当然�oISP 不一定使用 DHCP 来分配位址�o但这个概念和使用 IP Pool 的原理是一样的。
  DHCP 除了能动态的设定 IP 位址之外�o还可以将一些 IP 保留下来给一些特殊用途的机器使用�o它可以按照硬体位址来固定的分配 IP 位址�o这样可以给您更大的设计空间。同时�oDHCP 还可以帮客户端指定 router�pnetmask�pDNS Server�pWINS Server�p等等项目�o您在客户端上面�o除了将 DHCP 选项打勾之外�o几乎无需做任何的 IP 环境设定。
  DHCP 的工作原理
  视乎客户端是否第一次登录网路�oDHCP 的工作形式会有所不同。
  第一次登录的时候�s
  1. 寻找 Server。当 DHCP 客户端第一次登录网路的时候�o也就是客户发现本机上没有任何 IP 资料设定�o它会向网路发出一个 DHCPDISCOVER 封包。因为客户端还不知道自己属于哪一个网路�o所以封包的来源位址会为 0.0.0.0 �o而目的位址则为 255.255.255.255 �o然后再附上 Dhcpdiscover 的信息�o向网路进行广播。
  在 Windows 的预设情形下,Dhcpdiscover 的等待时间预设为 1 秒�o也就是当客户端将第一个 Dhcpdiscover 封包送出去之后�o在 1 秒之内没有得到回应的话�o就会进行第二次 Dhcpdiscover 广播。若一直得不到回应的情况下�o客户端一共会有四次 Dhcpdiscover 广播(包括第一次在内)�o除了第一次会等待 1 秒之外�o其余三次的等待时间分别是 9�p13�p16 秒。如果都没有得到 DHCP 伺服器的回应�o客户端则会显示错误信息�o宣告 Dhcpdiscover 的失败。之后�o基于使用者的选择�o系统会继续在 5 分钟之后再重复一次 Dhcpdiscover 的过程。
  2. 提供 IP 租用位址。当 DHCP 伺服器监听到客户端发出的 Dhcpdiscover 广播后�o它会从那些还没有租出的位址范围内�o选择最前面的的空置 IP ,连同其它 TCP/IP 设定,回应给客户端一个 DHCPOFFER 封包。
  由于客户端在开始的时候还没有 IP 位址�o所以在其 Dhcpdiscover 封包内会带有其 MAC 位址信息�o并且有一个 XID 编号来辨别该封包�oDHCP 伺服器回应的 Dhcpoffer 封包则会根据这些资料传递给要求租约的客户。根据伺服器端的设定�oDhcpoffer 封包会包含一个租约期限的信息。
  3. 接受 IP 租约。如果客户端收到网路上多台 DHCP 伺服器的回应�o只会挑选其中一个 Dhcpoffer 而已(通常是最先抵达的那个)�o并且会向网路发送一个Dhcprequest广播封包�o告诉所有 DHCP 伺服器它将指定接受哪一台伺服器提供的 IP 位址。
  同时�o客户端还会向网路发送一个 ARP 封包�o查询网路上面有没有其它机器使用该 IP 位址�r如果发现该 IP 已经被占用�o客户端则会送出一个 DHCPDECLINE 封包给 DHCP 伺服器�o拒绝接受其 Dhcpoffer �o并重新发送 Dhcpdiscover 信息。
  事实上�o并不是所有 DHCP 客户端都会无条件接受 DHCP 伺服器的 offer �o尤其这些主机安装有其它 TCP/IP 相关的客户软体。客户端也可以用 Dhcprequest 向伺服器提出 DHCP 选择�o而这些选择会以不同的号码填写在 DHCP Option Field 里面�s
   TCP/IP基础:DHCP协议(图一)
  换一句话说�o在 DHCP 伺服器上面的设定�o未必是客户端全都接受�o客户端可以保留自己的一些 TCP/IP 设定。而主动权永远在客户端这边。
  4.租约确认。当 DHCP 伺服器接收到客户端的 Dhcprequest 之后�o会向客户端发出一个 DHCPACK 回应�o以确认 IP 租约的正式生效�o也就结束了一个完整的 DHCP 工作过程。
  如上的工作流程如下图:
   TCP/IP基础:DHCP协议(图二)
  DHCP 发放流程
  第一次登录之后�s
  一旦 DHCP 客户端成功地从伺服器哪里取得 DHCP 租约之后�o除非其租约已经失效并且 IP 位址也重新设定回 0.0.0.0 �o否则就无需再发送 Dhcpdiscover 信息了�o而会直接使用已经租用到的 IP 位址向之前之 DHCP 伺服器发出 Dhcprequest 信息�oDHCP 伺服器会尽量让客户端使用原来的 IP 位址�o如果没问题的话�o直接回应 Dhcpack 来确认则可。如果该位址已经失效或已经被其它机器使用了�o伺服器则会回应一个 DHCPNACK 封包给客户端�o要求其从新执行 Dhcpdiscover。
  至于 IP 的租约期限却是非常考究的�o并非如我们租房子那样简单�o 以 NT 为例子�sDHCP 工作站除了在开机的时候发出 dhcprequest 请求之外�o在租约期限一半的时候也会发出 dhcprequest �o如果此时得不到 DHCP 伺服器的确认的话�o工作站还可以继续使用该 IP �r然后在剩下的租约期限的再一半的时候(即租约的75%)�o还得不到确认的话�o那么工作站就不能拥有这个 IP 了。至于为什么不是到租约期限完全结束才放弃 IP 呢�t�o对不起�o小弟也是不学无术之人�o没有去深究了�o只知道要回答 MCSE 题目的时候�o您一定要记得 NT 是这么工作的就是了。
  要是您想退租,可以随时送出 DHCPLEREASE 命令解约�o就算您的租约在前一秒钟才获得的。
  跨网路的 DHCP 运作
  从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,其情形只能在同一网路之内进行�o因为 router 是不会将广播传送出去的。但如果 DHCP 伺服器安设在其它的网路上面呢�t由于 DHCP 客户端还没有 IP 环境设定�o所以也不知道 Router 位址�o而且有些 Router 也不会将 DHCP 广播封包传递出去�o因此这情形下 DHCPDISCOVER 是永远没办法抵达 DHCP 伺服器那端的,当然也不会发生 OFFER 及其他动作了。要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求�o然后将此请求传递给真正的 DHCP 伺服器�o然后将伺服器的回复传给客户。这里�oProxy 主机必须自己具有路由能力,且能将双方的封包互传对方。
  若不使用 Proxy,您也可以在每一个网路之中安装 DHCP 伺服器�o但这样的话�o一来设备成本会增加�o而且�o管理上面也比较分散。当然���o如果在一个十分大型的网路中�o这样的均衡式架构还是可取的。端视您的实际情况而定了。
  DHCP 封包格式
   TCP/IP基础: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
>>>更多专题请看DHCP协议  TCP/IP基础  TCP/IP协议专题

你可能感兴趣的:(职场,TCP/IP,休闲,DHCP协议)