参考资料:
百度百科:https://baike.baidu.com/item/DHCP/218195?fr=aladdin
DHCP:Dynamic Host Configuration Protocol,动态主机配置协议。该协议是一种局域网网络协议。主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
1、DHCP报文结构如下:
DHCP封包在传输层( Transport Layer)是采用UDP协议,而当 Client传送给封包给 Server时,采用的是UDP 67 Port,从 Server传送给 Client则是使用UDP 68 Port。 [3]
DHCP的封包格式如右图所示,各字段定义如下
OP:
若是 client 送给 server 的封包,设为 1 ,反向为 2。
HTYPE:
硬件类别,Ethernet 为 1。
HLEN:
硬件地址长度, Ethernet 为 6。
HOPS:
若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。
TRANSACTION ID:
DHCP REQUEST 时产生的数值,以作 DHCPREPLY 时的依据。
SECONDS:
Client 端启动时间(秒)。
FLAGS:
从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,bit为0时标示server将以单播的方式传递封包给client,其余bit尚未使用。
ciaddr:
要是 client 端想继续使用之前取得之 IP 地址,则列于这里。
yiaddr:
从 server 送回 client 之 DHCP OFFER 与 DHCP ACK封包中,此栏填写分配给 client 的 IP 地址。
siaddr:
若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCP ACK、DHCP NACK封包中,此栏填写开机程序代码所在 server 的地址。
giaddr:
若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
chaddr:
Client 之硬件地址。
sname:
Server 之名称字符串,以 0x00 结尾。
file:
若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。
2、报文种类:
DHCP DISCOVER:由client端发起,目的是向server发起dhcp请求。
DHCP OFFER:由server端发起,目的是告诉client端“我能给你分配的ip是这个啊”。这个数据包中携带的信息有:我(server)的信息是谁,我能给你分配的ip是什么。
DHCP REQUEST:由client端发出,告诉提供ip地址分配的server端“我用你给我分配的ip”,这个数据包中需要携带信息表明:server端是谁,要用的ip地址是谁。
DHCP ACK:由server端发出,告诉client端“好的,就这么定了,你就用我给你分配的ip吧”。
3、抓包分析:
打开windows的cmd.exe,依次输入:
ipconfig –release
ipconfig –renew
利用wireshark软件抓取数据包,过滤协议dhcp。
3.1 DHCP Discover
我们在这里只分析应用层数据包。
Bootp flags:0表示单播,1表示广播,这里为1,即DHCP服务端回复的DHCP Offer报文应为单播形式。
部分书上讲述的DHCP四个包都是使用广播的方式进行,实际上DHCP Offer和DHCP Ack这两个数据包是广播还是单播是由DHCP的客户端发送的数据包来决定的。
因为如下信息此时对于client端来说都是未知的,所以填充的值如下:
Client IP address: 0.0.0.0
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
3.2 DHCP OFFER
DHCP服务器能够提供的ip地址为192.168.0.103,是通过广播的方法回复的啊。该数据包中携带了服务器的ip地址、router、子网掩码等信息。
3.3 DHCP Request
client通过广播的方式表明自己要用的ip地址信息(用哪个服务器提供的),如果有其他dhcp服务器收到了该广播包,则将其通过的ip地址再次放到可用的地址池中。
3.4 DHCP ACK
dhcp server搜到Request数据包后,判断出来是要用自己提供的ip,则给client端回复一个ack包,里面携带分配给client端的ip地址等一系列信息。
Dhcp Release/Dhcp inform/Dhcp NAck包等在这里就不进行分析了。