DHCP的若干原理解释

转自:http://blog.chinaunix.net/uid-22287947-id-1775641.html

 

搜罗了几种关于dhcp的原理和过程解释

 

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务 器的IP地址等TCP/IP参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP 协议是基于UDP层之上的应用,本文结合抓报所得数据分析DHCP协议实现原理

一、先了解一下需要抓取的DHCP报文

客户发出的IP租用请求报文

  DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。

DHCP回应的IP租用提供报文

  任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,都会 通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为 255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。

客户选择IP租用报文

  客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER 包,并向网络中广播一个 DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。

DHCP服务器发出IP租用确认报文

  被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。

客户配置成功后发出的公告报文

  客户机在收到DHCPACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。

至此一个客户获取IP的DHCP服务过程基本结束,不过客户获取的IP一般是用租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。

客户IP租用更新报文

(1)在当前租期已过去50%时,DHCP客户机直接向为其提供IP地址的DHCP服务器发 送DHCPREQUEST消息包。如果客户机接收到该服务器回应的DHCPACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的 TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。

(2)如果在租期过去50%时未能成功更新,则客户机将在当前租期过去87.5%时再次向为其提供IP地址的DHCP联系。如果联系不成功,则重新开始IP租用过程。

(3)如果DHCP客户机重新启动时,它将尝试更新上次关机时拥有的IP租用。如果更新未能 成功,客户机将尝试联系现有IP租用中列出的缺省网关。如果联系成功且租用尚未到期,客户机则认为自己仍然位于与它获得现有IP租用时相同的子网上(没有 被移走)继续使用现有IP地址。 如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。

  DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的 时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机 长度的时间)。四次之后,如果仍未能收到服务器的回应,则运行Windows 2000的DHCP客户机将从169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP 客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。

二、设置SNIFFER PRO抓取DHCP通讯报文

    本文使用的抓包工具软件是NAI公司推出的功能强大的协议分析软件---Sniffer Pro。Sniffer Pro 具有强大的网络分析功能和特征,是解决网络问题的好工具。Sniffer支持丰富的的协议,而且能够进行快速解码分析。Sniffer Pro 4.6可以运行在各种Windows平台上(其它类似软件如Netxray不能在Windows 2003和Windows XP上正常运行)。Sniffer软件比较大,运行时需要的计算机内存比较大,否则运行比较慢,这也是它与Netxray相比的一个缺点。

设置包过滤条件

网络中传输的数据包很多,这里只抓取跟DHCP有关的数据,设置如下:点击Capture菜单,选择define filter打开define filter-capture对话框,设置入图参数。

Address选项

Address: Hardware

Mode:Include

Station 1: 10E08C5FC28A(网卡的物理MAC地址,不同的网卡MAC是不同)

Station 2: any

Advanced选项

IP:ICMP

UDP:BOOTP/DNS(UDP)

Packer Size:ALL

其它用默认设置,给这个配置起个名字:BOOTP

现在可以抓包了

先弹出Capture Panel(监视抓包情况),点击Capture菜单中的START开始抓包。进入命令提示符,分别执行IPCONFIG/RELEASE 、IPCONFIG/RENEW命令,通过监视器可以看到已经以抓到数据包了,停止抓包并分析包,还是先保持包到磁盘以备分析。

三、分析抓到的数据包

用户从DHCP获取IP过程如下:

1、 用户发出DHCPDISCOVER报文;

开始抓报文时首先执行的IPCONFIG/RELEASE命令的作用是用来释放IP,这条报 文后面分析,在释放IP后执行的更新IP命令IPCONFIG/RENEW将发起一个DHCP过程,分析从这里开始。现在,客户机没有地址,它就会发出一 个DHCPDiscover报文,该报文是广播报文,所有的具有DHCP Server功能的服务器都会收到该报文。

图DHCP5

在图中我们可以看到该报文在链路层中发的确实是广播报文。由于DHCP协议是初始化协议,更简单的说,就是让终端获取IP 地址的协议,既然终端连IP地址都没有,何以能够发出IP报文呢?

为了解决这个问题,DHCP报文的封装采取了如下措施:

1、首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文。在Ethernet_II格式的网络中,就是目标MAC为全1。

2、由于终端没有IP地址,IP头中的原IP规定填为全0。

3、当终端发出DHCP请求报文,它并不知道DHCP SERVER的IP地址,因此IP头中的目标IP填为子网广播IP——全1,以保证DHCP SERVER的IP协议栈不丢弃这个报文。

4、上面的措施保证了DHCP SERVER能够收到终端的请求报文,但仅凭链路层和IP层信息,DHCP SERVER无法区分出DHCP报文,因此终端发出的DHCP请求报文的UDP层中的原端口为68,目标端口DstPort为67。即DHCP SERVER通过知名端口号67来判断一个报文是否是DHCP报文。

DHCP协议的报文中主要数据格式详解

Boot record type为1时表示是Client的请求,为2时表示是Server的应答。

Hardware address typeClient 的网络硬件地址类型,1表示Client 的网络硬件是10MB的以太网类型

/Hardware address lengthClient 的网络硬件地址长度,6表示Client 的网络硬件地址长度是6bytes(即以太网类型的6bytes的MAC地址)。

HOPS跳数,表示当前的DHCP报文经过的DHCP RELAY(中级)的数目,每经过一个DHCP中继,此字段就会加1,此字段的作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃。

Transaction id事务ID,Client每次发送DHCP请求报文时选择的随机数,用来匹配server的响应报文是对哪个请求报文的响应。Client会丢弃“ID”不匹配的响应报文。

Elapsed boot time秒数,用来表示client开始DHCP请求后的时间流逝秒数

flags标志,在 BOOTP中此字段是保留不用的,在DHCP协议中也只使用了其左边的最高位。

Client self-assigned IPaddress客户机IP地址

Client IP address server分配给client的IP地址

Next Server to use in bootstrap服务器IP地址

Relay AgentDHCP中继代理IP地址

Client hardware address客户机硬件地址MAC

Host name 服务器的主机名

Boot file nameClient 的启动配置文件名

Vendor Information tag选项字段,此字段中包含了大量可选的终端初始配置信息和网络配置信息,对于BOOTP协议,此字段为64bytes,对于DHCP协议,此字段为64---312 bytes。其中最常用的选项列表如下:

Dhcp message typecode = 53, length = 1, value= 1-8,此字段表示DHCP报文类型

Router Ipcode = 3, length = IP地址长度, value=client的默认网关的 IP地址;

DNS Ipcode = 6, length = IP地址长度的倍数, value= client的DNS服务器的IP地址序列;

Wins Ipcode = 44, length = IP地址长度的倍数, value= client的WINS服务器的 IP地址序列;

Client idcode = 61, length = client的网络硬件地址的长度+2, value=“htype”+“hlen”+ client的网络硬件地址;

server idcode = 54, length = IP地址长度, value= DHCP SERVER的IP地址;

其中我们要注意Transaction ID=CF04CD61和DHCP Message Type一项中type=Discover,前一项表示会话ID,即DHCP Server发回的响应报文中该结构的数值要与发出去的DHCP Discover中的该结构数值一样,后一项说明DHCP报文类型为Discover类型报文。

2 DHCP SERVER回送DHCPOFFER报文

从图中可以看出,DHCPOFFER报文是单播而不是广播,报文明确给出了目标MAC和 IP,这一点不同与一般的技术文章介绍。其实,DHCP SERVER给终端的响应报文是根据DHCP报文中的内容决定是广播还是单播,一般都是广播形式。通讯源端口是67,目标端口为68,客户端通过端口号 68来判断一个报文是否是DHCP SERVER的响应报文,Transaction ID=CF04CD61,表示这个报文是与图DHCP7中的DHCPDiscover报文相关的报文,因为二者标示一致。

从DHCP Server回应的DHCPOffer报文中我们还可以得到DHCP拟分配给客户端的初始配置信息和网络配置信息,其中

Client self-assigned IP address =0.0.0.0表示客户机还没有使用该地址

Client server-assigned IP address =10.177.124.73表示DHCP Server分配给该客户机的IP地址

Server IP ID=218.290.240它标示了客户机下一次发出DHCPRequest报文时,哪个DHCP Server会发出回应

DHCP Message Typee=DHCP Offer表示这是一个对DHCPDiscover的回应报文

Request IP address lease time =6000 表示租期是100分钟

Domain Name Server=218.29.0.251域名服务器地址

Gateway address=10.177.124.254网关地址

Subnet mask=255.255.255.0 表示这个地址的网段是一个标准的C类地址网段

所有发送DHCP Offer信息包的服务器将保留它们提供的一个IP地址。在该地址不再保留之前,该地址不能分配给其他的客户。

用户发出DHCPREQUEST报文

客户以广播的方式发送DHCP Request信息包作为响应。注意其中的DHCP Message Type一项中type=Request表示这是一个请求报文。

客户利用DHCP Request询问服务器其它的配置选项,如:DNS或网关地址如图DHCP11

DHCP SERVER回送DHCPACK报文

该信息包是以单播的方式发送的。当服务器接收到DHCP Request信息包时,它以一个DHCP Acknowledge信息作为响应,其内容同DHCPOFFER类似,并在“选项”字段中增加了IP地址使用租期选项。

宣告确认

CLIENT收到DHCPACK报文后(经过上面的处理后,有且只有一个DHCPACK报 文),会检查DHCP SERVER分配给自己的IP地址是否能够使用,如在以太网类型的网络中,CLIENT会发出一个ARP请求来确定DHCP SERVER分配的IP地址是否已经被别人使用,如果可以使用,则CLIENT成功获得IP地址,并根据IP地址使用租期自动启动续延过程。

DHCP协议报文的种类

前面反复提到DHCP Message Type项,这里列出所有DHCP协议报文的种类。DHCP协议采用CLIENT-SERVER方式进行交互,其报文格式共有8种,具体含义如下:

1:DHCPDISCOVER(0x01),此为Client开始DHCP过程的第一个报文

2:DHCPOFFER(0x02),此为Server对DHCPDISCOVER报文的响应

3:DHCPREQUEST(0x03),此报文是Slient开始DHCP过程中对server的DHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文

4:DHCPDECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址

5:DHCPACK(0x05),Server对Client的DHCPREQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。

6:DHCPNAK(0x06),Server对Client的DHCPREQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。

7:DHCPRELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

8:DHCPINFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。

是一个运行IPCONFIG/RELEASE后释放IP的报文,从图中可以看出DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

上面提到的都是在已经开机的情况下获得的报文,如果计算机重新启动,是不是完全按照文章提到的四步得到IP参数。

其中包含关机前获得的IP=192.168.0.22,这是不同与前面提到的 10.177.124.X段的IP。原来客户机保留了上一次获得的地址,客户机在重新启动时,如果租用期未超过50%,它就会认为它已经知道该与哪台 DHCP服务器进行联系,于是就跳过前两步,并发送另一个DhcpRequest报文给同一个服务器。如果该IP地址仍然可用的话,该DHCP服务器将给 这台客户机返回另一个确认消息。 同样,DHCP服务器上也会保留(在租用期内的)客户机的地址。如果你的DHCP服务器中的租用期设的足够长,你就会发现,重启一台客户机后,客户机总是 得到同一个地址。这正是由于客户机、服务器能保存已分配地址所造成的。

如果一台客户机未从该DHCP服务器获取过地址,或者它获得的地址已过期,那么它将需要经过全部四个步骤才能得到一个IP地址。

由于图太多没有将图上传。

###################################################################

 

DHCP RFC
2009-09-02 13:26

有幸拜读了DHCP RFC文档,只有一句话,真不是写个人看得.飘忽不定,像做广告般的参考xxx参考xxx.无语.

DHCP的报文格式

   尝试的翻译了点,实在头大.能懒就懒,这是我一贯的风格,没办法大多数就都还是copy的e文,当做是学英语喽^_^

DHCP的报文格式,如图1,


OP(1)

Htype(1)

Hlen(1)

Hops(1)

Transaction ID(4)

Seconds(2)

Flags(2)

Ciaddr(4)

Yiaddr(4)

Siaddr(4)

Giaddr(4)

Chaddr(16)

Sname(64)

File(128)

Options(variable)

(图1 DHCP的 报文格式)

  1. OP:若是client送给server的封包,设为1,反向为2;
  2. Htype:硬件类别,ethernet为1;
  3. Hlen:硬件长度,ethernet为6;
  4. Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
  5. Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
  6. Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
  7. Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
  8. Ciaddr:用户IP地址;
  9. Yiaddr:客户IP地址;
  10. Siaddr:用于bootstrap过程中的IP地址;
  11. Giaddr:转发代理(网关)IP地址;
  12. Chaddr:client的硬件地址;
  13. Sname:可选server的名称,以0x00结尾;
  14. File:启动文件名;
  15. Options:,厂商标识,可选的参数字段


还是wiki的人性化点

DHCP uses the same two IANA assigned ports as BOOTP: 67/udp for the server side, and 68/udp for the client side.

DHCP operations fall into four basic phases. These phases are IP discovery, IP lease offer, IP request, and IP lease acknowledgement.

After the client obtained an IP address, the client may start an address resolution (ARP) query to prevent IP conflicts caused by address pool overlapping of DHCP servers.

 

DHCP discovery

The client broadcasts on the physical subnet to find available servers. Network administrators can configure a local router to forward DHCP packets to a DHCP server on a different subnet. This client-implementation creates a UDP packet with the broadcast destination of 255.255.255.255 or subnet broadcast address.

A client can also request its last-known IP address (in the example below, 192.168.1.100). If the client is still in a network where this IP is valid, the server might grant the request. Otherwise, it depends whether the server is set up as authoritative or not. An authoritative server will deny the request, making the client ask for a new IP immediately. A non-authoritative server simply ignores the request, leading to an implementation-dependent timeout for the client to give up on the request and ask for a new IP address.

 

DHCP offers

When a DHCP server receives an IP lease request from a client, it extends an IP lease offer. This is done by reserving an IP address for the client and sending a DHCPOFFER message across the network to the client. This message contains the client's MAC address, followed by the IP address that the server is offering, the subnet mask, the lease duration, and the IP address of the DHCP server making the offer.

The server determines the configuration, based on the client's hardware address as specified in the CHADDR field. Here the server, 192.168.1.1, specifies the IP address in the YIADDR field.

 

DHCP requests

When the client PC receives an IP lease offer, it must tell all the other DHCP servers that it has accepted an offer. To do this, the client broadcasts a DHCPREQUEST message containing the IP address of the server that made the offer. When the other DHCP servers receive this message, they withdraw any offers that they might have made to the client. They then return the address that they had reserved for the client back to the pool of valid addresses that they can offer to another computer. Any number of DHCP servers can respond to an IP lease request, but the client can only accept one offer per network interface card.

 

DHCP acknowledgement

When the DHCP server receives the DHCPREQUEST message from the client, which is basically a unicast packet unlike the DHCPDISCOVER packet as the client now knows who the server is. This initiates the final phase of the configuration process. The acknowledgement phase involves sending a DHCPACK packet to the client. This packet includes the lease duration and any other configuration information that the client might have requested. At this point, the IP configuration process is complete.

The server acknowledges the request and sends the acknowledgement to the client. The system as a whole expects the client to configure its network interface with the supplied options.

DHCPDISCOVER
UDP Src=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67
OPHTYPEHLENHOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Discover
DHCP option 50: 192.168.1.100 requested
DHCPOFFER
UDP Src=192.168.1.1
sPort=67 Dest=192.168.1.100 dPort=68
OPHTYPEHLENHOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0xC0A80164
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Offer
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server
DHCPREQUEST
UDP Src=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67
OPHTYPEHLENHOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Request
DHCP option 50: 192.168.1.100 requested
DHCP option 54: 192.168.1.1 DHCP server.
DHCPACK
UDP Src=192.168.1.1
sPort=67 Dest=192.168.1.100 dPort=68
OPHTYPEHLENHOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR (Client IP Address)
0x00000000
YIADDR (Your IP Address)
0xC0A80164
SIADDR (Server IP Address)
0x00000000
GIADDR (Gateway IP Address switched by relay)
0x00000000
CHADDR (Client Hardware Address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP ACK
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server

 

DHCP 发现 (DISCOVER)

客户在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该客户实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。否则,就要看该服务器是授权的还是非授权的。 授权服务器会拒绝请求,使得客户立刻申请一个新的IP。非授权服务器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。

 

DHCPDISCOVER
UDP Src=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67
OPHTYPEHLENHOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Discover
DHCP option 50: 192.168.1.100 requested

[编辑] DHCP提供 (OFFER)

当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络发送一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。

服务器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的服务器,192.168.1.1,将IP地址指定于YIADDR字段。

DHCPOFFER
UDP Src=192.168.1.1
sPort=67 Dest=255.255.255.255 dPort=68
OPHTYPEHLENHOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0xC0A80164
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Offer
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server

[编辑] DHCP请求 (REQUEST)

当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST 消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。然后它们把曾经给客户保留的那个地 址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能 接受一个租约提供。

DHCPREQUEST
UDP Src=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67
OPHTYPEHLENHOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Request
DHCP option 50: 192.168.1.100 requested
DHCP option 54: 192.168.1.1 DHCP server.

[编辑] DHCP确认 (ACK)

当DHCP服务器收到来自客户的DHCPREQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。

该服务器响应请求并发送响应给客户。整个系统期望客户来根据选项来配置其网卡。

DHCPACK
UDP Src=192.168.1.1
sPort=67 Dest=192.168.1.100 dPort=68
OPHTYPEHLENHOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECSFLAGS
0x0000 0x0000
CIADDR (Client IP Address)
0x00000000
YIADDR (Your IP Address)
0xC0A80164
SIADDR (Server IP Address)
0x00000000
GIADDR (Gateway IP Address switched by relay)
0x00000000
CHADDR (Client Hardware Address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTPlegacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP ACK
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server

[编辑] DHCP信息

客户端向DHCP服务器发送一个请求:要么是用于获取比服务器发送的原始DHCPACK更多的信息,要么是重复数据以进行一个特殊的应用——比方说,浏览器使用“DHCP通知”,通过WPAD获得代理主机的设置。这样的询问并不会使DHCP服务器更新其数据库中的IP租约。

 

 

DHCP information

The client to the DHCP server: either to request more information than the server sent with the original DHCPACK; or to repeat data for a particular application - for example, browsers use DHCP Inform to obtain web proxy settings via WPAD. Such queries do not cause the DHCP server to refresh the IP expiry time in its database.

 

DHCP releasing

The client sends a request to the DHCP server to release the DHCP and the client unconfigures its IP address. As clients usually do not know when users may unplug them from the network, the protocol does not mandate the sending of DHCP Release.

 

Field      DHCPDISCOVER          DHCPREQUEST           DHCPDECLINE,
DHCPINFORM DHCPRELEASE
----- ------------ ----------- -----------
'op' BOOTREQUEST BOOTREQUEST BOOTREQUEST
'htype' (From "Assigned Numbers" RFC)
'hlen' (Hardware address length in octets)
'hops' 0 0 0
'xid' selected by client 'xid' from server selected by
DHCPOFFER message client
'secs' 0 or seconds since 0 or seconds since 0
DHCP process started DHCP process started
'flags' Set 'BROADCAST' Set 'BROADCAST' 0
flag if client flag if client
requires broadcast requires broadcast
reply reply
'ciaddr' 0 (DHCPDISCOVER) 0 or client's 0 (DHCPDECLINE)
client's network address client's network
network address (BOUND/RENEW/REBIND) address
(DHCPINFORM) (DHCPRELEASE)
'yiaddr' 0 0 0
'siaddr' 0 0 0
'giaddr' 0 0 0
'chaddr' client's hardware client's hardware client's hardware
address address address
'sname' options, if options, if (unused)
indicated in indicated in
'sname/file' 'sname/file'
option; otherwise option; otherwise
unused unused
'file' options, if options, if (unused)
indicated in indicated in
'sname/file' 'sname/file'
option; otherwise option; otherwise
unused unused
'options' options options (unused)

Option DHCPDISCOVER DHCPREQUEST DHCPDECLINE,
DHCPINFORM DHCPRELEASE
------ ------------ ----------- -----------
Requested IP address MAY MUST (in MUST
(DISCOVER) SELECTING or (DHCPDECLINE),
MUST NOT INIT-REBOOT) MUST NOT
(INFORM) MUST NOT (in (DHCPRELEASE)
BOUND or
RENEWING)
IP address lease time MAY MAY MUST NOT
(DISCOVER)
MUST NOT
(INFORM)
Use 'file'/'sname' fields MAY MAY MAY
DHCP message type DHCPDISCOVER/ DHCPREQUEST DHCPDECLINE/
DHCPINFORM DHCPRELEASE
Client identifier MAY MAY MAY
Vendor class identifier MAY MAY MUST NOT
Server identifier MUST NOT MUST (after MUST
SELECTING)
MUST NOT (after
INIT-REBOOT,
BOUND, RENEWING
or REBINDING)
Parameter request list MAY MAY MUST NOT
Maximum message size MAY MAY MUST NOT
Message SHOULD NOT SHOULD NOT SHOULD
Site-specific MAY MAY MUST NOT
All others MAY MAY MUST NOT


   在网络上search的时候你会发现server to client到底是broadcast还是unicast众说分云.感该下国内的网络环境.这里直接接用了一朋友的网友的一段话.我努力想在rfc文档中找到权威解释,可惜...也许我该补补E文了.
   server 维护了一张表,表里有请求者的mac 与 offered ip, 如果一个dhcp request 的src-mac 在这张表里,offer 就是unicast, 因为这时client 是有ip 的;如果是一个新的client, client 会先发一个dhcp discover, server 收到后会回一个 dhcp offer,这个offer 是broadcast,因为这时client 还没有ip, client 收到 这个offer 后会发一个dhcp request, 然后server 给一个 dhcp ack。 这两个报文可以是broadcast or unicast, based on bootp flags.
   在rfc文档中倒是找到个client to server,broadcast还是unicast的.
   

Use of broadcast and unicast

The DHCP client broadcasts DHCPDISCOVER, DHCPREQUEST and DHCPINFORM
messages, unless the client knows the address of a DHCP server. The
client unicasts DHCPRELEASE messages to the server. Because the
client is declining the use of the IP address supplied by the server,
the client broadcasts DHCPDECLINE messages.

When the DHCP client knows the address of a DHCP server, in either
INIT or REBOOTING state, the client may use that address in the
DHCPDISCOVER or DHCPREQUEST rather than the IP broadcast address.
The client may also use unicast to send DHCPINFORM messages to a
known DHCP server. If the client receives no response to DHCP
messages sent to the IP address of a known DHCP server, the DHCP
client reverts to using the IP broadcast address.

   想想应该也就是这么个道理吧.你在有ip的情况下server发包,server就应该unicast了吧.
##########################################################################

概要

动态主机配置协议 (DHCP) 是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。通常,DHCP 服务器至少向客户端提供以下基本信息:
IP 地址

子网掩码

默认网关
它还可以提供其他信息,如域名服务 (DNS) 服务器的地址和 Windows Internet 名称服务 (WINS) 服务器的地址。系统管理员配置 DHCP 服务器分配给客户端的选项。

当客户端被配置为接收 DHCP 信息后首次初始化时,它将启动与服务器的对话。 

以下是客户端和服务器之间对话的摘要表,最后一列是数据包级的过程说明: 

Source     Dest        Source     Dest              Packet
MAC addr MAC addr IP addr IP addr Description
-----------------------------------------------------------------
Client Broadcast 0.0.0.0 255.255.255.255 DHCP Discover
DHCPsrvr Broadcast DHCPsrvr 255.255.255.255 DHCP Offer
Client Broadcast 0.0.0.0 255.255.255.255 DHCP Request
DHCPsrvr Broadcast DHCPsrvr 255.255.255.255 DHCP ACK


DHCP 客户端和 DHCP 服务器之间的详细对话如下:

DHCPDISCOVER

客户端发送 DHCPDISCOVER 数据包。以下内容摘自

网络监视器的捕获信息,显示了 DHCPDISCOVER 数据包中的 IP 和 DHCP 部分。在 IP 部分,可以看到 Destination 地址是 255.255.255.255,而 Source 地址是 0.0.0.0。DHCP 部分将数据包标识为 Discover 数据包,并使用网卡的物理地址在两处标识客户端。注意 CHADDR 字段和 DHCP 中的值:Client Identifier 字段是相同的。 
IP:ID = 0x0; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 0 (0x0)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x39A6
IP:Source Address = 0.0.0.0
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:Discover (xid=21274A1D)
DHCP:Op Code (op) = 1 (0x1)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Discover
DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
DHCP:Host Name = JUMBO-WS
DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
DHCP:End of this option field

DHCPOFFER

DHCP 服务器通过发送 DHCPOFFER 数据包作出响应。在以下摘录捕获信息的 IP 部分中,Source 地址现在是 DHCP 服务器 IP 地址,而 Destination 地址是广播地址 255.255.255.255。DHCP 部分将数据包标识为 Offer。YIADDR 字段用服务器提供给客户端的 IP 地址填充。注意,CHADDR 字段仍然包含发出请求的客户端的物理地址。另外,在 DHCP Option Field 部分,可以看到由服务器随 IP 地址一起发送的各种选项。在这种情况下,服务器发送的是子网掩码、默认网关(路由器)、租约时间、WINS 服务器地址(NetBIOS 名称服务)和 NetBIOS 节点类型。
IP:ID = 0x3C30; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 15408 (0x3C30)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x2FA8
IP:Source Address = 157.54.48.151
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:Offer (xid=21274A1D)
DHCP:Op Code (op) = 2 (0x2)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 157.54.50.5
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Offer
DHCP:Subnet Mask = 255.255.240.0
DHCP:Renewal Time Value (T1) = 8 Days, 0:00:00
DHCP:Rebinding Time Value (T2) = 14 Days, 0:00:00
DHCP:IP Address Lease Time = 16 Days, 0:00:00
DHCP:Server Identifier = 157.54.48.151
DHCP:Router = 157.54.48.1
DHCP:NetBIOS Name Service = 157.54.16.154
DHCP:NetBIOS Node Type = (Length: 1) 04
DHCP:End of this option field

DHCPREQUEST

客户端通过发送 DHCPREQUEST 响应 DHCPOFFER。在以下捕获信息的 IP 部分中,客户端的 Source 地址仍然是 0.0.0.0,数据包的 Destination 仍然是 255.255.255.255。由于客户端还没有从服务器收到可以开始使用所提供地址的确认,所以客户端仍然保留 0.0.0.0。由于可能有多个 DHCP 服务器已经作出响应,并可能预订了 为客户端产生的 Offer,所以 Destination 地址仍然被广播出去。这使得其他 DHCP 服务器知道:它们可以释放已提供的地址,并将这些地址返回到可用地址池中。DHCP 部分将数据包标识为 Request,并使用 DHCP:Requested Address 字段确认所提供的地址。DHCP:Server Identifier 字段显示提供租约的 DHCP 服务器的 IP 地址。
IP:ID = 0x100; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 256 (0x100)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x38A6
IP:Source Address = 0.0.0.0
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:Request (xid=21274A1D)
DHCP:Op Code (op) = 1 (0x1)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Request
DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
DHCP:Requested Address = 157.54.50.5
DHCP:Server Identifier = 157.54.48.151
DHCP:Host Name = JUMBO-WS
DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
DHCP:End of this option field

DHCPACK

DHCP 服务器用 DHCPACK 响应 DHCPREQUEST,以此完成初始化周期。Source 地址是 DHCP 服务器 IP 地址,Destination 地址仍然是 255.255.255.255。YIADDR 字段包含客户端的地址,而 CHADDR 和 DHCP:Client Identifier 字段是发出请求的客户端中网卡的物理地址。DHCP Option 部分将数据包标识为 ACK。
IP:ID = 0x3D30; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 15664 (0x3D30)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x2EA8
IP:Source Address = 157.54.48.151
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:ACK (xid=21274A1D)
DHCP:Op Code (op) = 2 (0x2)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 157.54.50.5
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP ACK
DHCP:Renewal Time Value (T1) = 8 Days, 0:00:00
DHCP:Rebinding Time Value (T2) = 14 Days, 0:00:00
DHCP:IP Address Lease Time = 16 Days, 0:00:00
DHCP:Server Identifier = 157.54.48.151
DHCP:Subnet Mask = 255.255.240.0
DHCP:Router = 157.54.48.1
DHCP:NetBIOS Name Service = 157.54.16.154
DHCP:NetBIOS Node Type = (Length: 1) 04
DHCP:End of this option field

如果客户端以前有 DHCP 分配的 IP 地址并且客户端被重新启动,则客户端将在特殊的 DHCPREQUEST 数据包中特定地请求以前租用过的 IP 地址。Source 地址是 0.0.0.0,Destination 地址是广播地址 255.255.255.255。Microsoft 客户端将用以前分配的地址填充 DHCP Option Field DHCP:Requested Address 字段。严格符合 RFC 的客户端将用请求的地址填充 CIADDR Field。对这两种情况 Microsoft DHCP 服务器都将接受。
IP:ID = 0x0; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 0 (0x0)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x39A6
IP:Source Address = 0.0.0.0
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:Request (xid=2757554E)
DHCP:Op Code (op) = 1 (0x1)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 660034894 (0x2757554E)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Request
DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
DHCP:Requested Address = 157.54.50.5
DHCP:Host Name = JUMBO-WS
DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
DHCP:End of this option field

这时,服务器可能响应,也可能不响应。Windows NT DHCP 服务器的行为取决于所使用的操作系统版本以及其他因素,如超级作用域。如果服务器决定客户端仍然可以使用该地址,它将保持静默或对 DHCPREQUEST 发出 ACK。如果服务器决定客户端不能拥有该地址,它将发送 NACK。
IP:ID = 0x3F1A; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 16154 (0x3F1A)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x2CBE
IP:Source Address = 157.54.48.151
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:NACK (xid=74A005CE)
DHCP:Op Code (op) = 2 (0x2)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 1956644302 (0x74A005CE)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP NACK
DHCP:Server Identifier = 157.54.48.151
DHCP:End of this option field

然后,客户端将开始发现进程,但 DHCPDISCOVER 数据包仍然尝试租用相同的地址。在许多情况下,tth 客户端将得到相同的地址,但也可能得不到。
IP:ID = 0x100; Proto = UDP; Len: 328
IP:Version = 4 (0x4)
IP:Header Length = 20 (0x14)
IP:Service Type = 0 (0x0)
IP:Precedence = Routine
IP:...0.... = Normal Delay
IP:....0... = Normal Throughput
IP:.....0.. = Normal Reliability
IP:Total Length = 328 (0x148)
IP:Identification = 256 (0x100)
IP:Flags Summary = 0 (0x0)
IP:.......0 = Last fragment in datagram
IP:......0. = May fragment datagram if necessary
IP:Fragment Offset = 0 (0x0) bytes
IP:Time to Live = 128 (0x80)
IP:Protocol = UDP - User Datagram
IP:Checksum = 0x38A6
IP:Source Address = 0.0.0.0
IP:Destination Address = 255.255.255.255
IP:Data:Number of data bytes remaining = 308 (0x0134)

DHCP:Discover (xid=3ED14752)
DHCP:Op Code (op) = 1 (0x1)
DHCP:Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP:Hardware Address Length (hlen) = 6 (0x6)
DHCP:Hops (hops) = 0 (0x0)
DHCP:Transaction ID (xid) = 1053902674 (0x3ED14752)
DHCP:Seconds (secs) = 0 (0x0)
DHCP:Flags (flags) = 0 (0x0)
DHCP:0............... = No Broadcast
DHCP:Client IP Address (ciaddr) = 0.0.0.0
DHCP:Your IP Address (yiaddr) = 0.0.0.0
DHCP:Server IP Address (siaddr) = 0.0.0.0
DHCP:Relay IP Address (giaddr) = 0.0.0.0
DHCP:Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP:Server Host Name (sname) =
DHCP:Boot File Name (file) =
DHCP:Magic Cookie = [OK]
DHCP:Option Field (options)
DHCP:DHCP Message Type = DHCP Discover
DHCP:Client-identifier = (Type:1) 08 00 2b 2e d8 5e
DHCP:Requested Address = 157.54.51.5
DHCP:Host Name = JUMBO-WS
DHCP:Parameter Request List = (Length:7) 01 0f 03 2c 2e 2f 06
DHCP:End of this option field

客户端从 DHCP 服务器获得的 DHCP 信息中将有与该信息关联的租约时间。租约时间定义了对于 DHCP 分配的信息,客户端可以使用多久。当租约时间达到某个特殊时刻时,客户端将尝试更新其 DHCP 信息。



第一部分

DHCP原理
客户发出的IP租用请求报文

DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。

DHCP回应的IP租用提供报文

任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户机回应一个DHCPOFFER广播包,提 供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期 等信息。

客户选择IP租用报文

客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER包,并向网络中广播一个 DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。

DHCP服务器发出IP租用确认报文

被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。

客户配置成功后发出的公告报文

客户机在收到DHCPACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。

至此一个客户获取IP的DHCP服务过程基本结束,不过客户获取的IP一般是用租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。

客户IP租用更新报文


      我们知道在TCP/IP网络应用中,网络用户PC只有在获取了一个网络地址,才可以和其他的网络用户进行通讯,在实际应用中,我们经常会遇到一些问题:比 如IP地址发生冲突、由于网关或DNS服务器地址的设置出现错误而无法访问网络中的其他主机、由于机器的经常变动位置而不得不频繁地修改IP地址。基于这 些在网络管理中所存在的种种问题,解决的方法是引入DHCP服务,以动态的方式实现客户机器的信息配置。下面从DHCP原理出发并结合本人在授课过程的实 际经验为依据,对DHCP的应用以及在实际应用中我们会遇到的各类问题和相应的解决方法做深入的探讨。

一、DHCP服务是什么 DHCP称为动态主机配置协议。DHCP服务允许工作站连接到网络并且自动获取一个IP地址。配置DHCP服务的服务器可以为每一个网络客户提供一个IP地址、子网掩码、缺省网关、一个WINS服务器的IP地址,以及一个DNS服务器的IP地址。

二、DHCP服务在实际应用中的常见问题

1、在一个子网内是否可以存在多台DHCP服务器,如果存在的话,那么该子网中的客户机能否正确获取地址,将会获取哪个DHCP服务器所分配的地 址,是否能控制客户机器能从管理人员所设置的DHCP服务器中获取地址而不会从一些非法用户自建的DHCP服务器中取得非法得IP?

2、如果网络中存在多个子网,而子网的客户机需要DHCP服务器提供地址配置,那么是采取在各个子网都安装一台DHCP服务器,还是只在某一个子网中安装DHCP服务器,让它为多个子网的客户机分配IP地址,应该如何实现?

3、如果采取在一个子网中安装DHCP服务器,让它为多个子网的客户机分配IP地址,那么应该需要在一台DHCP服务器中创建多个不同范围的作用域,而我们如何可以准确地保证相应范围的地址分配给相应子网地主机呢?

4、如果客户机器无法从DHCP服务器中获取IP地址,那么Windows2000客户机器将会如何处理自己的TCP/IP设置?

三、DHCP的工作原理

要解析第二点中所提的问题,首先要搞清楚DHCP的实际的工作过程及原理,下面就对此做简单介绍:DHCP是一个基于广播的协议,它的操作可以归结为四个阶段,这些阶段是IP租用请求、IP租用提供、IP租用选择、IP租用确认。

1、IP租用请求:在任何时候,客户计算机如果设置为自动获取IP地址,那么在它开机 时,就会检查自己当前是否租用了一个IP地址,如果没有,它就向DCHP请求一个租用,由于该客户计算机并不知道DHCP服务器的地址,所以会用 255.255.255.255作为目标地址,源地址使用0.0.0.0,在网络上广播一个DHCPDISCOVER消息,消息包含客户计算机的媒体访问控制(MAC)地址(网卡上内建的硬件地址)以及它的NetBIOS名字。

2、IP租用提供:当DHCP服务器接收到一个来自客户的IP租用请求时,它会根据自己的作用域地址池为该客户保留一个IP地址并且在网络上广播一个来实现,该消息包含客户的MAC地址、服务器所能提供的IP地址、子网掩码、租用期限,以及提供该租用的DHCP服务器本身的IP地址。

3、IP租用选择:如果子网还存在其它DHCP服务器,那么客户机在接受了某个DHCP服务器的DHCPOFFER消息后,它会广播一条包含提供租用的服务器的IP地址的DHCPREQUEST消息,在该子网中通告所有其它DHCP服务器它已经接受了一个地址的提供,其他DHCP服务器在接收到这条消息后,就会撤销为该客户提供的租用。然后把为该客户分配的租用地址返回到地址池中,该地址将可以重新作为一个有效地址提供给别的计算机使用。

4、IP租用确认: DHCP服务器接收到来自客户的DHCPREQUEST消息,它就开始配置过程的最后一个阶段,这个确认阶段由DHCP服务器发送一个DHCPACK包给客户,该包包括一个租用期限和客户所请求的所有其它配置信息,至此,完成TCP/IP配置。

四、DHCP服务常见问题的解决方案

本文第二点中我们所提出的问题有四点,以下就此4个问题做相应的分析并给出我个人的一些解决方案,相信可以对学习DHCP服务的自学者会有一定的帮助,这些问题也是在实际教学中学生提出疑问最多的知识难点。

1、根据客户计算机的IP租用原理可以知道,在一个子网内,如果存在多台DHCP服务器来提供地址配置信息,这是不违反请求、分配原则的,因为只要 中有一台客户计算机在该子网中提出IP地址租约请求,由于请求是广播形式的,所以在子网中可以有任意数量的特定DHCP服务器响应一个IP租用请求,而客 户请求后选中的是这些任意特定DHCP服务器中的某一台,这个选择具有随机性,但有一点要注意的是客户只能为每一张网络接口卡接受一个租用提供,上面所谓 特定的DHCP服务器是指那些经过系统授权的DHCP服务器,而非授权的DHCP服务器将无法在网络中提供正常的地址分配服务,这一点非常重要,因为这样 一来客户机器将只会在管理员设定的地址范围中取得地址,Windows 2000操作系统的这一新增功能,通过对DHCP服务器进行认证避免了非法DHCP服务器分配非法IP地址造成的IP地址冲突,在实际应用中,客户机器获 取非法的地址经常是造成网络瘫痪和无法正常通讯的一大原因。综合上面的分析可以做出第一个问题的结论:在一个子网中可以存在多台DHCP服务器来提供地址 分配,但能够作为地址提供的不是任意的DHCP服务器,而应该是经过系统认证的那些,客户机请求地址时最终从那一台经过认证机器中获取时随机的。此外,从 另一个角度看,在相同子网上使用多个 DHCP 服务器,将为它所服务的 DHCP 客户机提供更强的容错能力,如下图所示,在一个子网内(网络号为192.168.1.0 掩码为255.255.255.0)共用两个 DHCP 服务器,其中的DHCP服务器1不可用的话,DHCP服务器2可以取代它并继续租用新的地址或续订现有客户机。可以建议采用的解决方案是使用 80/20 规则来划分两个 DHCP 服务器之间的作用域地址,具体做法可以是将服务器 1 配置成可使用大多数地址(约 80%),服务器 2 可以配置成让客户机使用其他地址(约 20%)。

2、如果在一个网络中存在多个子网,而多个子网的主机都需要DHCP服务器来提供地址配置信息,那么我们可以采用的方法是在每一个子网中安装一台 DHCP服务器,让它们来为各个子网分配IP地址,但从节约资源利用出发,我们一般情况下不这样做,可以采取在一个子网中安装DHCP服务器,让它来为多 个子网分配IP地址,实现多子网地址分配可以借助DHCP的中继代理功能实现,而作为中继代理的设备可以是一台提供中继代理程序的Windows2000 服务器或是一个符合RFC1542规定的路由器,具备 DHCP/ BOOTP Relay Agent 的功能(DHCP relay agent能够把 DHCP/BOOTP 广播信息从一个网段转播到另一个网段上)。以管理的局域网分为三个子网,用Win2000服务器连接。 下面是实现跨子网使用DHCP服务器的具体解决方案:

(1)安装DHCP中继代理程序:在Windows2000服务器的“路由和远程访问”窗口中,依次展开“本地服务器→IP路由选择→常规”选项, 右键点击“常规”选项,在弹出的菜单中选择“新增路由协议”,然后在“新路由协议”窗口中选择“DHCP中继代理程序”,接着点击“确定”按钮。

(2)指定DHCP服务器:右键点击刚刚添加的“DHCP中继代理程序”选项,在弹出菜单中选择“属性”,进入“DHCP中继代理程序属性”对话 框,在“常规”标签页的“服务器地址”栏中输入子网1中DHCP服务器的IP地址:192.168.1.2,然后点击“添加”按钮,最后点击“确定”按钮 关闭该对话框。

(3)配置访问接口:右键点击“DHCP中继代理程序”选项,在弹出菜单中选择“新增接口”,然后在“DHCP中继代理程序的新接口”对话框中的 “接口”列表框中选中可以访问子网1中的DHCP服务器的接口,这里新增的接口应该是接口二和接口三,接着点击“确定”按钮。然后在弹出的“DHCP中继 站属性”对话框中,选中“中继DHCP数据包”选项,这样就启用了它的中继功能,最后点击“确定”按钮。

(4)DHCP服务器中配置一个超级作用域,其中包含三个普通作用域,作用域地址范围可以分别设置为 192.168.1.10~192.168.1.254(分配给子网1的PC使用);192.168.2.10~192.168.2.254(分配给子网 2的PC使用);192.168.3.10~192.168.3.254(分配给子网3的PC使用),必须记住DHCP只能为每一个子网分配一个范围。 完成以上配置后,子网2和子网3中的DHCP客户机PC2及PC3就可以通过主机A的DHCP中继代理程序访问子网1中的DHCP服务器。

3、解决了单台DHCP服务器为多个子网分配IP地址后,我们还要搞清楚的一个问题是,如果某一个子网的PC如子网2中的PC2或子网3中的PC3 发出地址请求信息后,主机A可以作为中继代理对他们的请求传达子网1中的DHCP服务器,但该DHCP服务器如何可以确定并准确地将作用域 192.168.2.0网段的地址分给PC2而把作用域192.168.3.0网段的地址分给PC3呢?这个是多数学生可能存在的疑问,要搞清楚这个问 题,可以参考以下的原理分析来找答案:

以子网2中的主机PC2为例,DHCP 客户机PC2在子网2 上广播 DHCP/BOOTP discover 消息 (DHCPDISCOVER),广播是将消息以 UDP (User Datagram Protocol)数据包的形式通过 67 端口发出,当中继代理(relay agent)主机A接收到这个消息后,它检查包含在这个消息报头中的网关IP 地址,如果网关IP 地址为 0.0.0.0 ,则用 relay agent主机A的接口二的IP地址192.168.2.1替换它,然后将其转发到 DHCP 服务器所在的子网1上(主机A还担任路由器功能)。当在子网1中的 DHCP服务器收到这个消息后,它开始检查消息中的网关IP地址,然后判断该网关地址是否包含在DHCP的某一个作用域范围内,从而决定它是否可以使用相 应的作用域的地址来提供IP地址租约,当然,本例中DHCP服务器将会从作用域192.168.2.10~192.168.2.254选取一个地址来配置 PC2;也就是说DHCP客户机的请求地址消息中的网关IP地址 (GIADDR) 将是DHCP服务器用来确定从那个DHCP 范围中挑选IP地址来配置客户机的依据。

4、如果DHCP客户机无法找到DHCP服务器,则它从微软保留的 B 类网段 169.254.0.0 中挑选一个 IP 地址作为自己的 IP 地址,子网掩码为 255.255.0.0 ,所挑选的地址由DHCP客户机利用ARP 广播来 确定自己所挑选的 IP 地址是否已被网络上的其它设备使用,如果该 IP 地址已被使用,那么客户机会再挑选另一个IP地址重新进行测试,而且最多可以重试十个IP 地址,直到成功获取配置。在此之后,客户机会在后台继续每隔 5 分钟尝试与DHCP服务器进行通信,一旦与服务器取得联络,则客户机放弃自动设置的 IP 地址,而使用服务器分配的 IP 地址和其它配制信息。所以当你在某一天发现你的PC的IP地址是个B类的地址169.254.0.0/16网段的地址时,你就应该知道那是怎么一回事了 吧。

至此,我们分析了几个关于DHCP服务的应用方面的疑难问题,并且给出了相应的解决方案,对于DHCP服务在教学中我们还遇到许多一些其他问题,比 如说DHCP服务器本身的地址是否一定要由管理员静态指定,设置为自动获取将会有什么后果?为什么把客户机器向DHCP服务器请求地址称为地址租用,租用 时间的长短对网络中IP地址的管理与应用有哪些帮助?如何可以使用DHCP服务让一个自动获取IP的主机能在任何时候都能取得指定的一个固定地址?这些问 题都要求教师在教学当中要认真地去探究该服务的每一个细节的知识点,才可以对该知识点的原理以及在实际中的应用进行透彻的讲授,也是我们熟练掌握和使用 DHCP服务的前提。


第二部分
DHCP的工作流程分为四步:

一、客户机请求
 IPDHCPdiscover
二、服务器响应(
DHCPoffer
三、客户机选择
 IPDHCPrequest
四、服务器确认
 IP租约(DHCPack/DHCPnak

下面我们就来分别讲一下:

一、客户机请求
 IPDHCPdiscover
当客户机设置使用
 DHCP协议获取 IP时,客户机将使用 0.0.0.0作为源地址,使用255.255.255.255作为目标地址来广播请求 IP地址的信息。广播信息中包含 DHCP客户机的MAC地址和计算机名。(这里的 MAC地址可不是 FFFF.FFFF.FFFF MAC 广播哦~)

二、服务器响应(DHCPoffer
由于是广播所以同一网段内的计算机都会“听”到!
DHCP服务器当然也不例外。DHCP服务器“听”到后,它首先会针对该次请求的信息所携带的 MAC地址与 DHCP主机本身的设置值进行对比。如果 DHCP主机的设置中有针对该 MAC 提供的静态 IP(每次都给一个固定 IP),则提供给客户机相关的固定 IP与相关的网络参数;如果该信息的 MAC并不在 DHCP主机的设置中,则 DHCP主机会选取当前网段内没有使用的IP给客户机使用!当然这里的响应,服务器也是采用 255.255.255.255的广播,因为此时客户机还没 IP哦~
这里有几个要注意的地方:

1、如果同一网段内有多台 DHCP服务器,那么客户机是看谁先响应,谁先响应就选择谁。
2、在 DHCP主机发给客户端的信息中,会附带一个“租约期限”信息,用来告诉客户机这个 IP能用多久!

三、客户机选择 IPDHCPrequest
当客户机接收到响应的信息之后,首先会以
 ARP在网段内广播(ARP使用全 1的广播 MAC地址),以确定来自 DHCP服务器的 IP没被占用!如果该 IP被占用,那么客户机对于这次的DHCP信息将不接受,而是再次发送 DHCP请求。若该 IP没有被占用,客户机则接受 DHCP服务器所给的网络参数。同时,客户机发出一个广播,通知所挑选的 DHCP服务器(有多台DHCP服务器存在时),当然此时也是通知其它的 DHCP服务器,让这些 DHCP服务器将本预分配给客户机的 IP释放掉!(这里的概念一定要弄清楚!)注意,这一步客户机并还没有应用从 DHCP服务器获取到 IP哦!所以这一步源地址还是0.0.0.0,目标地址是 255.255.255.255

四、服务器确认 IP租约(DHCPack/DHCPnak
终于到最后一步了,
DHCP服务器收到客户机选择 IP的广播后,则以 DHCPack消息的形式向客户机广播成功的确认。DHCPack包含:IP、掩码、网关、DNS等。当然上面还有一个DHCPnak,一看就知道是不成功的意思!那么,哪些情况才会有这种广播呢?
例如,IP地址已无效或这个地址已被其它的客户机使用了!

此时,当客户机收到 DHCP服务器的 DHCPack消息后,客户机便使用了 DHCP服务器所给的网络参数!这里的四个步骤可都是用的广播哦,不知道大家有没有注意!呵呵~到此,我们的 DHCP原理就讲完了,下面我还给补充了点东东,希望对大家有用:

1、当我们的客户机无法找到 DHCP服务器时,它将从 TCP/IP B类网段 169.254.0.0中挑选一个 IP地址作为自己的 IP地址,而继续每隔 5分钟尝试与 DHCP服务器进行通信。(这里的这个 B类地址被称为 APIPA,即自动分配私有 IP地址!)

2IP租约的更新,当客户机重新启动或租期达 50%时,客户机不会从第一步(DHCPdiscover开始重新 IP,而是从第三步(DHCPrequest开始哦~有当租期达 87.5%时,它才从第一步(DHCPdiscover开始重新请!

3、客户机这里还有两条命令,希望大家给记住

ipconfig/release  是用来 IP租约的释放。使用 DHCPrelease消息!

ipconfig/renew  是用来 IP租约的更新。使用 DHCPdiscover消息!

4、客户机必须经过四步的情况:

(1)第一次扮演 DHCP客户机角色

(2)IP DHCP服务器收

(3)客户机自己释放了 IP,并重租一个 IP时。

(4)客户机更了。

(5)客户机转移一网段时。

完!

第三部分

DHCP客户端为了获取合法的动态IP地址,在不同阶段与服务器之间交互不同的信息,通常存在以下三种模式:
(1)        DHCP客户端首次登录网络
DHCP客户端首次登录网络时,主要通过四个阶段与DHCP服务器建立联系。
l              发现阶段,即DHCP客户端寻找DHCP服务器的阶段。客户端以广播方式发送DHCP_Discover报文,只有DHCP服务器才会进行响应。
l              提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCP_Discover报文后,从IP地址池中挑选一个尚未分配的IP地址分配给客户端,向该客户端发送包含出租IP地址和其它设置的DHCP_Offer报文。
l              选择阶段,即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发来DHCP_Offer报文,客户端只接受第一个收到的DHCP_Offer报文,然后以广播方式向各DHCP服务器回应DHCP_Request报文,该信息中包含向所选定的DHCP服务器请求IP地址的内容。
l              确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCP_Request报文后,便向客户端发送包含它所提供的IP地址和其它设置的DHCP_ACK确认报文。然后,DHCP客户端将其TCP/IP协议组件与MAC地址绑定。
l              除DHCP客户端选中的服务器外,其它DHCP服务器本次未分配出的IP地址仍可用于其他客户端的IP地址申请。
(2)        DHCP客户端再次登录网络
当DHCP客户端再次登录网络时,主要通过以下几个步骤与DHCP服务器建立联系。
l              DHCP客户端首次正确登录网络后,以后再登录网络时,只需要广播包含上次分配IP地址的DHCP_Request报文即可,不需要再次发送DHCP_Discover报文。
l              DHCP服务器收到DHCP_Request报文后,如果客户端申请的地址没有被分配,则返回DHCP_ACK确认报文,通知该DHCP客户端继续使用原来的IP地址。
l              如果此IP地址无法再分配给该DHCP客户端使用(例如已分配给其它客户端),DHCP服务器将返回DHCP_NAK报文。客户端收到后,重新发送DHCP_Discover报文请求新的IP地址。
(3)        DHCP客户端延长IP地址的租用有效期
DHCP服务器分配给客户端的动态IP地址通常有一定的租借期限,期满后服务器会收回该IP地址。如果DHCP客户端希望继续使用该地址,需要更新IP租约。
在实际使用中,DHCP客户端缺省在IP地址租约期限达到一半时,向DHCP服务器发送DHCP_Request报文,以完成IP租约的更新。如果此IP地址有效,则DHCP服务器回应DHCP_ACK报文,通知DHCP客户端已经获得新的租约。
交换机上实现的DHCP客户端支持上述租约自动更新过程。

###############################################################################################
DHCP于1993年10月成为标准协议,其前身是BOOTP协议。当前的DHCP定义可以在RFC 2131中找到,而基于IPv6的建议标准(DHCPv6)可以在RFC 3315中找到。

http://tools.ietf.org/html/rfc1541 目前已经被2131取代。
http://tools.ietf.org/html/rfc2131
http://tools.ietf.org/html/rfc3315
posted @ 2016-11-25 17:06  随风飘落的雨滴  阅读(6109)  评论(0编辑  收藏  举报