-
DHCP Client以广播的方式发出DHCP Discover报文。
-
所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
-
DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
-
DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
-
DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
-
DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
0 8 16 24 31
OP(1) | HTYPE(1) | HLEN(1) | HOPS(跳数)(1) |
事务ID(4)[Transaction ID] | |||
秒数(2)[Second] | 标志(2)[Flag] | ||
客户机IP地址(4)[Ciaddr] | |||
你的IP地址(4)[Yiaddr] | |||
服务器IP地址(4)[Siaddr] | |||
中继代理IP地址(4)[Giaddr] | |||
客户机硬件地址(16字节)[Chaddr] | |||
服务器的主机名(64字节)[Sname] | |||
启动文件名(128字节)[File] | |||
选项(可变长)[Options] |
OP:若是client送给server的封包,设置为1,反方向为2
Htype:硬件类别,ethernet 为1
Hlen:硬件长度,ethernet为6
Hops:若数据包需经过router发送,每站加1,若在同一网内,为0
Transaction ID:事务ID 是个随机数,用于客户和服务器之间匹配请求和相应信息
Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间
Flags:从0—15bits,最左一bit为1时表示server将以广播方式传递封包给client,其余尚未使用
Ciaddr:用户IP地址
Siaddr:用于bootsrtap过程中的IP地址(服务器的IP地址)
Chaddr:client的硬件地址
Sname:可选server的名称,以0x00结尾
File:启动文件名
Options:厂商标识,可选的参数字段
1. 抓包分析:
(1)DHCP discover阶段:
(2)DHCP offer阶段:
(3)DHCP request阶段:
(4)DHCP ack阶段:
2. 总结:
阶段 | 源MAC | 目标MAC | 源IP | 目标IP |
Discover | PC机的MAC | 全FF | 0.0.0.0 | 255.255.255.255 |
Offer | Dhcp服务器或者中继器路由的MAC | Dhcp客户机的MAC | Dhcp服务器或者中继路由器的IP地址 | 准备分配的IP地址 |
Request | PC机的MAC | 全FF | 0.0.0.0 | 255.255.255.255 |
Ack | Dhcp服务器或者中继器路由的MAC | Dhcp客户机的MAC | Dhcp服务器或者中继路由器的IP地址 | 准备分配的IP地址 |
3.DHCPTransaction ID是由客户机产生一个随机数获得,不同MAC地址产生的Transaction ID不同,Transaction ID是区分不同DHCP请求的标识