2. DHCP消息格式,如表 2-3。
表 2-3 DHCP消息格式 op(1) htype(1) xid(4) secs(2) ciaddr(4) yiaddr(4) siaddr(4) giaddr(4) chaddr(16个字节) sname(64个字节) file(128个字节) options(可变长variable) flags(2) hlen(1) hops(1) op字段:operator,表示当前报文是客户端的请求还是服务器的应答, 为1(1=BOOTREQUEST)时表示是客户端的请求, 为2(2=BOOTREPLY)时表示是服务器的应答。
htype字段:hardware type,表示客户端的网络硬件地址类型,如htype为1,表示客户端的网络硬件地址是10MB的以太网类型。
hlen字段:hardware length,表示客户端的网络硬件地址长度,通常对于以太网来说,硬件地址长度为6字节。
hops字段: 表示当前的DHCP报文经过的DHCP中继的数目,客户端或服务器发出DHCP报文时, 此字段都初始化为0,每经过一个DHCP中继,此字段就会加1,此字段的作用是限制DHCP报文不要经过太多的DHCP中继,协议规定,当hops大于4 (现在也有规定为16) 时,这个DHCP报文就不能再进行处理, 而是丢弃。
xid字段:Transaction ID,事务ID,客户端每次发送DHCP请求报文时选择的随机数, 与服务器之间同步消息和消息的响应,用它来匹配服务器的相应报文。客户端会丢弃xid不匹配的相应的报文。
secs字段:由客户端指定的时间,指的是开始地址获取和更新进行后的时间数,此字段一般没有多大意义,最初设计此字段是为了让DHCP服务器在繁忙时,优先处理此字段大的DHCP请求(因为此字段越大说明这个客户端等待的时间就越长)。
flags字段:在BOOTP中此字段是保留不用的,在DHCP协议中也只使用了其左边的最高位,其格式如表 2-4。
表 2-4 flags字段
0 15 B 必须为0 flags字段整个字段占16比特位,其中,最左边比特位被解释为广播响应标志位,所有其它比特位保留备用,必须被客户端设置为0,服务器和DHCP中继忽略这些比特位。当客户端不能接收单播的DHCP响应报文时,必须把广播响应标志位置为1,否则置为0。而DHCP服务器响应报文是广播还是单播,就将根据此广播响应标志位来判断。
ciaddr字段:client ip address,表示客户端自己的IP地址。可以是服务器分配给客户端的IP地址,也可以是客户端已有的IP地址。此字段不为0的原则就是客户端能够使用此IP地址接收报文。DHCP服务器发现此字段不为0时,可以直接将响应报文单播给客户端。
yiaddr字段:your ip address,表示服务器分配给客户端的IP地址。当DHCP服务器响应客户端的DHCP请求时,将把分配给客户端的IP地址填入此字段。
siaddr字段:server ip address,表示客户端获取启动配置信息的服务器IP地址,一般是TFTP服务器的IP地址。
giaddr字段:gateway ip address,记录第一个DHCP中继代理的IP地址。当客户端发出DHCP请求报文后,如果网络中存在DHCP中继,则第一个DHCP中继转发整个DHCP请求报文后,就会把自己的IP地址填入此字段(随后的DHCP中继将不再改写此字段,只是把hops加1)。DHCP服务器将会根据此字段为用户分配IP地址,并把响应报文转发给此DHCP中继代理,由DHCP中继代理再转发给客户端。
chaddr字段: client hardware address,记录客户端的实际硬件地址内容。当客户端发出DHCP请求报文时,将把自己的网卡硬件地址填入此字段,DHCP服务器一般都会使用此字段来唯一标识一个客户端。而且此字段与前面的htype hlen字段必须一致。如当htype hlen分别为l和6时,此字段必须填入6字节的以太网MAC地址。
sname字段:server name,记录客户端获取启动配置信息的服务器名字。此字段由DHCP服务器填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。
file字段:file name,记录客户端的启动配置文件名。此字段由DHCP服务器填写,而且是可选的,如果填写,必须是一个以0结尾的字符串。
options字段:是可变长选项字段,对于BOOTP协议,此字段为64字节协议,对于DHCP协议,此字段为64-312字节,当客户端需要更长时,可以与DHC服务器协商。此字段中包含了大量可选的终端初始配置信息和网络配置信息,如决定终端的IP特性配置信息,域名信息,标识终端的特殊信息,终端的默认网关IP地址,DNS服务器的IP地址,WINS服务器的IP地址,用户使用IP的有效租期等消息。正是因为有了此字段,DHCP协议才能够给客户端提供大量的配置信息。
3. DHCP报文类型
DHCP报文分为请求报文和应答报文共8种,其中请求报文分别是DHCPDISCOVER、DHCPREQUEST、DHCPNAK、DHCPDCLINE、DHCPRELEASE和DHCPINFORM应答报文是DHCPOFFER和DHCPDACK。
消息类型及对应的功能如表 2-5所示。
表 2-5 DHCP消息和功能说明
类型字段 1 2 DHCP报文类型 DHCPDISCOVER DHCPOFFER 功能 客户端进行广播以确定本地可用的服务器。 服务器应答客户端的DHCPDISCOVER消息。 3 DHCPREQUEST 客户端发给服务器的消息,作用有三个:从一台服务器请求提供的配置参数(此时客户端也就拒绝了其他服务器提供的参数);系统重新启动后, 客户端利用这个消息确认先前分配的网络地址是否仍然有效;为一个特定的网络地址延长租约。 4 DHCPDACK 服务器发给客户端的配置参数,包括已提交的网络地址。 5 DHCPNAK 服务器发给客户端的消息,告知客户端当前使用的网络地址无效或者租期已满。 6 DHCPDCLINE 客户端发给服务器的消息,告知服务器此网络地址已经被使用。 7 DHCPRELEASE 客户端发给服务器的消息,告知服务器客户端不再使用此地址,取消剩余租约。 8 DHCPINFORM 客户端发给服务器的消息,仅要求本地配置参数,客户端已经配置好了网络地址,不需要再发送网络地址了。 2.2 DHCP工作原理及过程 2.2.1 DHCP客户端状态
DHCP客户端有九种状态,分别是:HALT,INIT,SELECTING,
REQUESTING,BOUND,RENEWING,REBINDING,INIT-REBOOT,在DHCP系统的实现中可以根据实际需要进行裁减,不必实现全部的状态。其中,HALT是还未初始化的停止状态;INIT是初始化完成即将执行DHCP协议的状态;
SELECTING是选择服务器提供的offer的状态;REQUESTING是客户端向服务器请求分配IP地址和相关配置信息的状态;BOUND是客户端根据服务器提供的配置参数配置完成的状态;RENEWING是客户端续约的状态;REBINDING是客户端重绑定的状态;INIT-REBOOT是客户端重启前的初始化状态;REBOOTING客户端重启的状态。
2.2.2 DHCP客户端地址首次申请
DHCP Server Selected DHCP客户端接入网络时,会进行首次地址申请[3]。申请过程如图 2-1所示。 客户端 Client DHCP Server No Selected 客户机接入网络 Begin initialization 广播发现报文阶段 DHCPDISCOVER 决定配置 先传回应答报文 DHCPOFFER 客户端收集应答 Collects replies 后传回应答报文 DHCPOFFER 客户选择配置 Selects configuration 广播请求报文阶DHCPREQUEST 提交配置 传回应答报文 DHCPACK 初始化完成 Initialization complete 广播请求报文阶DHCPREQUEST 广播发现报文阶段 DHCPDISCOVER 决定配置
图 2-1 客户端首次地址申请
DHCP客户端首次地址申请可以分为四个阶段[4]: 发现阶段,提供阶段,选择阶段,确认阶段,各过程中DHCP服务器和客户端的交互如下: 1. 发现阶段
客户端寻找服务器的阶段。客户端接入网络时,处于初始化状态,客户端并不知道服务器的IP地址,它会向网络发出一个DHCPDISCOVER报文来寻找DHCP服务器。由于客户端本身没有IP地址,也不知道DHCP服务器的IP地址,因而以0. 0. 0. 0作为源地址,255. 255. 255. 255为目标地址发送IP地址租用请求,向网络进行广播DHCPDISCOVER报文,其中DHCPDISCOVER报文包含客户端的MAC(Media Access Control,媒体访问控制,通称网卡硬件地址)地址和计算机名称,以便让DHCP服务器知道是谁在发送。这一过程也被称为IP租约请求(IP Lease Request),即客户端向未知的DHCP服务器请求一个IP地址。发现阶段客户端的处理过程如下图 2-2所示:
接口初始化 DHCP Client初始化 超时重发 DHCPDISCOVER 图 2-2 发现阶段客户端的处理
接口激活DHCP 等待回应的 DHCPOFFER 延时发送 DHCPDISCOVER 2. 提供阶段
服务器向客户端提供网络配置参数的阶段。这个阶段在网络中接收到客户端DISCOVER报文的DHCP服务器就会做出响应,提供可用的IP租用地址。如果DHCP地址池中有足够的IP地址, 并且能够确认该IP地址对于该客户端所在的网络是一个合法的地址,那么这个DHCP服务器就会对这个请求回复一个DHCPOFFER消息,其中包含了该客户端的MAC地址,提供的IP地址,子网掩码,租期和提供该DHCP服务的服务器(Offering DHCP Server)的地址。这一个过程也被称为提供IP租约(IP Lease Offer),此时客户端还不能使用该IP地址。提供阶段服务器的处理如图 2-3所示