1 DHCP简介

 

DHCP(Dynamic Host Configuration
Protocol,动态主机配置协议)使用UDP协议工作,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6
Client,而不用于DHCPv4,是为DHCP
failover服务。DHCP客户端向DHCP服务器发送的报文称之为DHCP请求报文,而DHCP服务器向DHCP客户端发送的报文称之为DHCP应答报文。DHCP采用C/S(客户端/服务器)模式,可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等,并能够提升地址的使用率。

 

 

 

 

 

2 DHCP 报文

 

2.1 DHCP协议中的报文

 

DHCP一共有8种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP
Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:

 


DHCP报文类型

说明


DHCP Discover

(广播)


DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。


DHCP Offer

(广播,单播)


DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。


DHCP Request

(广播,单播)


DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送单播的Request请求报文以请求续延租约。


DHCP ACK

(广播,单播)


DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。


DHCP NAK

(广播,单播)


如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。


DHCP Release

(单播)


当DHCP客户端不再需要使用分配IP地址时,就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。


DHCP Decline

(单播)


DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。


DHCP Inform

(单播)


DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。

 

 

 

 

 

2.2 DHCP报文格式

 

DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式。下面是各字段的说明。

 



 

(1) OP

报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。请求报文:DHCP
Discover、DHCP Request、DHCP Release、DHCP Inform和DHCP Decline。应答报文:DHCP
Offer、DHCP ACK和DHCP NAK。

 

(2) Htype

DHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型,Htype值为1时表示为最常见的以太网MAC地址类型。

 

(3) Hlen

DHCP客户端的MAC地址长度。以太网MAC地址长度为6个字节,即以太网时Hlen值为6。

 

(4) Hops


DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。(若数据包需经过router传送,每站加1,若在同一网内,为0。)

 

(5) Xid

客户端通过DHCP
Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。

 

(6) Secs


DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。(DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)

 

(7) Flags


标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。(即从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。)

 

【注意】在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP
Request报文,以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP
NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。

 

(8) Ciaddr


DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。

 

(9) Yiaddr

DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。

 

(10) Siaddr

下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP
ACK报文中显示,其他报文中显示为0。(用于bootstrap过程中的IP地址)

 

(11) Giaddr

DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继,则显示为0。(转发代理(网关)IP地址)

 

(12) Chaddr

DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。

 

(13) Sname

为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。

 

(14) File

DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。

 

(15) Options:可选项字段,长度可变,格式为"代码+长度+数据"。列出部分可选的选项:

 

 


代码

长度(字节)

说明


1

4

子网掩码


3

长度可变,必须是4个字节的倍数。

默认网关(可以是一个路由器IP地址列表)


6

长度可变,必须是4个字节的整数倍。

DNS服务器(可以是一个DNS服务器IP地址列表)


15

长度可变

域名称(主DNS服务器名称)


44

长度可变,必须是4个字节的整数倍。

WINS服务器(可以是一个WINS服务器IP列表)


51

4

有效租约期(以秒为单位)


53

1

报文类型

1: DHCP Discover

2: DHCP Offer

3: DHCP Request

4: DHCP Decline

5: DHCP ACK

6: DHCP NAK

7: DHCP Release

8: DHCP Inform


58

4

续约时间

 

 

 

3 DHCP工作流程

 

 

 



 

 

3.1 DHCP 租约

 

 



 

 

(1) DHCP Client发现阶段

 

DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送 DHCP
discover发现信息来寻找DHCP服务器,源地址为0.0.0.0目的地址为255.255.255.255。网络上每一台安装了TCP/IP协议的主机
都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

 

 



 

 

(2) DHCP Server提供阶段

 

DHCP服务器提供IP地址的阶段。在网络中接收到DHCP
discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的
IP地址和其他设置的DHCP offer信息。



 

 

(3) DHCP Client选择阶段

 

DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP
offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP
request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

 

 



 

 

(4) DHCP Server确认阶段

 

DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP
request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP
ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定。

另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回之前为其提供的IP地址。

 



 

 

 

3.2 DHCP Client重新登录

 

以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP
request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP
ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给
DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP
discover发现信息来请求新的IP地址。

 

 

 

(1) 客户端重新登录

 

 



 

(2) 如果客户端DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复DHCP ACK继续使用IP。

 

 



 

(3) 如果客户端DHCP request 内的IP地址在服务器端已被使用,DHCP服务器回复DHCP NACK告诉客户端IP已被使用。

 

 



 

(4) 客户端重新开始DHCP流程。

 

 



 

 

 

 

3.3 DHCP Client更新租约

 

DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户
机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的
信息。1/2第一次续约失败,7/8进行第二次续约。

 

 



 

 

 

 

 

 

4 实际抓包分析

 

(1) DHCP discover阶段



 

 

 

(2) DHCP offer阶段



 

 

 

(3) DHCP request阶段



 

 

 

(4) DHCP ack阶段

 



 

 

 

 

 

 

 

 

 

 

 

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信