1. 引言
Dynamic Host Configuration Protocol (动态主机配置协议, DHCP) 向 Internet 主机提供配置参数. DHCP 由两个组件组成: 一个用于从 DHCP 服务器向主机交付主机特定配置参数的协议, 以及一个为主机分配网络地址的机制.
DHCP 构建在 client-server (客户端-服务器) 模型之上, 其中指定的 DHCP server 主机向动态配置的主机分配网络地址并交付配置参数. 在本文档其余部分中, 术语 "server" 指通过 DHCP 提供初始化参数的主机, 术语 "client" 指向 DHCP server 请求初始化参数的主机.
除非系统管理员明确配置主机作为 DHCP server, 否则主机不应充当 DHCP server. Internet 中硬件和协议实现的多样性意味着, 如果允许任意主机响应 DHCP 请求, 就无法可靠运行. 例如, IP 要求在协议实现软件中设置许多参数. 由于 IP 可以用于许多不同类型的网络硬件, 这些参数的值不能被猜测, 也不能假定存在正确默认值. 此外, 分布式地址分配方案依赖轮询/防御机制来发现已在使用的地址. IP 主机并不总是能够防御其网络地址, 因此不能保证这类分布式地址分配方案避免分配重复网络地址.
DHCP 支持三种 IP 地址分配机制. 在 "automatic allocation" (自动分配) 中, DHCP 为客户端分配永久 IP 地址. 在 "dynamic allocation" (动态分配) 中, DHCP 在有限时间内为客户端分配 IP 地址 (或直到客户端明确放弃该地址). 在 "manual allocation" (手动分配) 中, 客户端 IP 地址由网络管理员分配, DHCP 仅用于把已分配地址传达给客户端. 特定网络会根据网络管理员策略使用其中一种或多种机制.
在这些机制中, dynamic allocation 是唯一允许自动重用某个已不再被其原分配客户端需要的地址的机制. 因此, dynamic allocation 特别适合为仅临时连接到网络的客户端分配地址, 或在不需要永久 IP 地址的一组客户端之间共享有限 IP 地址池. 对于永久连接到网络的新客户端, 如果 IP 地址足够稀缺, 以至于旧客户端退役时回收地址很重要, dynamic allocation 也可能是很好的选择. Manual allocation 允许在出于任何原因希望在 DHCP 机制之外管理 IP 地址分配的环境中, 使用 DHCP 消除手工为主机配置 IP 地址这一容易出错的过程.
DHCP 消息格式基于 BOOTP 消息格式, 以捕获 BOOTP 规范 [7, 21] 中描述的 BOOTP relay agent 行为, 并允许现有 BOOTP 客户端与 DHCP 服务器互操作. 使用 BOOTP relay agents 可消除在每个物理网段上部署 DHCP server 的必要性.
1.1 对 RFC 1541 的更改
本文档更新了 RFC 1541 中的 DHCP 协议规范. 增加了一种新的 DHCP 消息类型 DHCPINFORM; 详情见第 3.4, 4.3 和 4.4 节. 用于向 DHCP servers 标识 DHCP clients 的分类机制已扩展, 包括第 4.2 和 4.3 节定义的 "vendor" 类. 已移除最小租约时间限制. 最后, 根据 DHCP 互操作性测试获得的经验, 进行了许多编辑性修改以澄清文本.
1.2 相关工作
有若干 Internet 协议和相关机制处理主机配置整体问题的某些部分. Reverse Address Resolution Protocol (RARP) [10] (通过 Dynamic RARP (DRARP) [5] 中定义的扩展) 明确处理网络地址发现问题, 并包含自动 IP 地址分配机制. Trivial File Transfer Protocol (TFTP) [20] 提供从启动服务器传输启动映像的能力. Internet Control Message Protocol (ICMP) [16] 通过 "ICMP redirect" 消息向主机通知其他路由器. ICMP 还可以通过 "ICMP mask request" 消息提供子网掩码信息, 并通过已废弃的 "ICMP information request" 消息提供其他信息. 主机可以通过 ICMP router discovery 机制 [8] 定位路由器.
BOOTP 是一组配置信息的传输机制. BOOTP 也可扩展, 并且已经为若干配置参数定义了官方扩展 [17]. Morgan 提出了 BOOTP 的动态 IP 地址分配扩展 [15]. MIT Athena 项目使用的 Network Information Protocol (NIP) 是一种用于动态 IP 地址分配的分布式机制 [19]. Resource Location Protocol RLP [1] 提供较高层服务的定位能力. Sun Microsystems 无盘工作站使用一种启动过程, 该过程采用 RARP, TFTP 和称为 "bootparams" 的 RPC 机制, 向无盘主机交付配置信息和操作系统代码. (Sun Microsystems, Sun Workstation 和 SunOS 是 Sun Microsystems, Inc. 的商标.) 一些 Sun 网络还使用 DRARP 和自动安装机制, 自动配置现有网络中的新主机.
在其他相关工作中, path minimum transmission unit (MTU) discovery 算法可以确定任意 internet 路径的 MTU [14]. Address Resolution Protocol (ARP) 已被提议作为资源定位和选择的传输协议 [6]. 最后, Host Requirements RFCs [3, 4] 提到了主机重新配置的具体要求, 并建议了无盘主机初始配置的场景.
1.3 问题定义和议题
DHCP 旨在向 DHCP clients 提供 Host Requirements RFCs 中定义的配置参数. 通过 DHCP 获取参数后, DHCP client 应能与 Internet 中任何其他主机交换分组. DHCP 提供的 TCP/IP 栈参数列在 Appendix A 中.
并非所有这些参数都是新初始化客户端必需的. 客户端和服务器可以协商, 仅传输客户端所需或特定于某个子网的参数.
DHCP 允许但不要求配置与 IP 协议不直接相关的客户端参数. DHCP 也不处理新配置客户端在 Domain Name System (DNS) [12, 13] 中的注册.
DHCP 不用于配置路由器.
1.4 要求
在本文档中, 用于定义特定要求重要性的词语均大写. 这些词语是:
"MUST"
该词或形容词 "REQUIRED" 表示该项是本规范的绝对要求.
"MUST NOT"
该短语表示该项是本规范的绝对禁止事项.
"SHOULD"
该词或形容词 "RECOMMENDED" 表示在特定情况下可能存在忽略该项的有效理由, 但在选择不同做法之前, 应理解其完整影响并仔细权衡.
"SHOULD NOT"
该短语表示在特定情况下所列行为可能是可接受甚至有用的, 但在实现带有该标签描述的任何行为之前, 应理解其完整影响并仔细权衡.
"MAY"
该词或形容词 "OPTIONAL" 表示该项确实是可选的. 例如, 一个供应商可能因为特定市场需要或因为它能增强产品而选择包含该项; 另一个供应商则可能省略同一项.
1.5 术语
本文档使用以下术语:
"DHCP client"
DHCP client 是使用 DHCP 获取网络地址等配置参数的 Internet 主机.
"DHCP server"
DHCP server 是向 DHCP clients 返回配置参数的 Internet 主机.
"BOOTP relay agent"
BOOTP relay agent 或 relay agent 是在 DHCP clients 和 DHCP servers 之间传递 DHCP 消息的 Internet 主机或路由器. DHCP 设计为使用 BOOTP 协议规范中记录的相同 relay agent 行为.
"binding"
binding 是与 DHCP client 关联或 "绑定" 的配置参数集合, 至少包含一个 IP 地址. Bindings 由 DHCP servers 管理.
1.6 设计目标
以下列表给出 DHCP 的一般设计目标.
-
DHCP 应是一种机制而不是策略. DHCP 必须允许本地系统管理员在需要时控制配置参数; 例如, 本地系统管理员应能在需要时强制执行关于本地资源分配和访问的本地策略.
-
客户端不应需要手工配置. 每个客户端都应能够在无用户干预的情况下发现适当的本地配置参数, 并将这些参数纳入自身配置.
-
网络不应需要为单个客户端进行手工配置. 在正常情况下, 网络管理员不应必须输入任何每客户端配置参数.
-
DHCP 不应要求每个子网上都有服务器. 为了规模和经济性, DHCP 必须能够跨路由器工作, 或通过 DHCP relay agents 介入工作.
-
DHCP client 必须准备好接收对配置参数请求的多个响应. 一些安装可能包含多个重叠 DHCP servers, 以增强可靠性并提高性能.
-
DHCP 必须与静态配置且不参与 DHCP 的主机以及现有网络协议实现共存.
-
DHCP 必须与 RFC 951 和 RFC 1542 [21] 描述的 BOOTP relay agent 行为互操作.
-
DHCP 必须向现有 BOOTP clients 提供服务.
以下列表给出特定于网络层参数传输的设计目标. DHCP 必须:
-
保证任一特定网络地址在同一时间不会被超过一个 DHCP client 使用,
-
在 DHCP client 重启后保留 DHCP client 配置. 只要可能, DHCP client 应在每次请求响应中被分配相同配置参数 (例如网络地址),
-
在服务器重启后保留 DHCP client 配置, 并且只要可能, 即使 DHCP 机制重启, DHCP client 仍应被分配相同配置参数,
-
允许自动向新客户端分配配置参数, 避免为新客户端手工配置,
-
支持向特定客户端固定或永久分配配置参数.