其他分享
首页 > 其他分享> > DHCP协议

DHCP协议

作者:互联网

概述

为了使用TCP/IP协议族,每台主机和路由器需要一定的配置信息。配置信息用于为系统指定本地名称,以及为接口指定标识符(例如IP地址)。它还用于提供或使用各种网络服务,例如域名系统(DNS)移动IP家乡代理等。

为了获取上述信息,需要通过使用动态主机配置协议(DHCP)以及IPv4和IPv6中的无状态地址自动配置。除了上述基本要素之外,主机或路由器的配置信息可能还需要很多其它要素,这取决于它使用或提供的服务类型。

动态主机配置协议

动态主机配置协议(DHCP)是一种流行的客户机/服务器协议,它用于为主机(有时也为路由器)指定配置信息。

它的设计基于一种早期协议——称为Internet引导程序协议(BOOTP),它目前已过时。BOOTP为客户提供有限的配置信息,但是没有提供一种机制来支持改变已提供的信息。而DHCP使用租用的概念来扩展BOOTP模型,并且可提供主机操作所需的所有信息。BOOTP和DHCP同样使用UDP/IP。客户机使用端口68,服务器使用端口67

DHCP由两个主要部分组成:

DHCP服务器可配置为三种地址分配方式:

1. 地址池和租用

在动态分配中,DHCP客户机请求分配一个IP地址。服务器从可用的地址池中选择一个地址作为响应。在通常情况下, 这个池是专门为DHCP用途而分配的一个连续的IP地址范围。分配给客户机的地址只在一段特定时间内有效,这段时间称为租用期

当发送DHCP请求时,客户机需要向服务器提供信息。这些信息可包括客户机名称请求的租用期已使用或最后使用过的地址副本其他参数。当服务器接收到这个请求时,它可利用客户机提供的信息,结合其他从外部获得的信息,决定在响应中提供的地址和配置信息。

2. DHCP和BOOTP的消息格式

DHCP扩展了BOOTP。DHCP消息格式的定义采用扩展BOOTP的方式,以保持两种协议之间的兼容性,这种即使在没有安装DHCP服务器的网络中,BOOTP客户机仍可以使用DHCP服务器和BOOTP中继代理以支持DHCP服务。其消息格式包括一个固定长度的初始部分和一个可变长度的尾部。

如图为BOOTP的消息格式。BOOTP消息格式采用适当的分配方案保存DHCP消息。通过这种方式,BOOTP中继代理可处理DHCP消息,BOOTP客户机可使用DHCP服务器。如果有必要,服务器名和引导文件名字段可携带DHCP选项。其中,各字段的解释如下:

3. DHCP协议操作

DHCP消息是带有一组特殊选项的BOOTP消息。当一台新的客户机连接到网络时,它首先发现可用的DHCP服务器,以及它们能够提供的地址。然后,它决定使用哪台服务器和哪个地址,并向提供该地址的服务器发送请求(同时将其选择通知所有服务器)。除非服务器在此期间已将该地址分配出去,否则它通过确认将地址分配给请求的客户机。

如图所示,为一次典型的DHCP交换过程:

客户机通过广播消息发现一组服务器和可提供的地址,它请求自己想获得的地址,并接收到选定服务器的确认。事务ID(xid)用于请求和响应匹配,服务器ID指出哪台服务器提供地址,并承诺将它与客户机绑定。如果客户机知道它想获得的地址,该协议可简化为仅使用REQUEST和ACK消息。

发送请求的客户机将BOOTP的Op字段设置为BOOTREQUEST,并将选项字段的前4字节分别设置为十进制值99、130、83、99。客户机向服务器发送消息,使用UDP/IP数据报,其中包含一个BOOTP的BOOTREQUEST操作和相应的DHCP消息类型(通常为DHCPDISCOVERDHCPREQUEST)。这种消息从地址0.0.0.0(端口68)发送到受限广播地址255.255.255.255(端口67)。其他方向的消息从服务器IP地址和端口67发送到本地IP广播地址和端口68。

在一次典型的DHCP交换中,客户机首先广播一个DHCPDISCOVER消息。对于接收到请求的每台服务器,无论是直接接受还是通过中继代理,它们都会相应一个DHCPOFFER消息,并在你的IP地址字段中包含提供的IP地址。其他配置选项(例如DNS服务器的IP地址、子网掩码)通常也包含在内。DHCPOFFER消息中包含如下内容:

当接收到来自一台或多台服务器的DHCPOFFER消息后,客户机确定自己接受哪个DHCPOFFER,并广播一个包含服务器标识符选项的DHCPREQUEST消息。请求的IP地址选项设置为由选中的DHCPOFFER消息提供的地址。多台服务器可能接收到广播的DHCPREQUEST消息,但只有DHCPREQUEST消息中的标识的服务器同意将该地址进行绑定;其他服务器清除与该请求相关的状态。

在完成绑定后,选中的服务器响应一个DHCPACK消息,通知客户机现在可以使用该地址。如果服务器无法分配包含在DHCPREQUEST消息中的地址,该服务器将会响应一个DHCPNAK消息。

当客户机接受一个DHCPACK消息和其他相关的配置信息时,它可以探测网络以确保获得的地址未被使用(例如向该地址发送一个ARP请求以执行ACD)。如果客户机确定该地址已被使用,客户机就不使用该地址,并向服务器发送一个DHCPDECLINE消息,通知该地址不能使用。在经过默认的10秒延时后,客户机可以重试。

如果一台客户机在租约到期前放弃该地址,它将发送一个DHCPRELEASE消息。

在客户机已有一个IP地址并希望仅更新其租约的情况下,它可以跳过最初的DHCPDISCOVER/DHCPOFFER消息。取而代之的是,客户机通过一个DHCPREQUEST消息请求当前正在使用的地址。如果客户机已有一个地址,它不需要更新该地址,但需要其他的配置信息,则可以使用DHCPINFORM消息来代替DHCPREQUEST消息,以表明它使用现有地址,但希望获得额外的信息。

4. DHCP状态机

DHCP协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型。如图所示,其中时间T1、T2分别代表更新时间重新绑定时间

客户机开始于INIT状态,这是没有信息,并广播DHCPDISCOVER消息。在选择状态时,它接受DHCPOFFER消息,直到决定自己使用哪个IP地址和服务器。当它做出选择时,通过一个DHCPREQUEST消息来响应并进入请求状态。这时,它可能接收来自不需要的地址的ACK。

如果它没有发现需要的地址,发送一个DHCPDECLINE消息,并转换到INIT状态。但是,更有可能出现的情况是,它接收到一个自己需要的地址的DHCPACK消息,接收它,获得超时时间T1和T2,并进入绑定状态,这时就能使用这个地址直至到期。

当第一个计时器T1,即更新时间到期时,客户机进入更新状态并尝试重新建立租约。如果它接收到一个新的DHCPACK,则客户机重新进入绑定状态。如果这个过程失败,且T2,即重新绑定时间到期,则会导致客户机尝试从任意服务器重新获得一个地址。

如果租用期到期,客户机必须放弃所租用的地址,如果没有可选的地址或可用的网络连接,这时它将断开网络连接。

抓包分析

通过Wireshark抓取的DHCP数据包如下:

image

1. DHCP请求报文

其中,DHCP请求报文的内容如下:

image

其源地址为0.0.0.0,目的地址为广播地址255.255.255.255。各字段的解释如下:

如图,Magic Cookie字段的十六进制值分别为63、82、53、63,分别对应于上文中提到的十进数值99、130、83和99。

2. DHCP应答报文

DHCP应答报文如下图所示:

image

其源地址是192.168.10.1,目的地址是192.168.10.155。各字段的解释如下:

除此之外,在图中也可以看到报文中携带了众多选项,其中包括子网掩码广播地址DNS服务器地址默认路由器等信息。其次,在下图中可以看到由DHCP服务器所提供的三个时间,即租用时间更新时间重新绑定时间

image

DHCP中继

在最简单的网络中,一个DHCP服务器可供同一局域网中的客户机使用。但是,在更复杂的网络中,可通过一个或多个DHCP中继代理来中继DHCP流量。

中继代理用于将DHCP操作扩展到跨越多个网段。如上图,网段A和网段B之间的中继会转发DHCP消息,并通过选项或填充空白字段使用额外消息来标识信息。注意,在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换。相反,它仅中继那些广播消息。这种消息通常在客户机首次获得自己的地址时交换。

当一台客户机获得一个IP地址,并且服务器的IP地址使用服务器标识选项时,它可与服务器进行单播通信,而不经过中继。

标签:协议,客户机,地址,服务器,IP地址,DHCP,消息
来源: https://www.cnblogs.com/ain1/p/16210324.html