DHCP协议详解

 

定义:DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,主要作用是为局域网内的主机自动分配IP地址。DCHP工作在应用层,是BOOTP(Bootscrap Protocol)的一种扩展,使用UDP协议进行运输,UDP67UDP68端口分别作为DHCPServerDHCP Client的服务端口。DHCP协议内容在RFC2131中定义,而DHCP OptionsRFC2132中定义。


DHCP4次握手

测试方法:为了抓到DCHP工作过程的包,在cmd中使用ipconfig/release命令释放客户端ip地址,接着使用ipconfig/renew重新通过DHCP自动获得ip,使用wireshark抓到以下的包(如图1)。

wKioL1l9OJnSMwKzAAB9XT6WRr0980.png-wh_50

1DCHP抓包结果

 

结合上图可以知道DHCP4次握手内容如下:

1、客户端广播一个DHCPDiscover包,用来寻找DCHP服务器。

●源MAC: 固有MAC地址,源IP: 未分配,初始0.0.0.0

●目标MAC:FF-FF-FF-FF-FF-FF,目标IP: 255.255.255.255

2、服务器向发送Discover包的客户端MAC地址发送Offer,如图2(可能有多个DHCP服务器,但一般只处理最先收到的Offer)

●通过分析包数据,目标MAC为客户端MAC,目标IP为将分配给客户端的IP(由于此时客户端还没有获得IP,因此,虽然IP不匹配也不会丢弃)

Offer的内容中有将分配给客户端的IP,其中的Options提供了DHCP服务器IP、租约时长、子网掩码、路由IPDNS等内容。

3、客户端收到Offer后,广播一个Request租约请求,内容中Option包括客户端MACDHCP服务器IP、服务器提供的IP等内容。

●源MAC: 固有MAC地址,源IP: 仍然未分配,为0.0.0.0

●目标MAC: FF-FF-FF-FF-FF-FF,目标IP:255.255.255.255

4、DCHP服务器确认Request中的IP是否与发出的Offer相同,若相同,则向客户端发送DHCPACK确认信息,DHCPACK包与DHCPOFFER包的内容几乎完全一样,除了Option53DHCP Message Type。客户端收到DHCP ACK后,通过ARP广播检测租约中IP是否冲突,若无冲突,则使用该IP(RFC2131提到另一种冲突解决方案,DHCP服务器在发offer前,SHOULD ping一下租约IP,我的实验中没有抓到ICMP)

 

wKiom1l9OLHDC8niAAFdVvx6TVM945.png-wh_50

2DCHP Offer内容

 

对于以前接入过的客户端

若原IP可用

测试方法:将DHCP客户端网线插拔。

对于连接过的设备,设备记忆有以前分配过的ip,则无需前两步,只进行客户端请求租用原先ip和服务端确认租用这两步,如图3

若原IP被占用

测试方法:电脑使用DHCP获得IP后断开网线,将手机IP设为静态的电脑所获IP,然后插上网线,抓包结果如图4

若原IP被占用,虽然收到DHCP服务器ACK确认报文,但仍被客户端拒绝,重新进行4次握手的过程。这里是客户端拒绝租约而不是DHCP服务器拒绝,如图5所示,客户端收到DHCP ACK报文,会广播针对租约IPARP解析包,检测到IP已被占用后,会广播DHCP Decline报文拒绝该租约,并在至少10秒后重新Discover

wKiom1l9ONijZ3bsAAHIhxJkKCI765.png-wh_50

3:接入过的设备跳过DHCP握手前两步

wKioL1l9OOywPMnfAABqABKL6x4552.png-wh_50

4:客户端拒绝DHCP ACK

wKioL1l9OQKR9bMTAAC_qmkP1do581.png-wh_50

5:客户端Decline的过程

 

 

DHCP客户端释放IP

测试方法cmd中输入ipconfig/release,或者将客户端IPDHCP改为静态。

客户端会向服务器发送DHCP Release报文释放掉现有IP,如图6

wKiom1l9OR-g-ZePAAAZsT6hueg175.png-wh_50

6:客户端释放IP

 

wKiom1l9pg2jykdgAAD8ugfYRFk107.jpg-wh_50

1DHCP报文格式


DHCP Options Field

DHCP报文中的Options字段可以用来存放普通协议中没有定义的控制信息和参数。如果用户在DHCP服务器端配置了Options字段,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。Option的格式由TypeLengthValue三部分组成。类型的取值范围为1-255

 

Option 66

通过option 66字段携带TFTP serverip地址。从而使设备可以从TFTP server上下载配置文件,通过TFTP server实现自动配置。


wKioL1l9pl_AiNNNAADdrG1OsH0618.png-wh_50

6FRC2132中的关于Option 66的定义

 

这种自动配置是如何实现的呢?首先要给DHCP服务器设置Option 66选项,当一个新的设备接入网络,它会发送DHCPDISCOVER广播寻找DHCP服务器来获得IP,这时DHCP服务器的Offer报文利用Option 66给设备提供TFTP服务器的地址,设备通过访问TFTP服务器获得预设的配置。

Option 66的值可以是TFTP服务器域名或IP,需要注意的是Option66的值通常不作为Option 66出现在DHCP packet中,而是被移到DHCP包中的sname(服务器主机名)中,而且域名可能已经被解析成IP地址放于siaddr(服务器IP地址)中。Option 67指定了从Option 66提供的服务器下载的文件名,通常被放在file(文件名)中。

还需要注意的是Option 66字段的Value值使用ascii编码,举例:若TFTP服务器IP10.10.10.1,则翻译成16进制为31 30 2E 31 30 2E 31 30 2E 31