DHCP协议

1 DHCP简介

  DHCP全称Dynamic Host Configuration Protocol(动态主机配置协议),是网络终端设备获取地址的两种方式之一,另外一种是静态配置。
  除了提供IP地址信息以外,可以通过Option字段,为DHCP Client分配其它信息,如:子网掩码、网关地址、DNS服务器
  DHCP协议起源于早期的BOOTP协议,在早期版本的Wireshark抓包工具中,抓取DHCP报文使用的过滤字段为BOOTP协议

1.1 BOOTP协议

 BOOTP协议是一种引导启动操作系统的协议,当电脑启动时,硬盘上没有操作系统,可以通过BOOTP协议在BOOT阶段(PC上交BIOS)从服务器上获取操作系统。过程如下:
 a 客户端发送一个请求,请求获取IP地址、启动文件存放地址、启动文件名称。
  b 服务器回复一个报文,分配其IP地址、启动文件存放地址、启动文件名称
  c 客户端获取到文件信息以后,使用tftp协议,下载文件,然后启动文件。
 原始的BOOTM协议的报文与DHCP的报文相比要简单,只有两种交互报文,一个请求、一个回复,报文中不存在option字段。RFC951中定义各字段的作用
 报文格式如下
DHCP协议

2.1 从BOOTP协议到DHCP协议

   DHCP定义了8种报文类型,由RFC1533定义了类型。其中,客户端支持的报文类型:DISCOVER 、REQUEST、DECLINE、RELEASE、INFORM;服务器端支持的报文类型: OFFER、 ACK、NAK

  如果客户端通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充’yiaddr’字段或租用时间参数。服务器取得DHCPINFORM包内的’ciaddr’地址,而返回DHCPACK包。

  区分BOOTP协议和DHCP协议的标准是有误Option(供应商扩展字段)

2 DHCP报文协议

2.1 DHCP协议的报文格式

DHCP协议
  DHCP服务器分配给客户端的IP地址存放于yiaddr字段中,硬件地址字段存放的是客户端mac地址
 dhcp rely发送的报文在Giaddr字段会有信息,表示DHCP Relay的IP地址
 服务器通Option(选项)字段提供其它信息给客户端

2.2 Option

  常见Option字段的定义如下:
DHCP协议
  比较重要的Option82有一下功能:
  1 Relay在报文中添加DHCP Client报文的接口信息
  2 Relay在报文中添加DHCP Client报文的MAC地址信息

2.2 流程

  DHCP获取地址的流程如下:
DHCP协议
  如果DHCP Server配置了多个地址池。DHCP Server应该分配哪个网段的地址给个客户端?
  1、如果是Client直接发出的报文,根据报文接收的接口的IP地址来决定
  2、如果是Relayt报文发出的,根据relay agent ip addr来决定
  DHCP的报文如下(以offer报文为例):
DHCP协议

2.3 状态机

DHCP协议
   免费ARP的作用是检测局域网中是否有主机的地址与拿到的地址冲突,如果冲突,这个DHCP Server的地址是不能使用的。
 Windows在发送续约的Request的时候,会通过ARP检测DHCP服务器是否正常,如果异常,则不会在T1时间发送Request报文,会在T2时间发送Request报文,如果发送多次以后,没有回复,则会回到Init状态。

2.3 DHCP特殊报文

   除了基本的DISCOVERY、OFFER、REQUEST、ACK四个基本的报文以外,还有其它几种少见的报文,在出现故障时,可以通过对异常报文的分析来定位问题。

2.3.1 NAK(拒绝请求)

    NAK表示不能分配Request报文中的地址(option 50)。NAK报文由服务器发出。
 有两种情况可以看到NAK报文,都与地址分配失败有关:
 a Windows系统的电脑会关机时一般会保存获取到的IP地址,下次开机时,直接发送Request报文,请求关机前的地址,省略了DIscovey。如果此时服务器已经删除了该Client的租约信息或者DHCP Server的地址池配置发生变化,就会发送NACK请求,意味着地址分配失败。
 b DHCP Server的地址池配置发生变化,客户端续租时发送Request了报文。

    NAK报文如下:
DHCP协议

2.3.2 DECLINE(拒绝IP)

    DECLINE报文由客户端发出,表示拒绝服务器分配的IP地址。DECLINE报文位于ACK报文的后面
 以下情况会导致client发送DECLINE报文:
 Windows电脑收到ACK报文以后,会发送免费ARP报文,来检测该IP是否被其它设备占用,如果被占用,则发送DECLINE。

 报文如下:
DHCP协议
DHCP协议

2.3.3 Release(释放IP地址)

    Release表示客户端通知服务器,地址使用结束,不再使用该IP地址
 以下情况会导致client发送Release报文:
 将Windows网卡的动态IP改为静态IP,或者ipconfig /release命令,会触发Release。
 报文如下:
DHCP协议

2.3 DHCP中的单播报文与广播报文

    DHCP协议交互时,会同时存在单播报文和广播报文。
  a IP地址获取成功前,Client与Server发送的都是广播报文
  b IP地址获取成功后,Client与Server发送的都是单播报文,续租、Release是单播报文

2.4 续租

    发送Request报文,更新(renew)租约时间。

2.5 重新绑定

    重新绑定时,会发送Discovery报文,重新获取IP地址
 当续租失败,租约到期以后,开始重新绑定
    重新绑定流程如下图所示。

DHCP协议