DHCP协议
学习起因
由于面试问到DHCP,然后一脸懵逼了, 还向面试官确认了下说的是啥?然后面试官直接写了出来,还是不知道...... 下来后决心好好看看除了http和tcp以外的协议,这几天的面试下来觉得自己确实基础不扎实,希望自己不要太急,慢慢来。
DHCP
定义
DHCP(Dyncamic Host Configuration Protrocl),动态主机配置协议,属于应用层的协议。如果客户端机器的IP地址设置为动态获取方式,DHCP服务器会根据DHCP协议向客户端主机分配一个IP地址,客户端主机就可以使用这个IP地址上网。DHCP的前身是BOOTP,作用也是向客户端动态分配IP地址,但是BOOTP的功能没有DHCP复杂和强大。
注意
如果客户端主机此时已经有IP地址时,如果要获得DHCP分配的IP地址时,需要先使用命令 ipconfig /release 释放当前的ip地址,并将获取ip地址的方式改为自动获取。
具体流程
DHCP实现的具体流程可以分为4步:
第一步:客户端在局域网内发出一个DHCP DISCOVER包,用来让DHCP服务器发现客户端。
第二步:DHCP在局域网中接收到discover包,然后发出一个DHCP OFFER包对客户端做出响应。
第三步:客户端主机向这个DHCP服务器发出DHCP REQUEST包,目的是向DHCP服务器请求分配客户端主机。
第四步:DHCP服务器向客户端主机发送DHCP ACK包,用来告诉客户端ip地址,以及一些确认信息。
具体分析
首先使用ipconfig /release断开当前网络(如果有网络的话),会发送一个DHCP REALEASE包,地址变成0.0.0.0。再使用ipconfig /renew 更新适配器,请求网络连接,这样主机会获得一个可用的IP地址。而ipconfig /renew这条命令会产生4个DHCP包(包含客户端和服务端)。四个数据包分别是:DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK四个包。
DHCP Disover包:客户端使用ip地址0.0.0.0通过广播形式发送disvoer包,客户端向通过这个包发现可以分配地址的DHCP服务器。在传输层使用的是UDP协议,端口为67。
DHCP Offer包:DHCP服务器在收到discover包后,广播发出一个offer包,告诉了客户端这是一个可用的DHCP服务器,里面包含了可以分配的ip地址和子网掩码、网关等信息,因为此时可能有多个客户端用0.0.0.0作为IP地址发出discover,所以服务器不能以0.0.0.0作为目的地址,只能通过广播的形式将offer包发送出去。
DHCP Request包:客户端主机在收到服务器的Offer包后,确认可以和它进行交互的DHCP服务器存在,于是Client向服务器发送DHCP Request包。此时源地址依然为0.0.0.0,目标地址为255.255.255.255,所以也是广播的形。
DHCP ACK包:服务器使用ACK包对Request包进行响应。ACK包主要包含分配的ip地址,后面包括一些option信息,包括服务器发送的请求消息类型为ACK和身份标识,后面子网掩码和路由器,域名服务器,和域名等信息。
DHCP饥饿攻击
主要是伪造合法MAC地址,不断发出Request包,将DHCP分配的IP地址用完,因此这台DHCP服务器就不能为其他客户端主机分配IP地址了,此时再伪造出一台DHCP服务器,向其他客户端主机分配ip地址,将客户端的默认网关和DNS都设置成自己的机器于是便可以对客户端进行中间人攻击。