前言

①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服务器分配给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(动态主机配置协议)协议详细解析_客户端_02

DHCP交互过程共分为4步:

  • 第一步:Client端在局域网内发起一个DHCP Discover包,目的是想发现能够给它提供IP的DHCPServer。
  • 第二步:可用的DHCPServer接收到Discover包之后,通过发送DHCPOffer包给予Client端应答,意在告诉Client端它可以提供IP地址。
  • 第三步:Client端接收到Offer包之后,发送DHCPRequest包请求分配IP。
  • 第四步:DHCPServer发送ACK数据包,确认信息。

DHCP工作过程

DHCP(动态主机配置协议)协议详细解析_客户端_03

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(动态主机配置协议)协议详细解析_客户端_04

④经过抓包分析,DHCP客户端获取IP地址的四个步骤如下:

DHCP Discover数据包

DHCP(动态主机配置协议)协议详细解析_ip地址_05

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(动态主机配置协议)协议详细解析_客户端_06

DHCP Request包

当Client收到了DHCPOffer包以后(如果有多个可用的DHCP服务器,那么可能会收到多个DHCPOffer包),确认有可以和它交互的DHCP服务器存在,于是Client发送Request数据包,请求分配IP。

此时的源IP和目的IP依然是0.0.0.0和255.255.255.255。

DHCP(动态主机配置协议)协议详细解析_客户端_07

DHCP ACK包

服务器用DHCPACK包对DHCP请求进行响应。

DHCP(动态主机配置协议)协议详细解析_客户端_08

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​

​https://coderup.cn/2022/08/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/arp%E5%92%8Cdhcp%E7%9A%84%E5%8C%BA%E5%88%AB%E4%BB%A5%E5%8F%8A%E8%AF%A6%E7%BB%86%E8%AF%B4%E6%98%8E/​

 

去期待陌生,去拥抱惊喜。