目录
一、DHCP协议概述
DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP
服务器
的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如下图。
-
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地址并重新分配。
在
使用租期超过50%
时刻处,DHCP Client会以单播形式向DHCP Server发送
DHCPRequest
报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
在
使用租期超过87.5%
时刻处,DHCP Client会以广播形式向DHCP Server发送
DHCPRequest
报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCP OFFER数据包,然后可能接受任何一个DHCP OFFER数据包,但客户端通常只接受收到的第一个DHCP OFFER数据包。另外,DHCP服务器DHCP OFFER中指定[1]
的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
正式请求DHCP服务器分配地址DHCP REQUEST采用广播包,是为了让其它所有发送DHCP OFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCP NAK消息给DHCP客户 端,让客户端重新发起地址请求过程。
二、dhcp数据帧格式
0 8 16 24 31
OP(1) |
HTYPE(1) |
HLEN(1) |
HOPS(跳数)(1) |
事务ID(4)[Transaction ID] |
|||
秒数(2)[Second] |
标志(2)[Flag] |
||
|
|||
你的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:厂商标识,可选的参数字段
DHCP Options
Option id |
Length(字节) |
描述 |
1 |
4 |
Subnet Mask |
3 |
n*4 |
Router(网关) |
6 |
n*4 |
DNS Server |
7 |
n*4 |
Log Server |
26 |
2 |
Interface MTU |
33 |
n*8 |
Static route |
35 |
4 |
ARP cache timeout |
42 |
n*4 |
NTP servers |
51 |
4 |
IP address lease time |
53 |
1 |
Message type 1-DHCPDISCOVER 2-DHCPOFFER 3-DHCPREQUEST 4-DHCPDECLINE 5-DHCPACK 6-DHCPNAK 7-DHCPRELEASE 8-DHCPINFORM |
54 |
4 |
DHCP Server Identifier |
60 |
n |
华为自定义:可配置该终端设备在发起DHCP请求时,通过Option 60携带域信息。ME60收到DHCP报文时,可根据Option 60中携带的域信息来分配IP地址。 |
82 |
n |
华为自定义:ME60作为DHCP Relay,在中继用户DHCP报文时,可在Option 82中填写用户的物理位置信息,通知DHCP服务器按物理位置信息对为用户分配IP地址。 |
三、dhcp数据抓包
(1)DHCP discover阶段:
(2)DHCP offer阶段:
(3)DHCP request阶段:
(4)DHCP ack阶段:
四、总结:
阶段 |
源MAC |
目标MAC |
源IP |
目标IP |
Discover |
PC机的MAC |
全FF |
0.0.0.0 |
255.255.255.255 |
Offer |
Dhcp服务器或者 |
Dhcp客户机的MAC |
Dhcp服务器或者 |
准备分配的IP地址 |
Request |
PC机的MAC |
全FF |
0.0.0.0 |
255.255.255.255 |
Ack |
Dhcp服务器或者中继器路由的MAC |
Dhcp客户机的MAC |
Dhcp服务器或者中继路由器的IP地址 |
准备分配的IP地址 |
DHCPTransaction ID
是由客户机产生一个随机数获得,不同MAC地址产生的Transaction ID不同,Transaction ID是区分不同DHCP请求的标识。