DHCP动态主机配置协议是1985年开发的引导协议(BOOTP)的扩展,它将诸如没有硬盘驱动器的终端和工作站之类的简单设备与引导服务器连接起来。然后,这些设备通过服务器访问您的操作系统。DHCP是作为大型网络和便携式计算机的解决方案而开发的。它补充了BOOTP和其他能够自动分配可重用网络地址以及其他配置选项的功能。
在RFC 1531和1541(均为1993)中对协议的第一次定义之后,最终的标准规范于1997年在RFC 2131中正式制定。互联网号码分配机构(IANA)分配了UDP端口67和68 (对于IPv6:端口546和547)到通信协议,它们也被分配给Bootstrap协议。
使用DHCP的地址分配根据客户端/服务器原理进行操作:连接寻求设备从DHCP服务器请求IP地址配置,DHCP服务器又访问从中获取需要设置的网络参数的数据库。除此之外,该服务器是现代DSL路由器的一部分,可以使用其数据库信息将以下设置分配给客户端:
唯一的IP地址
子网掩码
标准网关
DNS服务器
代理配置,如WPAD(Web代理自动发现协议)
DHCP进程:DHCP客户端和服务器的通信方式
通过动态主机配置协议自动分配地址分为四个步骤:
首先,向客户端发送一个DHCPDISCOVER包,其目标地址为255.255.255.255,源地址为0.0.0.0。通过这种广播,联系所有网络用户以定位可用的DHCP服务器并通知他们地址请求。理想情况下,只有一台服务器,因此分配没有任何复杂性。
广播应答所有正在侦听端口67并通过DHCPOFFER程序包等待相应请求的联系DHCP服务器。除了空闲IP地址和客户端的MAC地址外,还包含子网掩码以及服务器的IP地址和ID。
DHCP客户端从地址数据中选择它想要的那个,并通过DHCPREQUEST通知所需的服务器。所有其他服务器也将收到此消息,即使他们知道已做出有利于其他提供商的选择。客户端还要求服务器激活正在提供的数据。此外,DHCPREQUEST用于确认先前接收的参数。
最后,服务器确认TCP / IP参数,并使用DHCPACK包将它们发送回客户端。其中包含其他信息 – 例如,有关DNS,SMTP或POP3服务器的信息。DHCP客户端在本地保存收到的所有数据并连接到网络。如果服务器不再可用或在配置过程中已将IP分配给另一个客户端,则它将以DHCPNAK响应。
自动给定的地址与服务器数据库中的MAC地址一起保存,此时配置永久保存。设备始终使用分配的IP地址连接到网络,该地址被其他客户端阻止。这样做的缺点是,如果已经分配了整个地址范围,则新的DHCP客户端不会收到地址 – 即使某些IP不再被主动使用。
DHCP:手动和动态地址分配
使用动态地址分配时,遇到完全占用的地址范围的问题是不太可能的。原则上,这种方法很大程度上类似于自动分配,但存在一个小的,细微的差别:DHCP服务器传输的IP配置无限期无效,而是由管理员定义。这指定设备可以使用相应的IP地址访问网络的时间。在此时间窗口到期之前,标准客户端必须通过发送另一个DHCPREQUEST包来请求扩展。如果没有发生这种情况,则没有所谓的DHCP 刷新,服务器会再次提供有问题的地址。
虽然管理员与自动或动态分配选项没有多大关系,但情况与手动寻址完全不同。使用此方法(也称为静态DHCP),可通过DHCP服务器将可用IP地址手动分配给特定MAC地址,有效期没有限制。
由于管理中的工作量增加,这违背了动态主机配置协议的目的,因此这种类型的分配仅适用于非常小的应用场景。例如,如果服务器服务托管在相关计算机上,并且计算机也可以随时供其他网络用户使用,则静态IP是必需的。对于端口转发而言,IP地址保持不变也很重要。
DHCP通知域名系统
为了使客户端分配的IP地址在域中获得其完全限定名称,DNS服务器需要提供名称解析。如果更改了先前输入的地址或主机名,则名称服务器需要更新。随着不断变化的IP地址来自动态分配通过DHCP服务器。对于网络管理员以及想要在家中使用他们的设备连接到互联网的用户来说,手动实施将非常耗时。但是由于DHCP服务器,它们都不必处理动态分配所需的更新,因为服务器负责信息交换并更新DNS服务器 一旦分配了新的IP地址。
DHCP的安全性如何?
动态主机配置协议的一个弱点是操作容易:由于客户端联系所有可能的DHCP服务器,因此,例如,如果您有权访问该网络,攻击者可以将自己的提供商置于其中。一个这样的“流氓”DHCP服务器试图比实际服务器更快,并响应客户端的连接请求。如果成功,则可以传输受控或不可用的参数。为此,它可以在网络上启动拒绝服务攻击,例如,不传输网关,为每个客户端分配子网,或响应具有相同IP地址的所有请求。
更具戏剧性的情况是尝试使用虚假网关和虚假DNS信息来注入外部路由器,该外部路由器切断甚至重定向客户端的数据流量。这样攻击的目的 – 与第一种类型的攻击相反 – 不是为了使网络崩溃,而是为了访问银行数据,密码或地址信息等敏感数据。