才子佳人博客

我的故事我讲述

DHCP动态主机配置协议简介
 
来源:xjh  编辑:xjh  2010-06-12

一、DHCP定义

DHCP 是 Dynamic Host Configuration Protocol(动态主机配置协议)缩写,它的前身是 BOOTP(BOOTP 原本是用于无磁盘主机连接的网络上面的)。DHCP是BOOTP的扩展,它提供了一种动态指定IP地址和配置参数的机制。

DHCP主要用于大型网络环境和配置比较困难的地方。DHCP服务器自动为客户机指定IP地址及其他配置参数(如子网掩码、网关、DNS设置),自动配置参数使得网络上的计算机通信变得方便而容易实现。

DHCP使IP地址可以租用,DHCP定义了一种可以使IP地址使用一段有限时间的机制,在客户期限到了的时候可以重新分配这个IP地址。

二、DHCP基于C/S模式

DHCP 分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定参数(如IP地址、子网掩码、网关、DNS设置)都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 请求;而客户端则会自动使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定。

三、DHCP 的地址分配方式

首先,必须至少有一台 DHCP服务器工作在网络中,它会监听网络的 DHCP 请求,并与客户端磋商 TCP/IP 的设定环境。它提供三种 IP 地址分配方式:

1)Manual Allocation,网络管理员为某些少数特定的Host绑定固定IP地址,且地址不会过期。

2)Automatic Allocation,自动分配,其情形是:一旦 DHCP 客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。

3)Dynamic Allocation,动态分配,当 DHCP 第一次从 DHCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。

四、DHCP 的工作原理

第一次登录的时候:

1)寻找 Server(DHCP DISCOVER

当 DHCP 客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP 数据设定,它会向网络发出一个 DHCP DISCOVER 封包。

因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0 ,而目的地址则为 255.255.255.255 ,然后再附上 DHCP discover 的信息,向网络进行广播。 若得不到响应,客户端一共会有四次 DHCP discover 广播。

如果都没有得到 DHCP 服务器的响应,客户端则会显示错误信息,宣告 DHCP discover 的失败。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCP discover 的过程。

2)提供 IP 租用地址(DHCP OFFER

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

由于客户端在开始的时候还没有 IP 地址,所以在其 DHCP discover 封包内会带有其 MAC 地址信息,并且有一个 Transaction ID 编号来辨别该封包,DHCP 服务器响应的 DHCP offer 封包则会根据这些资料传递给要求租约的客户。根据服务器端的设定,DHCP offer 封包会包含一个租约期限的信息。

3)接受 IP 租约(DHCP request

如果客户端收到网络上多台 DHCP 服务器的响应,只会挑选其中一个 DHCP offer 而已(通常是最先抵达的那个),并且会向网络发送一个DHCP request广播封包,告诉所有 DHCP 服务器它将指定接受哪一台服务器提供的 IP 地址,即客户端可以用 DHCP request 向服务器提出 DHCP 选择。

同时,客户端还会向网络发送一个 ARP 封包,查询网络上面有没有其它机器使用该 IP 地址;如果发现该 IP 已经被占用,客户端则会送出一个 DHCPDECLIENT 封包给 DHCP 服务器,拒绝接受其 DHCP offer ,并重新发送 DHCP discover 信息。

4)租约确认(DHCP ACK

当 DHCP 服务器接收到客户端的 DHCP request 之后,会向客户端发出一个 DHCPACK 响应,以确认 IP 租约的正式生效,也就结束了一个完整的 DHCP 工作过程。

五、跨网络的 DHCP 运作 (DHCP Agent、多DHCP 服务器

从前面描述的过程中,我们不难发现:DHCP DISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为 router 是不会将广播传送出去的。但如果 DHCP 服务器安设在其它的网络上面呢?

由于 DHCP 客户端还没有 IP 环境设定,所以也不知道 Router 地址,而且有些 Router 也不会将 DHCP 广播封包传递出去,因此这情形下 DHCP DISCOVER 是永远没办法抵达 DHCP 服务器那端的,当然也不会发生 OFFER 及其它动作了。

要解决这个问题,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP 服务器,然后将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。 若不使用 Proxy,您也可以在每一个网络之中安装 DHCP 服务器,但这样的话,一来设备成本会增加,而且,管理上面也比较分散。

六、DHCP 协议报文

1 dhcp discover: 此为client开始DHCP过程中的第一个请求报文。

2 dhcp offer : 此为server 对dhcp discover 报文的响应。

3 dhcp request : 此为client 对dhcp offer 报文的响应。

4 dhcp declient: 当client发现server 分配给它的IP地址无法使用,如 IP地址发生冲突时,将发出此报文让server禁止使用这次分配的IP地址。

5 dhcp ack : server对 dhcp request 报文的响应,client收到此报文后才真正获得了IP地址和相关配置信息。

6 dhcp nak : 此报文是server对client的dhcp request报文的拒绝响应,client 收到此报文后,一般会重新开始DHCP过程。

7 dhcp release :此报文是 client主动释放IP地址,当server 收到此报文后就可以收回IP地址分配给其他的client。

总结:DHCP过程简要总结如下:

1、源端从需要获得地址的接口,向接口所在网段广播查询DHCP Server的Discover报文。

2、DHCP Server收到报文后,向源端回送Offer报文,报文中包含了DHCP Server的IP地址。

3、源端向接口所在网段广播要求获取IP地址的Request报文,报文中包含了DHCP Server的IP地址的信息。

4、DHCP Server收到报文后,向源端回送ACK报文,报文中包含了DHCP Server分配给相应接口的IP地址。

参考文献:

http://www.cnpaf.net/Class/DHCP/200610/16257.html协议分析网

http://baike.baidu.com/view/7992.htm?fromenter=%A3%C4%A3%C8%A3%C3%A3%D0&fr=ala0_1_1

http://technic.xkq.com/20090220/7879.html

Windows 2003下DHCP服务器配置


dhcp 抓包列表


dhcp discover


dhcp offer


dhcp request



dhcp ack


dhcp ack detail


分类:网络日志| 查看评论
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: