1. Dynamic Host Configuration Protocol(动态主机配置协议)概述


  • DHCP 采用 UDP 协议进行传输
    • Server 采用「67」端口
    • Client 采用「68」端口
  • 用于在 IPv4 网络中为 Client 动态分配地址等信息
  • DHCP 是在 BOOTP 协议的基础上发展而来,BOOTP 又是 RARP 协议的基础上发展而来
    • RARP: 请求在网络上广播常用于无盘系统(已淘汰),在报文中标识发送端的 MAC 地址,应答通常是采用单播方式的,分组格式基本与 ARP 相同
    • BOOTP: 使用 UDP 报文封装,常用于无盘系统,用来获取 IP 地址并能返回其他信息(子网掩码、DNS 服务器信息、路由器的IP地址等),还能穿越路由器
    • DHCP: 继承了 BOOTP 许多优点,最主要的改进是对用户 IP 地址动态分配

      2. Role Type


  • Client: 请求并获取 Server 分配的 IP 地址等网络参数
  • Server: 为 Client 分配网络参数
  • Relay: 负责并单播转发 Server 和 Client 之间的 DHCP 报文,协助 Server 向 Client 动态分配网络参数

    3. 地址分配方式


  1. 自动分配:给主机指定一个永久的Ip地址
  2. 动态分配:给主机指定一个有时间限制的IP地址,到时间或主机明确表示放弃这个地址时,这个地址可以被其他主机使用
  3. 手工分配:主机的IP地址是由管理员指定的,DHCP只是把指定的IP地址分配给该主机

    4. DHCP 与 BOOTP 的比较


  • 相同点:
    1. Client/Server 模式
    2. Client 提出配置申请
    3. Server 响应配置请求
    4. 都采用 UDP 封装(67、68 端口)
    5. 相同的报文格式
  • 不同点:
    1. BOOTP 运行在静态环境中
    2. 主机需要配置 BOOTP 参数文件
    3. BOOTP 参数文件长时间不变
    4. DHCP 允许 Client 快速、动态获取 IP 地址

      5. DHCP Message


DHCP 通过 8 种类型,使 Server 为 Client 分配主机地址、更新租期、重绑定和释放地址

image.png
DHCP Message 格式解析

  • OP(Message Type):报文的类型
    • 1 = Client 请求报文
    • 2 = Server 响应报文
  • Htype(Hardware Type):硬件地址类型。对于以太网值为 1
  • Hlen(Hardware Address):硬件地址字节长度。对于以太网值为 6
  • Hops:当前的 DHCP 报文经过的 DHCP Relay 的跳数。由 Client 或 Server 设置为0,每经过一个 DHCP Relay时,该字段加 1,最大为16
  • Xid(Transaction ID):DHCP Client 选取的随机数,使 DHCP Server 的回复与 DHCP Client 的报文相关联
  • Secs(Seconds Elapsed):由客户端填充,表示从 Client 开始获得 IP 地址或 IP 地址续租后所使用了的秒数
  • Flags(Bootp Flags):标志字段。只有标志字段的最高位才有意义,其余的 15 位均被置为 0 。最高位被解释为单播或者广播响应标志位
    • 0 = Client 请求 Server 以单播形式发送响应报文
    • 1 = Client 请求 Server 以广播形式发送响应报文
  • Ciaddr(Client IP Address):Client 的 IP 地址,[Client 在初始化状态时没有 IP 地址,此字段为 0.0.0.0 ,代表临时通信]
  • Yiaddr(Your IP Address):服务器分配给 Client 的 IP 地址
  • Siaddr(Next Server IP Address):DHCP Client 获得启动配置信息的服务器的 IP 地址
  • Giaddr(Relay Agent IP Address):表示第一个 DHCP Relay 的 IP 地址。当客户端发出 DHCP Discover 时,如果 Server 和 Client 不在同一个网段,那么第一个 DHCP Relay 在将 DHCP Discover 报文转发给 DHCP Server 时,会把自己的 IP 地址填入此字段,DHCP Server 会根据此字段来判断出 Client 所在的网段地址,从而选择合适的地址池,为 Client 分配该网段的 IP 地址
    • Server 还会根据此地址将 Offer 报文发送给此 DHCP Relay ,再由 DHCP Relay 将此报文转发给 Client
    • 若在到达 DHCP Server 前经过了多个 DHCP Relay ,该字段作为 Client 所在的网段的标记,填充了第一个 DHCP Relay 的 IP 地址后不会再变更,只是每经过一个 DHCP Relay ,Hops 字段的数值会加 1
  • Chaddr(Client MAC Address):该字段表示 Client 的 MAC 地址,此字段与前面的 “Htype” 和 “Hlen” 保持一致。当 Client 发出 DHCP Discover 时,将自己的硬件地址填入此字段。对于以太网,当 “Htype” 和 “Hlen” 分别为 “1” 和 “6” 时,此字段必须填入 6 字节的以太网 MAC 地址
  • Sname(Server host name not given):表示 Client 获取配置信息的 Server 名字(由 DHCP Server 填写)。如果填写,必须是一个以 0 结尾的字符串
  • File(Boot File name not given):表示 Client 需要获取的启动配置文件名(由 DHCP Server 填写)。如果填写,必须是一个以 0 结尾的字符串
  • Options:可变长度,表示 DHCP 的选项字段,最多为 312 byte 。此字段可以包含 DHCP 报文类型,服务器分配给终端的配置信息,如网关 IP 地址,DNS 服务器 IP ,分配的 IP 地址有效租期等信息

    1)Discover

    Client广播寻找DHCP Server

image.png

2)Offer

Server单播响应Client的Discover报文,并指定相应的配置参数

  • Flags 字段
    • U = 1(表示单播)
    • U = 0(表示广播)
  • 如果存在多个 DHCP Server,Client 会选择最先收到 Offer 报文的 Server

image.png

3)Request

Client 广播发送给 Server,用来请求配置参数、请求配置确认或续约租期

  1. Client 初始化后,发送广播的 Request 报文来请求 Server 的 Offer 报文中的配置参数。如果存在多个 Server ,除了请求地址外还会告知其他 Server ,自己已经采用了哪个 Server 的地址(便于回收地址)
  2. Client 重启初始化后,发送广播的 Request 报文来确认先前被分配的 IP 地址等系统
  3. Client 在获取到 IP 地址后,如果当租期达到 50% 时,单播发送 Request 报文请求续租;如果当租期达到 87.5% 时,广播发送 Request 报文请求续租

image.png

4)Ack

Server 对 Client 的 Request 报文进行单播确认响应。Client 收到该报文后,才真正的获得了 IP 地址和相关配置参数

image.png

5)DeCline

Client 发现地址已被使用时,用于通知 Server

6)NAK

Server 发送给 Client 表明地址请求不正确或租期已过期

7)Inform

Client 已有 IP 地址时,用来请求 Server 其他配置参数

8)Release

Client 释放 IP 地址时,用来通知 Server

6. 工作原理


1)DHCP Client 首次接入网络

image.png

2)DHCP Relay 下 DHCP Client 首次接入网络

image.png

7. Option 字段


1)Option 43

厂商特定信息选项

  • 可以为下挂的 AP 设备指定 AC 的 IP 地址,以方便 AP 与 AC 建立连接
  • Option43 支持主选项和子选项的形式

    • Sub-option type:设备作为 DHCP 服务器为 AP 提供 AC 的 IP 地址时使用
      • 0x01(hex 类型的子选项)
      • 0x02(IP 地址类型的子选项)
      • 0x03(ASCII 码类型的子选项)
    • Sub-option length:子选项的长度
    • Sub-option value:子选项的取值

      2)Option 82

      中继代理信息选项
  • 记录 DHCP 客户端的位置信息,以便定位客户端和实现对客户端的安全和计费等控制。DHCP 中继或 DHCP Snooping 设备接收到客户端发送给服务器的请求报文后,在该报文中添加 Option82 ,并转发给服务器

  • Option82 最多可以包含 254 个子选项,若定义了 Option82 ,则至少要定义一个子选项
    • sub-option1(Agent Circuit ID Sub-option,代理线路 ID)
    • sub-option2(Agent Remote ID Sub-option,代理远程 ID)
    • sub-option5(Link-selection Suboption,链路选择)
    • sub-option6(Subscriber-ID Suboption,用户 ID)
    • sub-option9(Vendor-Specific Information Suboption,供应商特定信息)

      3)其他 Options 号

      | Options 号 | Options 作用 | | —- | —- | | 1 | 设置子网掩码 | | 3 | 设置网关地址 | | 4 | 设置时间服务器地址 | | 6 | 设置 DNS 服务器地址 | | 7 | 设置日志服务器地址 | | 12 | 设置 DHCP 客户端的主机名 | | 15 | 设置域名后缀 | | 17 | 设置根路径 | | 28 | 设置组播地址 | | 33 | 设置静态路由。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。如果存在 Option 121 ,则忽略该选项 | | 42 | 设置 NTP 服务器地址 | | 43 | 设置厂商自定义选项 | | 44 | 设置 NetBios 服务器 | | 46 | 设置 NetBios 节点类型 | | 50 | 设置请求 IP 地址 | | 51 | 设置 IP 地址租约时间 | | 52 | 设置 Option 附加选项 | | 53 | 设置 DHCP 消息类型 | | 54 | 设置服务器标识 | | 55 | 设置请求选项列表。客户端利用该选项指明需要从服务器获取哪些网络配置参数(内容为客户端请求参数的对应选项值) | | 56 | 设置消息选项,用于描述地址分配失败的原因
      - DHCP 服务器发送的 NAK 报文
      - DHCP 客户端发送的 DECLINE 报文或 RELEASE 报文
      - DHCP 中继探测到地址冲突时,发送的 DECLINE 报文;或者主动释放地址时,发送的 RELEASE 报文
      - DHCP Snooping 设备主动释放地址时,发送的 RELEASE 报文
      | | 58 | 设置续约 T1 时间,一般是租期时间的 50% | | 59 | 设置续约 T2 时间。一般是租期时间的 87.5% | | 60 | 设置厂商分类信息,用于标识 DHCP 客户端的类型和配置 | | 61 | 设置客户端标识 | | 66 | 设置 TFTP 服务器名,用来指定为客户端分配的 TFTP 服务器的域名 | | 67 | 设置启动文件名选项,用来指定为客户端分配的启动文件名 | | 77 | 设置用户类型标识 | | 120 | 设置 SIP 服务器 IP 地址(当前仅支持解析 IP 地址,不支持解析域名) | | 121 | 设置无分类路由。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),客户端收到该选项后,将在路由表中添加这些静态路由 | | 129 | 设置呼叫服务器地址 | | 184 | 保留选项,用户可以自定义该选项中携带的信息 |