DHCP(动态主机配置协议)确实是一种非常实用的网络协议,它能够自动地为网络中没有IP地址的主机分配地址、子网掩码等信息,极大地减轻了网络管理员的工作量。DHCP协议的前身是BOOTP(引导程序协议),主要用于无磁盘主机连入网络。然而,BOOTP需要在设定前事先获得客户端的硬件地址,且IP地址是静态的,这在有限的IP资源环境中可能会造成很大的浪费。
DHCP作为BOOTP的增强版本,解决了这些问题。DHCP分为服务器端和客户端两部分,所有的IP网络设定数据都由DHCP服务器集中管理,并负责处理客户端的DHCP请求。客户端则使用服务器配置的IP环境数据。DHCP服务器通过端口67监听网络的DHCP请求,并与客户端协商配置客户机的TCP/IP环境。
DHCP的分配方式有三种:自动分配、手工分配和动态分配。自动分配是指DHCP服务器为第一次连接的客户端分配一个永久性的IP地址,客户端多次连接时IP地址不会变化;手工分配则是管理员提前在DHCP服务器配置好客户端的IP地址,类似静态配置;动态分配则是DHCP服务器给客户端分配一个受租约限制的IP,租约到期后可以被其他客户端使用。
DHCP协议与BOOTP协议兼容,报文格式也很类似。DHCP协议在RFC2131和RFC2132中定义,使用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。
总的来说,DHCP通过其灵活的IP地址分配方式和管理机制,大大提高了网络管理的效率和灵活性,是现代网络环境中不可或缺的重要协议。

DHCP报文格式中的每个字段都有其特定的含义,以下是这些字段的详细解释:
此外,DHCP报文还包括其他字段,如ciaddr(DHCP客户端的IP地址)、siaddr(DHCP客户端获取IP地址等信息的服务器IP地址)和chaddr(DHCP客户端的硬件地址)等,这些字段用于提供关于客户端和服务器以及它们之间交互的详细信息。
请注意,DHCP报文格式可能因不同的协议版本或实现方式而略有不同,因此在实际应用中,需要参考相关的协议标准或文档以获取最准确的信息。
(我这里用的是win10的虚拟机,在用wireshark抓包时需要选择VMnet8,我这里直接是以太网4,可以在控制面板->网络和Internet->网络连接,查看自己的网络。)

若果你觉得麻烦,不用虚拟机也可以,直接使用物理机,还是一样的操作,win+r,进入命令行,输入两个命令。
*要依次输入两个*命令
展开代码ipconfig /release
展开代码ipconfig /renew



客户端启动后,向网络广播一个DHCP Discover报文,寻找DHCP服务器。此时由于客户端不知道服务器的地址,所以要发送广播。本地网络中每个主机都会收到这个报文,但只有DHCP服务器才会对其响应。

DHCP服务器收到DHCP Discover报文后,从还没租出的地址范围内,选择最前面的空置IP地址,向客户端发送DHCP Offer报文,向客户端提供IP地址、子网掩码、默认网关域名服务器的信息。

客户端可能会收到一个或多个DHCP Offer报文(网络中可能有多个DHCP服务器),客户端从中选择一个 DHCP服务器,并广播 DHCP Request报文,在 DHCP Request 报文中必须指明要选择的DHCP服务器。

被选中的服务器收到DHCPRequest后,回应DHCPAck报文,地址分配完成。

**DHCP的分配方式:**网络中至少有一台DHCP服务器在工作,它会通过端口67监听网络的DHCP请求,并与客户端协商配置客户端的TCP/IP环境。
注意:DHCP Discover 报文和 DHCP Request 报文都是以广播的形式发送的而 DHCP Offer 和 DHCP Ack都是以单播(一对一)的形式发送的。以广播形式发送DHCF Discover 是为了寻找 DHCP 服务器。以广播形式发送 DHCP Request是为了通知网络中所有的 DHCP 服务器,客户端到底接受了谁的 DHCP Offer。被选中的 DHCP 服务器收到DHCP Request 会向客户端发送 DHCP Ack,而其他的服务器收到 DHCP Request 能够知道客户端拒绝了它的 DHCP Offer。
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!