DHCP协议
- DHCP协议概念。
DHCP(动态主机配置协议),是一个局域网的网络协议,主要是给内部网络或者网络提供商自动分配IP地址。DHCP是应用层协议,能够让设备自动获取IP地址,以及其他网络资源(比如DNS,网关配置等等),DHCP在网络配置中相当重要,当一个网络规模较大的时候,使用DHCP可以极大的减轻网络管理员的工作量,对于移动设备因为所使用的环境会经常改变,它所处的网络IP地址也会相应的改变,如果用手动更改IP地址,这样会非常麻烦,这时就可以使用DHCP来减轻负担。以下是DHCP工作流程。
从上图可以看到在使用DHCP的时候,首先在网络上需要有一台DHCP服务器,而其他的PC就是DHCP的客户端,整个DHCP的工作分为4个阶段:DISCOVER发现阶段,OFFER提供阶段,REQUEST请求阶段,ACK确认阶段。
DISCOVER发现阶段:DHCP客户端请求地址的时候,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内发送广播请求数据包,这个数据包就是DISCOVER数据包,目的是发现网络中的DHCP服务器,所有收到DHCP服务器在收到DISCOVER数据包都会发送响应数据包,客户端就可以知道网络中存在的DHCP服务器的位置了。
OFFER提供阶段:当DHCP服务器在收到DISCOVER数据包后,就会在所配置的地址池中寻找一个合适的IP地址,加上响应的租约期限和其他的配置信息(比如DNS,网关等等),这样就可以构造一个OFFER数据包发送给客户端,告知客户端本服务器可以为它提供IP地址。
REQUEST请求阶段:客户端有可能会收到很多的OFFER,所以需要从中选择一个。一般来说客户端会选择第一个收到的OFFER数据包服务器,并回一个广播REQUEST数据包,以告诉所有服务器自己已经做出了选择,当DHCP客户端成功的获取了IP地址后,在地址使用租期使用过去一半以后,会向DHCP服务器发送单播REQUEST数据包,用以延续租期。如果没有收到DHCP服务器ACK数据包,在租期过去四分之三之后,向网络中发送广播REQUEST数据包来延续租期。
ACK确认阶段:DHCP服务器收到REQUEST数据包之后呢,根据REQUEST数据包里面所携带的用户MAC地址,来查找有没有相应的租约记录,如果有就发送ACK数据包作为回应,通知用户可以使用所分配的IP地址。
2.使用wireshark捕获DHCP数据包。
打开wireshark,因为DHCP是使用UDP协议来工作的,所以我们在wireshark捕获筛选中设置捕获UDP协议数据包。
由于DHCP只有当主机的IP地址过期,或者是重新启动主机,才会重新请求IP地址。否则是不会产生DHCP数据包的,所以这里我们就使用重启网卡的方法,来捕获DHCP数据包。
打开命令提示符,输入ipconfig /release断开网络连接,然后输入ipconfig /renew请求网络连接。
Ipconfig /release。
Ipconfig /renew。
当这些操作做完,网络重新连接好后,点击停止捕获。使用筛选器筛选我们想要的数据包,在筛选器中输入DHCP,然后筛选出DHCP数据包,选择然后另存为文件。
打开另外保存的文件名为DHCP的数据包,在这里可以看到有DHCP的释放,发现,提供,请求,确认这几个阶段的数据包(红色方框部分),后面的DHCP是重新捕获的DHCP数据包,直接忽略。
在这里输入ipconfig /release后会出现一个DHCP Release的释放数据包。
打开包号为2的DISCOVER数据包,发现这个数据包时由0.0.0.0的客户端68号端口发送到255.255.255.255的67号端口,客户端使用0.0.0.0是因为客户端还没有IP地址,而数据包被发往255.255.255.255这个地址,是因为这个地址是独立于网络的广播地址,能够确保这个数据包能被发送到网络中所有设备上,因为客户端并不知道DHCP服务器的地址,这样就能找到正在监听的DHCP服务器。
这里可以看到DHCP是基于UDP作为其传输协议,因为DHCP客户端对请求响应速度有很高的要求,而DHCP有其内置的保证可靠性的方法,所以UDP是最适合的协议。
打开DHCP协议。
可以发现这是一个请求的数据包,因为在消息类型中被标记为1。在这里我们需要关注的是option的信息。
这其中就有这个数据包的类型,客户端标志符(提供了客户端请求IP地址的额外信息),Host Name表明客户端的主机名,供应商标识符,请求参数列表(这里列出了客户端希望从DHCP服务器获得的其他重要项,比如网关,子网,DNS等等)。
现在来看OFFER提供阶段数据包。
从这里可以看到这个文件是服务器发向客户端的一个OFFER数据包。虽然在上面可以看到目标地址也就是我们的客户端地址是192.168.18.33,但是其实客户端并没有这个地址,所以服务器将会是用ARP所提供的硬件地址与之通信。这个数据包时一个响应数据包,从前面数据包和这个数据包里面的Transaction ID相同就可以看出来。
提供数据包,由DHCP服务器发出用于向客户端提供服务,它提供了自己的相关信息和给客户端的IP地址。
在这里可以看到服务器提供给主机的IP地址为192.168.18.33。
在下面OPTION选项中可以看到这个数据包时一个OFFER数据包。下面还需要关注的就是DHCP服务器的IP地址。
分配给主机的IP地址的租约时间。
子网掩码。
路由器的IP地址(在这里可以看出来这个网络时做了路由器或者是带路由的三层交换机的DHCP)
下面我们在来看请求数据包。
可以从这里直观的看到这个数据包时通过广播发送并且发送类容包括了客户端的MAC地址。这个时候客户端已经发现了DHCP服务器的存在,所以这里是一求的数据包。
这个数据包与前面发现数据包很相识,IP地址都是0。
从这里我们可以结合前面对REQUEST阶段的描述,可以发现这里客户端发送广播告诉网络中的服务器,我做出了选择,这个选择就是192.168.18.1的这台DHCP服务器。
这个过程的最后阶段也就是我们前面提到过的确认阶段。
这个阶段包含有给客户端发送所请求的IP地址,当客户端获取了这个IP地址后也就可以在网络中使用这个IP地址进行通信了。同时在发送这个IP地址后,也会给客户端订立一个租约时间,前面我们也看到,这个租约是4小时,当4小时时间结束或者没有结束的时候发起DHCP简化版的通信过程,这个过程也叫租约内的续租,发起的通信也只需要经过请求和确认二个步骤就可以了。