1 需求背景
逐一为每一台主机设置IP地址会非常繁琐的事情。特别是在移动使用笔记本电脑、智能终端以及平板电脑等设备时,每重新接入一个新的网络,都要重新设置IP地址。
于是,为了实现自动设置IP地址、统一管理IP地址分配,就产生了 DHCP (Dynamic Host Configuration Protocol)。有了 DHCP,计算机只要连接到网络, 就可以直接进行TCP/IP通信(而无需进行手动配置)。
2 工作原理
使用DHCP之前,首先要架设一台 DHCP Server。然后将可分配的 IP 地址段、相应的子网掩码、路由控制信息以及 DNS 服务器地址设置到该服务器上。
注:在普通的家庭网络中,路由器也常常充当 DHCP Server 的角色。
(1)DHCP Server分配IP的方式
- DHCP Server在特定的IP地址池中自动选出一个未被使用的 IP 进行分配
- DHCP Server存储一个 MAC-IP 映射表,针对MAC地址来分配固定的 IP 地址(如果这个指定的MAC地址对应的主机未连接网络,则该MAC对应的IP地址不会被使用)
注:以上两种方式对不同 DHCP Client可并存
(2)DHCP工作协议
DHCP是一个典型的Client/Server模型的协议,使用UDP传输。
- DHCP Server端,使用UDP端口:67 DHCP Server可以在很多设备上部署(如Cisco、H3C、Juniper、Windows、Linux……)
- DHCP Client端,使用UDP端口:68 主机、路由器、交换机、网络打印机、网络摄像头……都可以作为DHCP Client
(3)DHCP的IP有效性验证
使用 DHCP 时,若 DHCP Server 发生故障,将出现无法自动分配IP地址的情况, 这使得网段内所有主机之间无法进行TCP/IP通信。为了避免此问题,通常会架设两台或两台以上的 DHCP Server。
不过,当使用多个 DHCP Server 时,由于每个服务器内部都只是记录着各自分配的IP地址信息,因此可能会导致不同 DHCP Server 分配的 IP 地址相互冲突的情况。
为了检査所要分配的IP地址以及已经分配的IP地址是否可用,DHCP Server
或DHCP Client
必须具备以下功能:
DHCP Server : 在分配某个IP地址前,需要发送 ICMP 请求包(以确认当前所分配的IP地址未被使用),确认没有应答返回后,才进行分配。
DHCP Client: 在从 DHCP Server 那里获得IP地址后,发送 ARP 请求包,确认没有应答返回后,才进行使用。
3 DHCP分配过程分析
DHCP的数据交互过程:
接下来详细分析各个交互过程:
(1)DHCP Client发出 DHCP Discover
包
DHCP Client广播(域内所有主机都可以收到这个包)发出DHCP Discover
包,以寻找能够给 Client 提供 IP 地址的 DHCP Server 。
备注:
- 这里 DHCP Client 发送了3次 DHCP Discover 包(因为 DHCP Server 响应比较慢,Client重发了 DHCP Discover 包)
- 这里 IP 包的源地址为
0.0.0.0
(因为此时还未获取到有效的IP地址) - 这里 IP 包的目的地址为
255.255.255.255
,因此网段内的所有主机都可以收到这个包
(2)DHCP Server 发出DHCP Offer
包
网段内的 DHCP Server 在收到 DHCP Client 发出的DHCP Discover
包后,均会发出DHCP Offer
包(以给予 DHCP Client 进行响应)。
整理一下IP信息:
- DHCP Server IP:10.138.10.90
- 待分配给该 DHCP Client 的IP:10.138.11.122
- DNS:202.96.209.133 、 202.96.209.6
- 路由器:10.138.10.1
备注:
- 因为
DHCP Discover
包是广播发出的( IP 包的目的地址为255.255.255.255
),网段内的所有主机都可以收到这个包,因此所有可达的 DHCP Server 也都会收到这个数据包,而所有收到该包的 DHCP Server 都会发出DHCP Offer
包。 - 上面这条规则意味着:若网段内存在3台可用的 DHCP Server ,且3台 Server均收到了 Client 发出的
DHCP Discover
,那么这3台 Server 均会发出DHCP Offer
包 - 若 DHCP Client 收到多个
DHCP Offer
包,通常取最先收到的那个 DHCP Offer
包中包含待分配给 DHCP Client 的 IP(Your (client) IP Address字段)、该 DHCP Server 的 IP(Next server IP address字段)- 除了上面两个IP信息外,
DHCP Offer
包中还包括子网掩码(Option: (1) Subnet Mask字段)、IP有效时间长度(Option: (51) IP Address Lease Time字段)、DHCP Server IP(Option: (54) DHCP Server Identifier字段)、路由器IP(Option: (3) Router字段)、DNSServerIP(Option: (6) Domain Name Server字段)等。
DHCP Server 选择待分配IP优先级:
DHCP Server 从 IP 地址池中选择待分配 IP 地址时,以如下优先级进行选择:
- 当前已经存在的IP- MAC 的对应关系
- 该 DHCP Client 以前的 IP 地址
- 读取Discovery报文中的Requested Ip Address Option的值,如果存在并且 IP 地址可用
(3)DHCP Client 发出DHCP Request
包
DHCP Client 在收到 DHCP Server 发出DHCP Offer
包后,遍发出DHCP Request
包。
备注:
- 这里 IP 包的目的地址为
255.255.255.255
,因此网段内的所有主机都可以收到这个包 DHCP Request
包的Option字段中会记录Client选中的待分配IP地址
和对应的DHCP Server
(4)DHCP Server 发出DHCP ACK
包
DHCP Server 收到 DHCP Client 发出DHCP ACK
包后,会校验包里记录的DHCP服务器
IP与本机 IP 是否一致。
如果一致,DHCP Server 会发出DHCP ACK
包,以最终对 DHCP Client 发出的DHCP Request
包进行响应。
(5)DHCP Client 收到DHCP ACK
包
DHCP Client 在收到DHCP ACK
包后,会通过发出ARP
包来检查该分配的IP地址是否能够使用。
- 如果能够使用,Client 在此后发出的数据中,均包含该分配的IP地址
- 如果 Client 发现此分配IP依据被使用,则会发出
DHCP Decline
包(以通知 DHCP Server 禁用这个IP),并向 Server 申请新的可用IP
(6)Client使用IP租期问题
a.在使用租期超过总租期的50%时
在使用租期超过总租期的50%时,DHCP Client 会以单播形式向 DHCP Server 发送DHCP Request
包来续租IP地址。如果 Client 成功收到 Server发送的DHCP ACK
包,则按相应时间延长IP地址租期;如果没有收到 Server 发送的DHCP ACK
包,则 Client 继续使用这个IP地址。
b.在使用租期超过总租期的85%时
在使用租期超过总租期的85%时,DHCP Client会以广播形式向DHCP Server发送DHCP Request
报文来续租IP地址。
- 如果 Client 成功收到 Server 发送的
DHCP ACK
包,则按相应时间延长IP地址租期; - 如果没有收到 Server 发送的
DHCP ACK
包,则 Client 继续使用这个IP地址。直到IP地址使用租期到期时, Client 才会向 Server 发送DHCP Release
包来释放这个IP地址,并开始申请新的IP地址。
(7)DHCP Client 发出DHCP Release
包
当 Client 不再使用这个IP时,会发出DHCP Release
包,以告知 DHCP Server 回收相应IP并重新分配。
4 小技巧
(1)在Wireshark中过滤DHCP包
添加bootp
过滤条件。
(2)手动模拟重连接网络
与断开网络
a 重连接网络
作用:更新适配器信息,请求连接网络,(这条命令结束之后,主机会获得一个可用的IP,再次接入网络)
ipconfig /renew
输入命令后,在Wireshark中,截获四个DHCP
包:
b 断开网络
作用:断开当前的网络连接(主机IP变为0.0.0.0,主机与网络断开,不能访问网络)
ipconfig /release
输入命令后,在Wireshark中,截获一个DHCP Release
包:
5 DHCP Attack
DHCP starvation attack(DHCP饥饿攻击)。通过伪造大量不同的MAC地址,并大量发出DHCP Request
来申请新的IP,使 DHCP Server 的可用IP被耗尽,使得网络中的合法主机无法正常获取到IP,最终无法正常使用网络。
其实,这种攻击手法与TCP SYN Flooding Attack(SYN泛洪攻击)是比较类似的。
更进一步地,攻击者再伪造一台DHCP Server ,提供给合法用户分配IP的服务,且将默认网关、DNS都设置成自己的服务器,进而对合法用户进行中间人攻击(DNS欺骗)。