APP下载

DHCP服务深度解密

2017-11-22

网络安全和信息化 2017年4期
关键词:网卡IP地址报文

实验环境如下:客户端计算机名:LSH-PC。客户端硬件地址:00:23:5A:A6:97:4C。接入交换机:RGS3760E-24。

配置VLAN10(网关:192.168.10.252 ;DHCP地址池192.168.1 0.1-192.168.10.100)。

配置VLAN100(网关:192.168.100.1;DHCP地址池192.168.100.1-192.168.100.100)。

曾在文献上对DHCP服务过程有详细描述,形成的共识是四个过程,客户端两个广播包,服务端两个单播包。但这种描述并不完整。下面笔者将从不同的环境来深度剖析下DHCP服务详细过程。

图1 约租过程图示

图2 数据包解析

1.客户端初次接入网络VLAN10(192.168.10.252)(客户端之前还未接入任何网络获取过IP)

客户端从服务器获取IP的六个租约过程,如图1所示。限于篇幅,如图2所示的数据包都隐藏了相同的数据包,共保留了6种数据包,解析如下:

(1)客户端发出发现报文:客户端初始化TCP/IP,通过UDP端口67向网络中发送一个DHCP发现广播包,请求租用IP地址。

该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户端的MAC地址和计算机名。

(2)DHCP回应提供报文:任何接收到DHCP发现广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户端回应一个DHCP提供单播包以及提供一个IP地址。

该广播包的源IP地址为192.168.10.252,目 标IP地 址为192.168.10.1; 包 中还包含提供的IP地址(192.168.10.1)、子网掩码及租期等信息。

注意:这个地方很多资料显示目标IP是255.255.255.255的广播地址。其实这个提供报文里已经知道了客户端的MAC地址,是通过二层转发的,目标IP地址填为192.168.10.1是为了避免大量的广播包在网上转发。

通过查询微软的RFC中关于DHCP的文档也证实了这一点。提供报文的目标IP是广播还是单播是由客户端的发现报文的FLAGS标志位来确定的,将RFC的英文文档翻译过来如下:

一个服务器或中继代理发送或转发DHCP消息直接为DHCP客户端(即不在指定的中继代理“giaddr”字段)应审查标志的广播比特位即FLAGS标志位最高位。如果该位被设置为1,DHCP消息应该发送使用IP广播地址的IP广播(最好0xffffffff)作为IP目的地址,链路层广播地址作为链路层目标地址。如果广播位设置为0,该消息应作为IP单播发送到IP地址。

通过实验也可证明这一点:在交换机上停掉所有DHCP服务,然后抓包发现客户端默认发送发现数据包的FLAGS标志位是0X0000(即0000 0000 0000 0000)最高位置0,表示要求DHCP回应的提供数据包是单播。

如果没有收到回应后才是发送广播发现数据包,即0X8000(1000 0000 0000 0000)最高位置1(如图3所示)。这样DHCP服务器都会响应第一个默认要求单播的数据包。

图3 抓包发现客户端发送数据包

图4 客户端配置成功后发出报文

(3)客户端发送请求IP租用报文:客户端从DHCP服务器接收到提供之后,会选择第一个收到的DHCP提供包,并向网络中广播一个DHCP(请求)消息包,表明自己已接受了一个DHCP服务器提供的IP地址。

该广播包中包含所接受的IP地址和服务器的IP地址。所有其他的DHCP服务器撤消它们的提供,以便将IP地址提供给下一次IP租用请求。

(4)DHCP服 务 器 发 出IP租用确认报文:被客户端选择的DHCP服务器在收到DHCP(请求)广播后,会单播返回给客户端一个DHCP(确认)消息包,表明已接受客户端的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该单播包发给客户端。

(5)客户端配置成功后发出的消息(公告)报文:客户端在收到DHCP(确认)包,会发送一个免费ARP数据包来检测本网段内该IP是否有冲突。

如果发现有客户端在使用就会重新重复以上过程。如果没有冲突就会使用该广播包中的信息来配置自己的TCP/IP,并向本网段广播自己的配置信息。

如图4所示,根据绝对时间就可以判断客户端是在收到DHCP服务器发出IP租用确认报文后进行IP地址冲突检测的。

(6)DHCP服务器再次回应确认包:DHCP服务器在收到DHCP(消息)广播后表示IP可正式使用,则租用过程完成,客户端可以在网络中通信。

2.重新接入网络VLAN10(192.168.10.252)

上面提到的都是在客端第一次接入网络VLAN10(192.168.10.252)获取IP的完整过程。当计算机重新启动第二次接入网络时报文如图5所示。

(1)客户端直接发送请求包:客户端重新启动时,如果租用期未超过50%,就会跳过前两步,并以第一次曾经获得的 IP(192.168.10.1)去向DHCP服务器进行广播请求继续使用。

(2)服务器回应确认数据包:服务器收到客户端请求包后,会查看其IP登记表(如图6所示),发现有分配过的记录,如果该IP地址仍然可用的话,该DHCP服务器将给这台客户端返回一个确认消息。同样,DHCP服务器上也会保留(在租用期内的)客户端的地址。

如果你的DHCP服务器中租用期设得足够长,则重启一台客户端后,客户端总是得到同一个地址。这正是由于客户端和服务器能保存已分配地址所造成的。

(3)客户配置成功后发出的消息(公告)报文:这个与上面的第5个数据包一样,在公告之前同样会发送一个免费ARP来检测IP是否有冲突。

(4)DHCP服务器再次回应确认包:DHCP服务器在收到DHCP(消息)广播后表示IP可正式使用,则租用过程完成,客户端可以在网络中通信。

图5 第二次接入网络的报文

图6 IP登记表

图7 获取的IP数据包

3.更换网卡后接入网络VLAN10(192.168.10.252)

当系统更换网卡后(这里更改客户端LSH-PC的MAC(000000000001)即可),得到以下获取IP的数据包(如图7所示)。

从以上过程可以知道,客户端仍然会用曾经获取过的IP(192.168.10.1)去广播一个请求数据包(除非把网卡删掉重装这个IP就会清除了),这个时候DHCP服务器收到请求包后检查自己的IP分配记录,没有找到对应的MAC(000000000001)记录,就广播一个未确认包。

注意:这里不是单播包,因为DHCP服务器不确认客户端是否希望从自己获取IP了。

当客户端没有收到确认包,就会重复当第一次接入网络时的过程去获取IP(192.168.10.2)。然后在DHCP服务器里就有了2条IP分配记录了。

4.客户端初次接入另外一个网络VLAN100(192.168.100.1)

当客户端接入另外一个网络时,但这时已经在VLAN10中获取过IP了,那么实质跟更换网卡有点类似。只不过是客户端用曾经获取过的 IP(192.168.10.1)去广播一个请求数据包,但在VLAN100的DHCP地址分配池中没有找到对应记录。所以客户端就会重复第一次接入网络的过程获取192.168.100.2的IP。这时在DHCP服务器里就有了3条IP分配记录。

猜你喜欢

网卡IP地址报文
基于J1939 协议多包报文的时序研究及应用
CTCS-2级报文数据管理需求分析和实现
部署Linux虚拟机出现的网络故障
铁路远动系统几种组网方式IP地址的申请和设置
浅析反驳类报文要点
Server 2016网卡组合模式
IP地址切换器(IPCFG)
基于SNMP的IP地址管理系统开发与应用
公安网络中IP地址智能管理的研究与思考
ATS与列车通信报文分析