【Network】DHCP 介绍与工作原理

Posted by 西维蜀黍 on 2017-06-04, Last Modified on 2021-09-21

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 ServerDHCP 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欺骗)。

参考