跳至内容

通信网络/DHCP协议

来自维基教科书,开放世界中的开放书籍

动态主机配置协议

[编辑 | 编辑源代码]

动态主机配置协议 (DHCP) 允许手动和自动分配 IP 地址(参见 IETF rfc 2131 & 2132)。当新机器加入网络或现有机器尝试续租其 IP 地址时,就会使用 DHCP。DHCP 是一个较旧的协议(称为“引导协议”[BOOTP])的扩展,并且与 BOOTP 向后兼容。IP 地址分配有三种方法

   Manual:     An administrator manually assigns the IP address; tedious but most secure method.
   Automatic:  DHCP server assigns permanent IP address to requesting client.
   Dynamic:    DHCP server "leases" IP address to requesting client. The IP address is only valid for a limited period of time;
               after which the client must request a renewal or ask for a new IP address.

到目前为止,最常见(也是最详细)的方法是动态方法,我们将把注意力集中在动态方法上。以下图表显示了新客户端请求 IP 地址的典型顺序。请注意,此描述显示 DHCP 服务器位于与新客户端不同的网络段上。但这并不是必需的。


图 1

在图 1 中,一个新加入网络的客户端需要一个 IP 地址。由于它不知道 DHCP 服务器的位置,因此客户端在本地网络上广播 (步骤 1) 一个 DHCPDISCOVER 消息。消息包包含硬件标识符(通常是 MAC 地址)、源端口 (68)、目标 IP (255.255.255.255)、目标端口 (67) 和一个随机生成的交易 ID。可选地,客户端可以在消息中指定它想要的 IP 地址和租赁期限。DHCP 中继器接收到广播消息后,它会使用网关 IP 地址 10.1.2.9 填充数据包的 "giaddr" 字段。此信息至关重要,因为 DHCP 服务器需要它来确定客户端位于哪个子网,从而确定要分配给客户端的 IP 地址。之后,DHCPDISCOVER 消息通过单播 (步骤 2) 中继到 DHCP 服务器。单播而不是广播就足够了,因为 DHCP 中继器知道 DHCP 服务器的确切位置。出于同样的原因,DHCP 中继器不允许另一个网络段 10.1.1.X 接收消息。

DHCP 服务器接收到 DHCPDISCOVER 请求后,会分配一个 IP 地址,将其标记为已使用,然后将 DHCPOFFER 消息广播回请求的客户端。此消息包包含 DHCP 服务器的 IP 地址、客户端的硬件标识符、相同的交易 ID 以及分配给客户端的 IP 地址。可选地,消息还可以包含租赁时间、子网掩码、默认 TTL、默认路由器以及许多其他参数。

图 2

在图 2 中,DHCP 服务器为客户端分配新的 IP 地址 10.1.2.3,并将 DHCPOFFER 消息广播到其网络 (步骤 3)。当 DHCP 中继器看到 DHCPOFFER 广播时,它会将广播中继到 10.1.2.X 网络,并且仅限于该网络 (步骤 4)。新客户端看到 DHCPOFFER 消息后,会接受该 IP 地址 (步骤 5) 并准备使用 DHCPREQUEST 数据包向 DHCP 服务器发送确认消息。请注意,客户端不必接受此 IP 地址,在这种情况下,它不会发送 DHCPREQUEST 消息。如果多个 DHCP 服务器发送 DHCPOFFER,则客户端可以选择接受哪个服务器。如果由于某种原因,DHCPOFFER 消息始终无法到达,则客户端会重新广播 DHCPDISCOVER 消息。

图 3

如果客户端在初始 DHCPDISCOVER 消息中包含了可选信息,则它必须在后续的 DHCPREQUEST 消息中包含相同的信息。在图 3 的步骤 6 中,新客户端通过向 DHCP 服务器广播 DHCPREQUEST 来确认它想要使用 IP 地址 10.1.2.3。DHCP 服务器接收到此消息后(再次借助 DHCP 中继器),它首先确保它是预期的目标,因为客户端可能正在响应另一个 DHCP 服务器。如果此 DHCP 服务器不是预期目标,那么它知道其他 DHCP 服务器正在处理此客户端。因此,此 DHCP 服务器可以丢弃之前分配给该客户端的任何 IP 地址。如果此 DHCP 服务器是预期的接收者,则它必须验证它在之前发送给此客户端的 DHCPOFFER 消息中指定的所有可选参数是否仍然有效。假设到目前为止一切都正常,则 DHCP 服务器会发送 DHCPACK 广播 (步骤 8) 来告诉客户端现在可以正式使用其新的 IP 地址。但是,如果出现问题,则会广播 DHCPNACK。无论哪种方式,DHCPACK 或 DHCPNACK 将是 DHCP 服务器在动态 IP 地址分配序列中发送的最后一条消息。

假设客户端收到了路由器中继的 DHCPACK (步骤 9),则建议客户端验证没有其他主机使用相同的 IP 地址。这通常通过简单的 ARP 探测来完成。对探测的任何响应都意味着另一个客户端已经在使用该 IP 地址。在这种情况下,客户端必须向 DHCP 服务器发送 DHCPDECLINE 消息。之后,客户端将需要从 DHCPDISCOVER 阶段重新开始整个过程。在大多数情况下,客户端的 ARP 探测没有响应。这意味着客户端可以继续使用分配的 IP 地址以及消息包中存储的任何其他可选信息。

如果客户端收到的是 DHCPNAK 而不是 DHCPACK,那么它别无选择,只能从头开始,即从 DHCPDISCOVER 阶段开始。最后,如果客户端在一定时间段后没有收到任何 DHCPACK 或 DHCPNAK 消息,那么它会重新广播 DHCPREQUEST 消息。

其他 DHCP 消息

[编辑 | 编辑源代码]
  IP Renewal:  If the client wishes to renew its existing IP address (usually because of expiring lease), it unicasts a special  
               DHCPREQUEST message that indicates it's renewing (and not asking for new) IP address. The DHCP server can choose 
               to extend the lease or reject it. Either way, it must inform the client via a DHCPACK message.
  Release IP:  The client can request its current IP address be relinquished by issuing a DHCPRELEASE message (via unicast) to          
               the DHCP server. The message packet must contain the IP address and the hardware identifier of the client. Upon 
               receipt, the DHCP server marks the client's IP address as unallocated.
  Inform:      The client already has an IP address but needs additional configuration parameters, such as default TTL, subnet 
               mask, etc. So it sends a DHCPINFORM message to the DHCP server. In response, the DHCP server unicasts a DHCPACK


安全问题

[编辑 | 编辑源代码]

DHCP 本质上是不安全的,因为它没有内置的认证机制。以下是一些安全弱点的示例。

  Problem:  The DHCP server does not know if requests are from a legitimate new client or a rogue host pretending to be one.
  Impact:   This could lead to IP addresses allocated to spoofed MAC addresses that don't exist, and eventually exhaust the pool  
            of legitimate IP addresses. Thus new hosts cannot added to the network.
  Solution: Manually assign IP addresses or manually verify every new client requesting IP address. Can also audit the DHCP 
            database. But these are all fairly time-consuming. No simple way to address this issue.
  Problem:  A new client doesn't know if responses are coming from real DHCP server or rogue host pretending to be a DHCP server.
  Impact:   If the client accepts all the information given to it by the rogue DHCP server, then false information (e.g. bad 
            subnet mask) could render the client useless.
  Solution: Can identify fake DHCP servers by using security tools that send out DHCPDISCOVER & DHCPREQUEST messages and flag any
            suspicious information returned.


动态主机配置协议 (DHCP) 是一种方便但并不安全的为新添加到网络的主机分配 IP 地址的技术。它还可以用于延长现有 IP 地址的租赁期限、删除主机的 IP 地址或向请求的主机提供初始配置参数。

问题

  1. 使用 DHCP 部分中说明的示例,解释如果 DHCP 服务器位于与新客户端相同的网络段上,新客户端与 DHCP 服务器之间的交互将如何改变。
  2. (T/F) 新客户端在收到 DHCPOFFER 后的 IP 地址后,应该验证没有其他主机正在使用该 IP 地址。

答案

  1. 唯一的区别是 DHCP 中继器不会参与。因此,DHCP 服务器接收的是广播而不是单播,消息包的 "igaddr" 字段将为空。
  2. 错误 - 客户端必须等待 DHCPACK(而不是 DHCPOFFER),因为在收到 DHCPACK 之前,IP 地址尚未正式分配给新客户端。

参考文献

[编辑 | 编辑源代码]

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

http://www.windowsecurity.com/articles/DHCP-Security-Part1.html

http://www.eventhelix.com/RealtimeMantra/Networking/DHCP.pdf

华夏公益教科书