DHCP协议
作者:互联网
概述
为了使用TCP/IP协议族,每台主机和路由器需要一定的配置信息。配置信息用于为系统指定本地名称,以及为接口指定标识符(例如IP地址)。它还用于提供或使用各种网络服务,例如域名系统(DNS)
和移动IP家乡代理
等。
为了获取上述信息,需要通过使用动态主机配置协议(DHCP)
以及IPv4和IPv6中的无状态地址自动配置
。除了上述基本要素之外,主机或路由器的配置信息可能还需要很多其它要素,这取决于它使用或提供的服务类型。
动态主机配置协议
动态主机配置协议(DHCP)
是一种流行的客户机/服务器协议,它用于为主机(有时也为路由器)指定配置信息。
它的设计基于一种早期协议——称为Internet引导程序协议(BOOTP)
,它目前已过时。BOOTP为客户提供有限的配置信息,但是没有提供一种机制来支持改变已提供的信息。而DHCP使用租用
的概念来扩展BOOTP模型,并且可提供主机操作所需的所有信息。BOOTP和DHCP同样使用UDP/IP。客户机使用端口68,服务器使用端口67。
DHCP由两个主要部分组成:
- 地址管理:用于IP地址的动态分配,并为客户机提供地址租用。
- 配置数据交付:包括DHCP协议的消息格式和状态机。
DHCP服务器可配置为三种地址分配方式:
- 动态分配:客户机从服务器配置的
地址池
中获得一个可撤销的IP地址。 - 自动分配:与动态分配相同,但是地址不可撤销。
- 手动分配:此时DHCP协议用于传输地址,但地址对于请求的客户机是不变的(即它不是由服务器维护的可分配池的一部分)。此时DHCP的作用如同BOOTP。
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选项。其中,各字段的解释如下:
- Op:用于表示消息是请求(1)还是应答(2)。
- HW类型:基于ARP使用的值,最常见的值是1(以太网)。
- HW长度:用于存放硬件MAC地址,对于类似以太网的网络,该值通常为6。
- 跳步:用于保存消息传输过程中的中继次数。消息发送方将该值设置为0,并在每次中继时递增。
- 事务ID:是由客户机选择的一个随机数,服务器需要将它复制到响应报文中。用于将应答与请求相匹配。
- 秒数:由客户机设置,它是第一次尝试申请或重新申请地址经过的秒数。
- 标志:当前只包含一个经过定义的位,称为
广播标志
。客户机可能在请求中设置该位,表示它们不能或不愿处理单播IP数据报,但可以处理广播数据报(例如当它们没有IP地址时)。通过设置该位通知服务器和中继代理,广播地址可用于响应中。 - 客户机IP地址:包括请求者的IP地址(如果已知),否则为0。
- "你的"IP地址:由服务器填写,以便像请求者提供服务器地址。
- 下一服务器IP地址:给出下一个服务器的地址,它用于客户机的引导过程。
- 网关(中继)IP地址:由DHCP或BOOTP中继器填写,它们在转发DHCP(BOOTP)消息时返回自己的地址。
- 客户机硬件地址:保存客户机的唯一标识符,并可由服务器以不同方式来使用,包括当某个客户机每次发送地址请求时为其分配相同IP地址。
- 其余字段并不是每次都需要填写,其中,服务器名和引导文件名分别表示服务器名和启动文件路径。这些字符串以null结尾。如果空间紧张,它们可用于保存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消息类型(通常为DHCPDISCOVER
和DHCPREQUEST
)。这种消息从地址0.0.0.0(端口68)发送到受限广播地址255.255.255.255(端口67)。其他方向的消息从服务器IP地址和端口67发送到本地IP广播地址和端口68。
在一次典型的DHCP交换中,客户机首先广播一个DHCPDISCOVER
消息。对于接收到请求的每台服务器,无论是直接接受还是通过中继代理,它们都会相应一个DHCPOFFER
消息,并在你的IP地址字段中包含提供的IP地址。其他配置选项(例如DNS服务器的IP地址、子网掩码)通常也包含在内。DHCPOFFER消息中包含如下内容:
- 租用时间:提供了在不更新租约的情况下地址可被租用的时间上限。
- 更新时间:是客户机从获得租约到尝试要求服务器更新租约的时间。
- 重新绑定时间:是客户机尝试要求DHCP服务器更新其地址的时间。
当接收到来自一台或多台服务器的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数据包如下:
1. DHCP请求报文
其中,DHCP请求报文的内容如下:
其源地址为0.0.0.0,目的地址为广播地址255.255.255.255。各字段的解释如下:
- Message type:消息类型,值为1,表示DHCP请求报文。
- Hardware type:硬件类型,值为1,表示以太网。
- Hardware address length:硬件地址长度,其值为6(常见值)。
- Hops:跳步字段,消息发送方将该值设置为0,并在每次中继时增加。
- Transaction ID:事务ID字段,由客户机选择的随机数,用于应答与请求相匹配。此处值为0x6f898f58。
- Seconds elapsed:秒数字段,此处值为0。
- Bootp flags:标志字段。
- Broadcast flag:广播标志,此处该值为0。
- Reserved falgs:保留字段。
- Client IP address:客户机IP地址,即请求者的IP地址,由于此时客户机未知其IP地址,故该值为0。
- Your(client) IP address:“你的”IP地址,由服务器填写,此处值为0.0.0.0。
- Next server IP address:下一跳服务器IP地址,此处值为0.0.0.0。
- Relay agent IP address:网关(中继)IP地址,由DHCP或BOOTP中继器填写,此处值为0.0.0.0。
- Client MAC address:客户机硬件地址。
- Clinet hardware address padding:客户机硬件地址填充。
- Server host name:服务器名。
- Boot file name:引导文件名。
- Magic Cookie:魔数Cookie值。以表示DHCP报文。
如图,Magic Cookie字段的十六进制值分别为63、82、53、63,分别对应于上文中提到的十进数值99、130、83和99。
2. DHCP应答报文
DHCP应答报文如下图所示:
其源地址是192.168.10.1,目的地址是192.168.10.155。各字段的解释如下:
- Message type:消息类型,值为2,表示DHCP应答报文。
- Hardware type:硬件类型,值为1,表示以太网。
- Hardware address length:硬件地址长度,其值为6(常见值)。
- Hops:跳步字段,消息发送方将该值设置为0,并在每次中继时增加。
- Transaction ID:事务ID字段,由客户机选择的随机数,用于应答与请求相匹配。此处值为上一个DHCP请求报文相同,即0x6f898f58。
- Seconds elapsed:秒数字段,此处值为0。
- Bootp flags:标志字段。
- Broadcast flag:广播标志,此处该值为0。
- Reserved falgs:保留字段。
- Client IP address:客户机IP地址,即请求者的IP地址,由于此时客户机未知其IP地址,故该值为0。
- Your(client) IP address:“你的”IP地址,即服务器为客户机所分配的IP地址,由服务器填写,此处值为192.168.10.155。
- Next server IP address:下一跳服务器IP地址,此处值为192.168.10.1。
- Relay agent IP address:网关(中继)IP地址,由DHCP或BOOTP中继器填写,此处值为0.0.0.0。
- Client MAC address:客户机硬件地址。
- Clinet hardware address padding:客户机硬件地址填充。
- Server host name:服务器名。
- Boot file name:引导文件名。
- Magic Cookie:魔数Cookie值。以表示DHCP报文。同上述的DHCP请求报文。
除此之外,在图中也可以看到报文中携带了众多选项,其中包括子网掩码、广播地址、DNS服务器地址、默认路由器等信息。其次,在下图中可以看到由DHCP服务器所提供的三个时间,即租用时间、更新时间和重新绑定时间:
DHCP中继
在最简单的网络中,一个DHCP服务器可供同一局域网中的客户机使用。但是,在更复杂的网络中,可通过一个或多个DHCP中继代理
来中继DHCP流量。
中继代理用于将DHCP操作扩展到跨越多个网段。如上图,网段A和网段B之间的中继会转发DHCP消息,并通过选项或填充空白字段使用额外消息来标识信息。注意,在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换。相反,它仅中继那些广播消息。这种消息通常在客户机首次获得自己的地址时交换。
当一台客户机获得一个IP地址,并且服务器的IP地址使用服务器标识
选项时,它可与服务器进行单播通信,而不经过中继。
标签:协议,客户机,地址,服务器,IP地址,DHCP,消息 来源: https://www.cnblogs.com/ain1/p/16210324.html