前言
①DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址,子网掩码,Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率
②DHCP(DynamicHost ConfigurationProtocol),动态主机配置协议,是一个应用层协议,具体可以参考《TCP/IP四层模型》文章。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
③DHCP使用客户服务器方式。需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文(将目的IP地址置为全1,即255.255.255.255),这时该主机就称为DHCP客户。(发送广播报文是因为现在还不知道DHCP服务器在什么地方,因此要发现DHCP服务器的IP地址。)这台主机目前还没有自己的IP地址,因此它将IP数据包的源IP地址设为全0,这样在本地网络上的所有主机都能收到这个广播报文,但只有DHCP服务器才对此广播报文进行回答。DHCP服务器先在其数据库中查找该计算机的配置信息。若找到则返回找到的信息。若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。
④并不是每个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多。因此现在是使每个网络至少有一个DHCP中继代理(通常是一台路由器,它配置了DHCP服务器的IP地址信息。当DHCP中继代理收到主机A以广播形式发送的发现报文后,就以单播的方式向DHCP服务器转发此报文,并等待其回答。收到DHCP服务器回答的提供报文后,DHCP中继代理再把此提供报文发回给主机A)
⑤DHCP服务器分配给DHCP客户(需要被分配ip地址的主机)的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP协议称这段时间为租用期。
⑥DHCP客户使用的UDP端口是68,而DHCP服务器使用的UDP端口是67。
⑦DHCP的作用:为客户机分发IP地址、子网掩码、网关、DNS服务器、租期等参数。
⑧DHCP的好处:简化客户机设置;防止用户误操作;避免局域网内主机的IP地址重复,提高IP地址的利用率。
⑨DHCP的架构:C/S架构,客户机/服务器架构(C-Client/S-Server);DHCP服务对应的是UDP协议,因为是C/S架构,所以DHCP服务是分为:客户机占用UDP 67号端口,DHCP服务器占用UDP 68号端口。
⑩DHCP的概念名词:
- DHCPClient:DHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。
- DHCPServer:DHCP服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。
- DHCPRelay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。
- DHCPSecurity:DHCP安全特性,实现合法用户IP地址表的管理功能。
- DHCPSnooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息。
DHCP工作原理
DHCP使用UDP协议工作,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号。546号端口用于DHCPv6Client,而不用于DHCPv4,是为DHCPfailover服务。
DHCP客户端向DHCP服务器发送的报文称之为DHCP请求报文,而DHCP服务器向DHCP客户端发送的报文称之为DHCP应答报文。
DHCP交互过程共分为4步:
- 第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCPServer。
- 第二步:可用的DHCPServer接收到Discover包之后,通过发送DHCPOffer包给予Client端应答,意在告诉Client端它可以提供IP地址。
- 第三步:Client端接收到Offer包之后,发送DHCPRequest包请求分配IP。
- 第四步:DHCPServer发送ACK数据包,确认信息。
DHCP工作过程
1、DHCP服务器被动打开UDP端口67,等待客户端发来的报文。
2、DHCP客户从UDP端口68发送DHCP发现报文。
3、凡收到DHCP发现报文的DHCP服务器都发出DHCP提供报文,因此DHCP客户可能收到多个DHCP提供报文。
4、DHCP客户从几个DHCP服务器中选择其中的一个,并向所选择的DHCP服务器发送DHCP请求报文。
5、被选择的DHCP服务器发送确认报文DHCPACK。从这时起,DHCP客户就可以使用这个IP地址了。这种状态叫做已绑定状态,因为在DHCP客户端的IP地址和硬件地址已经完成绑定,并且可以开始使用得到的临时IP地址了。DHCP客户现在要根据服务器提供的租用期T设置两个计时器T1和T2,它们的超时时间分别是0.5T和0.875T。当超时时间到了就要请求更新租用期。
6、租用期过了一半(T1时间到),DHCP发送请求报文DHCPREQUEST要求更新租用期。
7、DHCP服务器若同意,则发回确认报文DHCPACK。DHCP客户得到了新的租用期,重新设置计时器。
8、DHCP服务器若不同意,则发回否认报文DHCPACK。这时DHCP客户必须立即停止使用原来的IP地址,而必须重新申请IP地址(回到步骤2)。
若DHCP服务器不响应步骤6的请求报文DHCPREQUEST,则在租用期过了87.5%(T2时间到),DHCP客户必须重新发送请求报文DHCPREQUEST(重复步骤6),然后又继续后面的步骤。
9、DHCP客户可以随时提前终止服务器所提供的租用期,这时只需要向DHCP服务器发送释放报文DHCPRELEASE即可。
Wireshark抓包分析DHCP
前提:要想抓取到DHCP包,先要保证有可用的DHCP服务器,然后将主机IP地址获取方式设置为自动获取。
测试环境:笔记本设置为DHCP模式,路由开启DHCP服务。由于笔记本在开机时想路由DHCP去获取IP,开机时无法迅速打开wireshark软件进行抓包,我们使用以下命令先断开主机的网络连接,然后再连接网络。
步骤:
①终端执行命令:ipconfig /release
断开当前的网络连接,主机IP变为0.0.0.0,主机与网络断开,不能访问网络。
②终端执行命令:ipconfig /renew
更新适配器信息,请求连接网络,这条命令结束之后,主机会获得一个可用的IP,再次接入网络。
③抓取的数据包如下:
④经过抓包分析,DHCP客户端获取IP地址的四个步骤如下:
DHCP Discover数据包
DHCP Offer包
当DHCP服务器收到一条DHCPDiscover数据包时,用一个DHCPOfferr包给予客户端响应。 这一数据报中客户客户端获取到了最重要的IP地址信息。除此之外,服务器还发送了子网掩码,路由器,DNS,域名,IP地址租用期等信息。
DHCP服务器仍然使用广播地址作为目的地址,因为此时请求分配IP的Client并没有自己ip,而可能有多个Client在使用0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求,DHCP也不能使用0.0.0.0这个IP作为目的IP地址,于是依然采用广播的方式,告诉正在请求的Client们,这是一台可以使用的DHCP服务器。
DHCP Request包
当Client收到了DHCPOffer包以后(如果有多个可用的DHCP服务器,那么可能会收到多个DHCPOffer包),确认有可以和它交互的DHCP服务器存在,于是Client发送Request数据包,请求分配IP。
此时的源IP和目的IP依然是0.0.0.0和255.255.255.255。
DHCP ACK包
服务器用DHCPACK包对DHCP请求进行响应。
DHCP缺点
DHCP可以很好的进行IP地址的分配,但是DHCP协议已存在一些缺点,如:
1、DHCP协议不支持跨网段进行地址分配。
2、DHCP协议不能获取非DHCP客户端的IP地址,在地址池设置不合理的情况下可能会造成地址冲突。
基于上述的缺陷,我们需要合理对IP地址池进行设置,并预留一些IP地址,分配给需要固定IP的服务器。
DHCP应用实例
DHCP很适合于经常移动位置的计算机。
当计算机使用Windows操作系统时,点击"控制面板"的"网络"图标就可以找到某个连接中的网络下面的菜单,找到TCP/IP协议后点击其"属性"按钮,若选择"自动获得IP地址"和"自动获得DNS服务器地址",就表示是使用DHCP协议。
参考:
https://www.jianshu.com/p/af20735a2df0
https://zhuanlan.zhihu.com/p/359943429
去期待陌生,去拥抱惊喜。