目录
01、DHCP协议简介
DHCP(DynamicHost ConfigurationProtocol),动态主机配置协议,是一个应用层协议,具体可以参考《TCP/IP四层模型》文章。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
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地址的用户信息。
02、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数据包,确认信息。
03、Wireshark抓包分析
要想抓取到DHCP包,先要保证有可用的DHCP服务器,然后将主机IP地址获取方式设置为自动获取。我们的测试环境是,笔记本设置为DHCP模式,路由开启DHCP服务。由于笔记本在开机时想路由DHCP去获取IP,开机时无法迅速打开wireshark软件进行抓包,我们使用以下命令先断开主机的网络连接,然后再连接网络。
ipconfig /release
ipconfig /renew
在cmd中可以使用ipconfig/?查看各参数的含义
命令详解:
(1)ipconfig /release
断开当前的网络连接,主机IP变为0.0.0.0,主机与网络断开,不能访问网络。
(2)ipconfig /renew
更新适配器信息,请求连接网络,这条命令结束之后,主机会获得一个可用的IP,再次接入网络。
抓取的数据包如下,注意使用dhcp过滤条件。
wireshark抓包文件:点击下载
可以清楚看到DHCP的四个步骤。
DHCP Discover数据包
在Discover阶段,可以看出客户端发出的是广播复制,MAC地址广播相关内容请看《802.3以太网帧》,IP地址广播相关内容请看《IP协议详解》。从下图也可以看出DHCP是基于UDP协议的,采用67(DHCP服务器端)和68(DHCP客户端)两个端口号,这个上文讲过了,在抓包文件中证实了。DHCP报文格式基于BOOTP的报文格式,DHCP具体的报文格式并不是本文重点,本文并不会详细讲解DHCP报文中每个字节的含义。
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请求进行响应。
04、DHCP缺点
DHCP可以很好的进行IP地址的分配,但是DHCP协议已存在一些缺点,如:
1、DHCP协议不支持跨网段进行地址分配
2、DHCP协议不能获取非DHCP客户端的IP地址,在地址池设置不合理的情况下可能会造成地址冲突。
基于上述的缺陷,我们需要合理对IP地址池进行设置,并预留一些IP地址,分配给需要固定IP的服务器。
点击查看本文所在的专辑,STM32F207网络开发
关注公众号,第一时间收到文章更新。