DHCP协议简介
DHCP(Dynamic Host Configuration Protocol是一个局域网的网络协议,是一个应用层协议,使用UDP协议工作,其前身是BOOTP协议。当前的DHCP定义可以在RFC 2131中找到,而基于IPv6的建议标准(DHCPv6)可以在RFC 3315中找到。是 BOOTP的扩展 ,是基于C/S模式的,它提供了一种动态指定IP地址和配置参数的机制 。DHCP主要用于大型网络环境和配置IP比较困难的地方 。DHCP服务器自动为客户机指定IP地址, 指定的配置参数有些和IP协议并不相关,但这并没有关系,它的配置参数使得网络上的计算机通信变得方便而容易实现了。DHCP使IP地址可以租用,租期从1分钟到100年不定,当租期到了的时候,服务器可以把这个IP地址分配给别的机器使用。
DHCP集中管理TCP/IP配置信息的分配。使用DHCP可以使客户端自动的获得IP地址。使用DHCP可以消除手工配权置TCP/IP出现的一些配置故(如:手工配置时,可能出现一个子网上两台机器的IP地址相同,则不能通的情况)
DHCP主要有两个用途:
1、给内部网络或网络服务供应商自动分配IP地址给用户
2、给内部网络管理员作为对所有电脑作中央管理的手段
DHCP报文格式

上图中每个字段含义如下:
操作代码(1字节)op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。
硬件类型(1字节)htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型,htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
硬件长度 (1字节)hlen:硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。
跳数(1字节) hops:跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。
事务 ID(4字节)xid:事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。
秒(2字节)secs:DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。
标志(2字节) flags:BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
客户端的 IP 地址 (4字节) ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。
你(客户端)的 IP 地址(4字节) yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
服务器 IP 地址 siaddr:为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。
网关IP 地址 giaddr:转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。
客户端的硬件地址 chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
服务器名 sname:为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
引导文件名file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
选项 options:可选选项,格式为“代码+长度+数据”。
DHCP工作原理
1. 发现阶段:即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现报文来寻找DHCP服务器(如下图)。
2.提供阶段:即DHCP服务器为DHCP客户机提供IP地址的阶段。在网络中接收到DHCP discover发现报文的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供报文(如下图)。
3. 选择阶段:即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供报文,则DHCP客户机只接受第一个收到的DHCP offer提供报文,然后它就以广播方式回答一个DHCP request请求报文,该报文中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址(如下图)。
4. 确认阶段:即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求报文之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认报文,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址(如下图)。
5. 重新登录:以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现报文了, 而是直接发送包含前一次所分配的IP地址的DHCP request请求报文。当DHCP服务器收到这一报文后, 它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认报文。
如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用) ,则DHCP服务器给DHCP客户机回答一个DHCP nack否认报文。当原来的DHCP客户机收到此DHCP nack否认报文后, 它就必须重新发送DHCP discover发现报文来请求新的IP地址。
6. 更新租约:DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限 ,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约 。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的报文。(动画演示)
练习一:使用DHCP获取IP地址
本练习由每一位组员独自完成。将主机B和主机E未用的网卡禁用。记下本机的IP地址,在命令行方式下,输入下面的命令: “netsh interface ip set address name=“本机可用网卡的接口名” source=dhcp”。
启动协议分析器捕获数据,并设置过滤条件(提取DHCP协议)。
在命令行方式下,输入命令“ipconfig –release”。
在命令行方式下,输入命令“ipconfig –renew”。
察看DHCP会话分析,填写下表。 报文序号 Boot record type值 Message Type值 Lease Time值(若有) 源IP地址 目的IP地址
报文序号 |
Boot record type值 |
Message Type值 |
Lease Time值(若有) |
源IP地址 |
目的IP地址 |
等待时间超过租用时间(上表中的Lease Time的值)的50%后,察看捕获的数据包。
各报文中字段“Boot record type”、“Message Type”的值分别是多少?该请求报文的作用是什么?