DHCP 动态主机配置协议

DHCP

DHCP (Dynamic Host Configuration Protocol、动态主机配置协议) 是一个局域网的网络协议。指的是由服务器控制一段 IP 地址范围,客户机登录时就可以自动获得服务器分配的配置信息 (包括 IP 地址、网关、DNS Server 等参数),可以实现 IP 地址动态分配,以及其他网络参数的集中配置管理

DHCP 报文基于 UDP 协议,采用 67 (DHCP 服务器) 68 (DHCP客户端) 两个端口号

  • OP : 消息操作代码
    • 1 : 客户端请求报文
    • 2 : 服务器响应报文
  • HType : 硬件地址类型 (Hardware Type),由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配
  • Hlen : 硬件地址长度 (Hardware address Length)
  • Hops : 跳数,表示当前的 DHCP 报文经过的 DHCP 中继的数目。该字段由客户端或服务器设置为 0,每经过一个 DHCP 中继时,该字段加 1
  • Xid : 事务 ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配 (由客户端选择 32 位的随机整数)
  • Secs : 耗时,标识客户端开始获得 IP 地址或 IP 地址续借所使用了的秒数 (由客户端填充)
  • Flags : 标志
    • 0 : 单播发送响应报文
    • 1 : 广播发送响应报文
  • CI Address : 客户端 IP 地址,客户端在初始化状态时没有 IP 地址,此字段为 0.0.0.0
  • YI Address : “你的” IP 地址,表示服务器分配给客户端的 IP 地址。当服务器进行 DHCP 响应时,将分配给客户端的 IP 地址填入此字段
  • SI Address : 客户端获得启动配置信息的服务器的 IP 地址
  • GI Address : 第一个 DHCP 中继的 IP 地址
  • CH Address : 客户端 MAC 地址
  • Server Name : 服务器名字 (由服务器填充)
  • File : 客户端的启动配置文件名 (由服务器填充)
  • Options : 选项字段

报文类型

DHCP Discoser用于客户端查找 DHCP 服务器
DHCP Offer服务器用来响应客户端的 DHCP Discover 报文,并指定相应的配置参数
DHCP Request由客户端发送给服务器来请求配置参数或者请求配置确认或者续借租期
DHCP ACK服务器响应客户端的 DHCP Request 报文,表示接收请求并附带配置参数
DHCP NAK服务器响应客户端的 DHCP Request 报文,表示拒绝请求
DHCP Release客户端通知服务器释放地址
DHCP Inform客户端已拥有 IP 地址时,向服务器请求其他配置参数
DHCP Decline客户端通知服务器分配的地址无法使用

工作过程

  1. 客户端连接网络,广播发送 DHCP Discover 请求
  2. 服务器根据接收到 DHCP Discover 报文的接口地址,从同网段地址池中查找可用的地址,通过 DHCP Offer 回复客户端
  3. 客户端只接收最早的 DHCP Offer 报文,并广播发送 DHCP Request 报文,通知所有 DHCP 服务器自身选择了某个服务器分配的地址
  4. 服务器收到 DHCP Request 报文后,回应 DHCP ACK 表示请求的地址分配给客户端使用
  5. 客户端获取到地址后,会发送免费 ARP 探测地址是否冲突。若地址产生冲突,客户端向服务器发送 DHCP Decline 报文标记冲突地址,并重新申请 IP 地址
  6. 若服务器无法分配 DHCP Request 报文中申请的地址,会回应 DHCP NAK 报文。客户端则需要重新发送 DHCP Discover 报文申请地址

租期更新

  • 当地址租期达到 50% 时,客户端会向服务器单播发送 DHCP Request 报文请求更新租期时间
    • 如果客户端收到 DHCP ACK 报文,表示租期更新成功,租期时间从 0 开始计算
    • 如果客户端收到 DHCP NAK 报文,表示该地址不可继续使用,则重新发送 DHCP Discover 重新申请地址
  • 当地址租期达到 87.5% 时,如果仍未收到 DHCP 服务器的应答,则会广播发送 DHCP Request 报文来请求更新租期时间
    • 如果客户端收到 DHCP ACK 报文,表示租期更新成功,租期时间从 0 开始计算
    • 如果客户端收到 DHCP NAK 报文,表示该地址不可继续使用,则重新发送 DHCP Discover 重新申请地址
  • 当地址到期时仍未收到 DHCP 服务器的应答,客户端停止使用当前地址,重新发送 DHCP Discover 报文申请地址

地址释放

客户端通过 DHCP Release 报文通知 DHCP 服务器释放地址,DHCP 服务器会保留客户端配置信息,并将该地址列为分配过的地址,以便后续重新分配给该设备。

客户端可以通过 DHCP Inform 报文向 DHCP 服务器请求更新配置信息

DHCP 中继

  1. 客户端连接网络,广播发送 DHCP Discover 报文
  2. DHCP 中继器收到 DHCP Discover 报文后,检查 Hops 字段是否大于 16,若 Hops 值大于 16 会直接丢弃该数据包;若 Hops 值小于 16 则会在 Hops 字段上加 1 ,并将报文单播发送给 DHCP 服务器
  3. DHCP 服务器收到 DHCP Discover 报文后,选择与报文 GI Address 字段相同网段的地址池,并分配地址和参数。然后将 DHCP Offer 报文单播发送给 DHCP 中继器。若 GI Address 字段不是接口地址,则会丢弃该报文
  4. DHCP 中继器收到 DHCP Offer 报文后,通过 Flags 字段来决定以单播/广播的方式回复客户端

DHCP Snooping

DHCP Snooping 是 DHCP 的一种安全特性,通常部署在 DHCP 客户端与 DHCP 服务器之间,通过配置信任端口来防御 DHCP 攻击

当非信任端口接收到 DHCP 服务器响应报文 (DHCP Offer、DHCP ACK、DHCP NAK) 会直接将报文丢弃,信任端口接收到的 DHCP 服务器响应报文则正常转发

部署网络时,一般将直连或间接连接 DHCP 服务器的端口配置为信任端口,其他端口则配置为非信任端口。从而保证客户端只能从合法的 DHCP 服务器上获取地址,私自架设的 DHCP 服务器无法给客户端分配地址

开启 DHCP Snooping 功能后,设备能够通过分析 DHCP 的报文交互过程,生成 DHCP Snooping 绑定表,绑定表项包括客户端的 MAC 地址、获取到的 IP 地址、与 DHCP 客户端连接的接口及该接口所属的 VLAN 等信息

Option 82

Option 82 是 DHCP 报文中的中继代理信息选项,该选项记录了 DHCP 客户端的位置信息。DHCP Snooping 设备或 DHCP Relay 通过在 DHCP 请求报文中添加 Option 82 选项,将 DHCP 客户端的精确物理位置信息传递给 DHCP 服务器,从而使得 DHCP 服务器能够为主机分配合适的 IP 地址和其他配置信息,实现对客户端的安全控制

Option 82 中可以包含最多 255 个 sub-option,若定义了 Option 82,则至少要定义一个 sub-option 。目前 Option 82 中常用的 sub-option 1、sub-option 2 和 sub-option 5

  • sub-option 1
    • circuit id ,代理电路 id 子选项。通常在 DHCP 中继设备上配置,定义了在传输报文的时候要携带DHCP 客户端所连接交换机端口的 vlan 及二层端口号
  • sub-option 2
    • remote id ,远程代理 id 子选项。通常在 DHCP 中继设备上配置,定义了在传输报文的时候要携带中继设备的 MAC 地址信息。通过与 1 子选项共同使用来标识 DHCP 源端信息
  • sub-option 5
    • link selection ,链路选择子选项。包含 DHCP 中继添加的 IP 地址 (GI Address),DHCP 服务器根据地址分配同网段的 IP 地址

相关文档

rfc2131

Huawei-DHCP

Huawei-DHCP Snooping

上一篇
下一篇