DHCP 分配 IP 初探

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfengdiandia/article/details/84843669

一. 概念

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是一个使用 UDP 的局域网网络协议。

1.1. 作用

  • 为内网用户动态分配 IP 地址,或 ISP 为用户动态分配 IP 地址
  • 内网管理员管理所有电脑的手段

1.2. 为什么要使用 DHCP

网络上的设备需要有 IP 才能访问网络及其资源。如果没有 DHCP:

  • 需要手动为设备配置 IP 地址
  • 需要手动回收从网络移除的设备的 IP 地址

二. DHCP 原理

DHCP 服务器维护一个 IP 地址池,为启用 DHCP 的客户端动态分配 IP 地址,客户端可以在预定义的期限内使用该 IP 地址。

2.1. DHCP 分配 IP 过程

  • DHCP 发现(DISCOVER)
  • DHCP 提供(OFFER)
  • DHCP 请求(REQUEST)
  • DHCP 确认(ACK)

2.1.1. DISCOVER

DHCP Client 启动时没有 IP,会发送源地址为 0.0.0.0,目的地址为 255.255.255.255 的 DHCPDISCOVER 广播报文。网络上支持 TCP/IP 的机器都会收到该报文,但只有 DHCP Server 会对该报文做出相应。

2.1.2. OFFER

DHCP Server 收到 DHCPDISCOVER 报文后,通过解析报文,查询 dhcpd.conf 配置文件,如果在地址池中能找到合适的 IP 地址,DHCP Server 会给 DHCP Client 发送 DHCPOFFER 报文。

2.1.3. REQUEST

当 DHCP Client 收到 DHCPOFFER 报文时,它会发送一个 DHCPREQUEST 请求报文。

如果 Client 收到多个 DHCP Server 返回的 DHCPOFFER,可以选择等待多个响应。Client 根据 DHCPOFFER 中提供的配置参数选择一个 DHCP Server,广播 DHCPREQUEST 消息,该消息必须包含“服务器标识符”选项以指示它选择了哪个服务器。

DHCPREQUEST 消息是通过 DHCP/BOOTP 中继代理进行广播,为了确保 BOOTP 将 DHCPREQUEST 消息转发到接收原始 DHCPDISCOVER 消息的同一组 DHCP Server,DHCPREQUEST 消息必须在 DHCP 消息头的 secs 字段中使用相同的值并发送到相同的 IP 广播地址作为原始 DHCPDISCOVER 消息。

如果 Client 没有收到 DHCPOFFER 消息,则 Client 超时并重新发送 DHCPDISCOVER 消息。

2.1.4. ACK

DHCP Server 接收 DHCPREQUEST 广播报文,DHCPREQUEST 消息中选择的 DHCP Server 将 Client 的绑定提交到持久存储,并使用包含 Client 请求的配置参数的 DHCPACK 消息进行响应。

如果所选的 DHCP Server 不能满足 DHCPREQUEST 消息,则响应 DHCPNAK 消息。

2.1.5. 完成配置

Client 收到带有配置参数的 DHCPACK 消息,检查消息中的租约时间。

如果 Client 收到 DHCPNAK 消息,则重新进行配置过程。

2.1.6. DHCP Client 和 Server 交换消息图

在这里插入图片描述

分配新 IP 时 DHCP Client 和 Server 之间交换消息的时间图

    Server          Client          Server
(not selected)                    (selected)

      v               v               v
      |               |               |
      |     Begins initialization     |
      |               |               |
      | _____________/|\____________  |
      |/DHCPDISCOVER | DHCPDISCOVER  \|
      |               |               |
  Determines          |          Determines
 configuration        |         configuration
      |               |               |
      |\              |  ____________/|
      | \________     | /DHCPOFFER    |
      | DHCPOFFER\    |/              |
      |           \   |               |
      |        Collects replies       |
      |             \ |               |
      |     Selects configuration     |
      |               |               |
      | _____________/|\____________  |
      |/ DHCPREQUEST  |  DHCPREQUEST\ |
      |               |               |
      |               |     Commits configuration
      |               |               |
      |               | _____________/|
      |               |/ DHCPACK      |
      |               |               |
      |    Initialization complete    |
      |               |               |
      .               .               .
      .               .               .
      |               |               |
      |      Graceful shutdown        |
      |               |               |
      |               |\ ____________ |
      |               | DHCPRELEASE  \|
      |               |               |
      |               |        Discards lease
      |               |               |
      v               v               v

2.2. 续约

Client 的租约到期后 IP 会被 DHCP Server 收回,所以 Client 如果想继续使用该 IP,需要在到达租约期限的一半时向 DHCP Server 发起 DHCPREQUEST 消息来延长租约。

参考

https://tools.ietf.org/html/rfc2131

https://docs.microsoft.com/en-us/windows-server/networking/technologies/dhcp/dhcp-top

https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

猜你喜欢

转载自blog.csdn.net/fengfengdiandia/article/details/84843669