ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DHCP协议

2022-05-01 00:04:46  阅读:275  来源: 互联网

标签:协议 客户机 地址 服务器 IP地址 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消息类型(通常为DHCPDISCOVERDHCPREQUEST)。这种消息从地址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数据包如下:

image

1. DHCP请求报文

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

image

其源地址为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应答报文如下图所示:

image

其源地址是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服务器所提供的三个时间,即租用时间更新时间重新绑定时间

image

DHCP中继

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

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

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有