动态主机配置协议 DHCP

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)常用于给主机动态地分配 IP 地址,它提供了即插即用的联网机制,这种机制允许一台计算机加入新的网络和自动获取 IP 地址而不用手工参与。DHCP 是应用层协议,它是基于 UDP 的,放在网络层讲是因为它解决的是 IP 地址的配置问题。

真题考 DHCP 发现报文的作用(2022)和四个报文的源地址、目的地址(2015、2022)。四个报文的 IP 地址只有两种写法:客户发出的源地址 0.0.0.0,服务器发出的源地址是服务器地址;目的地址一律 255.255.255.255。 本页的错题把 DHCP 报文和 ARP 报文放在一起,问哪些是”IP 层广播、链路层单播”。

机制

一台主机上网要配置什么

连接到互联网的计算机需要配置的项目包括:

  1. IP 地址;
  2. 子网掩码;
  3. 默认路由器的 IP 地址(默认网关);
  4. 域名服务器的 IP 地址。

DHCP 一次把这四项都配好。

DHCP 的工作过程

DHCP 使用客户/服务器模型。其工作原理是:需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文,这时该主机就成为 DHCP 客户。本地网络上的所有主机都能收到这个广播报文,但只有 DHCP 服务器才能回答该广播报文。DHCP 服务器先在其数据库中查找该计算机的配置信息:若找到,则返回找到的信息;若找不到,则从服务器的 IP 地址池中取一个地址分配给该主机。DHCP 服务器的回答报文称为提供报文,包含提供的 IP 地址等配置信息(DHCP 发现报文的作用 2022 年考过)。

DHCP 服务器和 DHCP 客户的交换过程如下(DHCP 发现报文的源地址和目的地址 2015、2022 年考过):

sequenceDiagram
  participant C as DHCP 客户
  participant S as DHCP 服务器
  C->>S: ① DHCP 发现(广播) 源 0.0.0.0 目的 255.255.255.255
  S->>C: ② DHCP 提供(广播) 源 服务器地址 目的 255.255.255.255
  C->>S: ③ DHCP 请求(广播) 源 0.0.0.0 目的 255.255.255.255
  S->>C: ④ DHCP 确认(广播) 源 服务器地址 目的 255.255.255.255
  1. DHCP 客户广播”DHCP 发现”消息,试图找到网络中的 DHCP 服务器,以便从 DHCP 服务器获得一个 IP 地址。源地址为 0.0.0.0,目的地址为 255.255.255.255。
  2. DHCP 服务器收到”DHCP 发现”消息后,广播”DHCP 提供”消息,其中包括提供给 DHCP 客户机的 IP 地址。源地址为 DHCP 服务器地址,目的地址为 255.255.255.255。
  3. DHCP 客户收到”DHCP 提供”消息,若接受该 IP 地址,则广播”DHCP 请求”消息向 DHCP 服务器请求提供 IP 地址。源地址为 0.0.0.0,目的地址为 255.255.255.255。
  4. DHCP 服务器广播”DHCP 确认”消息,将 IP 地址分配给 DHCP 客户。源地址为 DHCP 服务器地址,目的地址为 255.255.255.255。

租用期

DHCP 服务器分配给 DHCP 客户的 IP 地址是临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址,DHCP 称这段时间为租用期。租用期的数值应由 DHCP 服务器自己决定,DHCP 客户也可在自己发送的报文中提出对租用期的要求。DHCP 客户可随时提前终止服务器提供的租用期,这时只需向 DHCP 服务器发送释放报文。

为什么用广播、为什么用 UDP

DHCP 客户和服务器端需要通过广播方式来进行交互,原因是在 DHCP 执行初期,客户机不知道服务器端的 IP 地址,而在执行中间,客户机并未被分配 IP 地址,从而导致两者之间的通信必须采用广播的方式。

采用 UDP 而不采用 TCP 的原因也很明显:TCP 需要建立连接,若连对方的 IP 地址都不知道,则更不可能通过双方的套接字建立连接。

边界

第 ③ 步客户仍用 0.0.0.0。 客户在第 ② 步只是收到了一个”提供”,还没有得到确认,不能使用这个地址;直到第 ④ 步收到确认后才开始使用。

第 ③ 步仍然广播,是为了通知所有服务器。 网络中可能有多个 DHCP 服务器都发了提供报文,客户广播请求,被选中的服务器据此确认,其他服务器据此收回自己提供的地址。

0.0.0.0 只能作源地址,255.255.255.255 只能作目的地址。 前者表示”本网络上的本主机”(还没有地址),后者是受限广播,路由器不转发(4.2.2)。所以 DHCP 客户与服务器必须在同一个网络上,或者借助中继(见下方口径差异)。

IP 层广播不等于链路层广播。 DHCP 发现报文里写着客户的 MAC 地址,所以服务器回复的提供报文、确认报文虽然目的 IP 地址是 255.255.255.255,封装成帧时目的 MAC 地址却可以是客户主机的 MAC 地址;客户发出的发现、请求报文则不知道服务器在哪,IP 与 MAC 都是广播。

报文目的 IP 地址目的 MAC 地址
ARP 请求目的主机的 IP 地址广播
ARP 响应请求方的 IP 地址请求方的 MAC 地址
DHCP 发现、DHCP 请求255.255.255.255广播
DHCP 提供、DHCP 确认255.255.255.255客户主机的 MAC 地址

ARP 部分见 4.2.5。

错题复盘:目的 IP 广播而目的 MAC 单播的,只有 DHCP 提供报文和 DHCP 确认报文

王道 4.2.8 第 46 题:网络层的广播指的是目的 IP 地址是广播 IP 地址,数据链路层的广播指的是目的 MAC 地址是广播 MAC 地址,下列报文段封装成 IP 数据报和以太网 MAC 帧后,目的 IP 地址是广播地址,目的 MAC 地址是单播地址的是(Ⅰ. ARP 请求报文 Ⅱ. ARP 响应报文 Ⅲ. DHCP 发现报文 Ⅳ. DHCP 提供报文 Ⅴ. DHCP 请求报文 Ⅵ. DHCP 确认报文)。选项为 A. Ⅳ、Ⅵ B. Ⅰ、Ⅲ、Ⅵ C. Ⅱ、Ⅴ、Ⅵ D. Ⅲ、Ⅳ、Ⅴ、Ⅵ。答案 A。

按上表逐项核对:ARP 请求是目的 IP 为目的主机、目的 MAC 为广播,恰好反过来;ARP 响应两者都是单播;DHCP 发现与请求两者都是广播;DHCP 提供与确认的目的 IP 地址是 255.255.255.255,目的 MAC 地址是客户主机的 MAC 地址。

判断的依据是发送方此时知道对方什么:服务器已从发现报文中得知客户的 MAC 地址,但客户还没有可用的 IP 地址;客户对服务器则一无所知。

口径差异:DHCP 服务器的回复用什么目的 IP 地址

教材口径:DHCP 提供、DHCP 确认的目的 IP 地址为 255.255.255.255,目的 MAC 地址为客户主机的 MAC 地址(王道 4.2.9 第 46 题解析)。

标准口径(RFC 2131):客户若能在配置地址之前接收单播,服务器可以把回复直接发往分配给它的那个 IP 地址和它的 MAC 地址;客户在报文中置了广播标志时,服务器才用 IP 广播和链路层广播。客户与服务器不在同一网络时,由路由器上的 DHCP 中继代理转发这些报文。客户端口 68、服务器端口 67,都是 UDP。

考试按教材:四个报文的目的 IP 地址都是 255.255.255.255。

对照速查

说法对错
DHCP 是网络层协议❌(应用层,基于 UDP)
DHCP 发现报文的源 IP 地址是 0.0.0.0✅
DHCP 发现报文的目的 IP 地址是 DHCP 服务器的地址❌(255.255.255.255)
本地网络上的所有主机都能收到 DHCP 发现报文✅
DHCP 请求报文的源 IP 地址是服务器提供的地址❌(仍是 0.0.0.0)
DHCP 分配的地址可以永久使用❌(有租用期)
DHCP 能配置默认网关和域名服务器地址✅
DHCP 使用 TCP 以保证可靠❌(UDP)

考点

  • DHCP:应用层、基于 UDP、客户/服务器模型
  • 配置四项:IP 地址、子网掩码、默认网关、DNS 服务器地址
  • 发现 → 提供 → 请求 → 确认;源地址 0.0.0.0 或服务器地址,目的地址 255.255.255.255(2015、2022)
  • 为什么广播:不知道服务器地址、自己没有地址
  • 租用期、释放报文

链接