DHCP协议详解——TCP/IP协议的配置信息

为了使用TCP/IP协议族,每台主机和路由器需要一定的配置信息。配置信息用于为系统指定本地名称,以及为接日指定标识符(例如IP地址)。多年来,已有很多方法可提供和获得这种信息,但基本上采用3种方法:手工获得信息,通过一个系统获得使用的网络服务,或使用某种算法自动确定。

1 DHCP究竟是个什么鬼?

DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,是一种流行的客户机/服务器协议,它用于为主机(有时也为路由器)指定配置信息。DHCP的设计基于一种早期协议一称为Intemet引导程序协议( BOOTP) ,它目前已过时.。BOOTP为客户提供有限的配置信息,并且没有提供一种机制来支持改变已提供的信息。
在这里插入图片描述

2 地址池和租用期

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

2.1 租用期时间确定

确定租用期的最佳数值需要对预期客户数、地址池大小和地址稳定性等因素加以权衡。较长的租用期通常会较快耗尽可用的地址池,但能提供更稳定的地址和减小网络开销(因为续租请求较少)。较短的租用期可为其他客户提供可用性更高的地址池,随之而来的是稳定性减小和网络流量负荷增大。常见的默认值包括12 - 24小时,取决于使用的DHCP服务器。微软建议较小的网络采用8天,较大的网络采用16 - 24天。客户机在租用期过半时开始尝试续订租约。

当服务器向客户机提供租用期时,服务器将租用信息保存在持久性存储器中,通常是非易失性内存或磁盘中。如果DHCP服务器重新启动并且运行良好,租约将保持完好。

3 DHCP和BOOTP消息格式

DHCP的报文在不同场景中的交互过程。但DHCP报文的精髓还在于DHCP Option,我们知道DHCP报文主要作用是,服务器给客户端分配IP。

DHCP扩展了BOOTP (它是DHCP的前身)。 DHCP消息格式的定义采用扩展BOOTP的方式,以保持两种协议之间的兼容性,这样即使在没有安装DHCP服务器的网络中,BOOTP客户机仍可使用DHCP服务器和BOOTP中继代理(见6.2.6节)支持DHCP服务。
消息格式包括一个固定长度的初始部分和一个可变长度的尾部。
在这里插入图片描述

  1. Op(操作)字段标识消息是请求(1)或应答(2)。
  2. HW类型(htype)字段的分配基于ARP 使用的值,并定义在相应的IANAARP参数页中[IARP],最常见的值是1 (以太网)。
  3. HW长度(hlen)字段用于存放硬件(MAC)地址,对于类似以太网的网络,该值通常为6。
  4. 跳步字段用于保存消息传输过程中的中继次数。消息发送方将该值设置为0,并在每次中继时递增。与IP数据报的生存期差不多。
  5. 事务ID是由客户机选择的一个(随机)数,服务器需要将它复制到响应中。它用于将应答与请求匹配。
  6. 秒数(Secs)字段由客户机设置,它是第一次尝试申请或重新申请地址经过的秒数。
  7. 标志字段当前只包含一个经过定义的位,称为广播标志。客户机可能在请求中设置该位,表示它们不能或不愿处理单播IP数据报,但可处理广播数据报(例如,由于它们没有IP地址)。
  8. 客户机IP地址(ciaddr)字段包括请求者的IP地址(如果已知),否则为0。
  9. “你的” IP地址(yiaddr)字段由服务器填写,以便向请求者提供服务器地址。
  10. 下一服务器IP地址(siaddr)字段给出下一个服务器的地址,它用于客户机的引导过程(例如,如果客户机需要下载一个可能需要由DHCP服务器之外的另一台服务器完成的操作系统镜像)。
  11. ’网关(中继) IP地址(giaddr)字段由DHCP或BOOTP中继器填写,它们在转发DHCP(BOOTP)消息时返回自已的地址。
  12. 客户机硬件地址(chaddr)字段保存客户机的唯一标识符,并可由服务器以不同方式来使用,包括当某个客户机每次发送地址请求时为其分配相同IP地址。这个字段通常保存客户机的MAC地址,它被用作一个标识符。目前,客户机标识符(6.2.3节和6.2.4节中描述的选项)是它的首选。
  13. 服务器名(sname)和引导文件名(file)字段。这些字段并不是每次都需要填写,它们分别包含64字节或128字节ASCⅡ字符,表示服务器名或启动文件路径。
  14. 最后一个字段最初在BOOTP中称为供应商扩展字段,其长度固定,现在称为选项字段,但是长度可变。

4 DHCP和BOOTP选项

服务器给客户端分配的信息可以有很多很多,比如服务器通过DHCP报文告诉客户端网关是谁、子网掩码是多少、DNS服务器是谁、NTP服务器是谁等等。而这些信息都是通过DHCP Option告诉给客户端。
在这里插入图片描述
在这里插入图片描述

5 DHCP协议操作

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

BTree二树:DHCP协议族操作
网址:https://www.bilibili.com/video/BV1Xg4y1b78J
在这里插入图片描述

6 DHCP状态机

DHCP协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型。图6-10描述了客户机的状态机。状态之间的转换(箭头)源于消息的接收和发送或超时。
在这里插入图片描述

7 DHCPv4

DHCPv4在TCP/IP协议详解:卷一协议(第二版)里面没有里面并没有非常具体的介绍,CSDN里面有关博文也是比较少,可能是因为DHCPv4确实比较老了,没什么用。

然后,我在:豌豆代理(这是一个做IP代理的网站)的《例说图解TCP/IP协议族–DDI篇(2)DHCPv4协议进阶》,网址:https://www.wandouip.com/t5i284825/

找到了一些内容介绍,但是博主确实不知道DHCPv4的内容(我找了TCP/IP协议详解:卷一协议(第二版)里面没有)。
然后与DHCPv6的对比可以看这篇博文:CSDN博主kdb_viewer的《DHCPV6 vs DHCPV4》,网址:https://blog.csdn.net/kdb_viewer/article/details/83310904

不做粘贴复制,别人原创文章的渣男所为。

8 DHCPv6

DHCP的报文在不同场景中的交互过程。但DHCP报文的精髓还在于DHCP Option,我们知道DHCP报文主要作用是,服务器给客户端分配IP。在无状态模式下,IPv6客户机认为自已能配置IPv6地址,但需要通过DHCPv6获得额外信息(例如DNS服务器地址)。

8.1 IPv6的生命周期

IPv6主机的每个接口通常拥有多个地址,并且每个地址都拥有一组计时器,以指出相应地址可使用多长时间和用于什么目的。在IPv6中,地址分配包含一个首选生命周期和一个有效生命周期。这些生命周期用于判断超时,将地址在自已的状态机中从一种状态转换为另一种状态。

IPv6地址的生命周期。临时地址仅用于DAD,直至被验证为唯一。此后,它们成为首选地址,并可无限制地使用,直至超时将其状态更改为废弃。废弃地址不能用于初始化新连接,并且可能在有效超时期满后不能使用。
在这里插入图片描述

8.2 DHCPv6消息格式(最有意义的信息携带在选项中)

DHCPv6消息封装为UDP/IPv6数据报,它使用客户机端日546和服务器端日547 。消息发送到中继代理或服务器,它使用一台主机的链路范围的源地址。这里存在两种消息格式,一种用于客户机与服务器之间,另一种用于中继代理。
在这里插入图片描述
左侧的消息格式中的消息类型包括典型的DHCP消息(REQUEST、 REPLY等),右侧的消息格式中的消息类型包括RELAYLFORW和RELAYLREPL,分别表示从中继代理转发和目的地是中继代理的消息。右侧的选项字段包括一个中继消息选项,其中包含中继转发的完整消息。其他选项也可包含在内。
在这里插入图片描述
在DHCPv6中,最有意义的信息携带在选项中,包括地址、租用时间、服务位置,以及客户端标识符和服务器标识符。这些选项使用的两个重要概念是身份关联( IA)和DHCP唯一标识符(DUID)。我们将在后面加以讨论。

8.3 身份关联

身份关联(IA)是用在DHCP客户机和服务器之间的一个标识符,用于指向一个地址集。每个IA包括一个IA标识符(IAID)和相关配置信息。每个请求DHCPv6分配地址的客户机接日至少需要一个IAo每个IA可以仅与一个接日相关联。客户机选择的IA的ID唯一地址标识每个IA,并将这个值与服务器共享。

当服务器响应一个请求时,它为客户机的IA分配一个或多个地址,分配时基于服务器管理员确定的一组地址分配策略。在通常情况下,这些策略依赖于请求所到达的链路、客户机的标准信息(DUID),以及DHCP选项中由客户机提供的其他信息。

在这里插入图片描述

8.4 DHCP唯一标识符(DUID)

DHCP唯一标识符(DUID)用于标识一台DHCPv6客户机或服务器,并被设计为可持续一段时间。服务器用它标识所选地址(作为IA的一部分)对应的客户机和配置信息,客户机用它标识感兴趣的服务器o DUID长度是可变的,对于大多数用途来说,客户机和服务器将它看作一个不透明的值。

DUID有三种类型:

  1. DUID—LIT :基于链路层地址和时间的DUID,它是推荐的格式。在硬件类型之后,它包括一个32位的时间,其中的秒数开始于2000年1月1目午夜(UTC)(mod232)。它将在2016年归零(返回0)。最后部分是一个可变长度的链路层地址。 链路层地址可由任何主机接口选择,并使用相同的DUID,一旦选定,它可用于与任何接口的通信。这种格式的DUID是稳定的,使网络接口从该DUID中移除。因此,它需要主机系统固定存储相关信息。
  2. DUID-EN : 基于企业编号和供应商分配的DUID。
  3. DUID类型 :但也不是只能创建这三种类型。

一个标准格式的DUID编码开始于一个2字节的标识符,用于指出哪种类型的DUID。当前列表由IANA维护。。在DUID-LIT和DUID-LL中,紧跟着是一个来自[RFCO826]的16位的硬件类型;在DUID-EN中,则是一个32位的专用企业编号。

8.5 DHCPv6协议操作(注意于上面有区别)

在这里插入图片描述

9 使用DHCP中继

在这里插入图片描述

在最简单的网络中,一个DHCP服务器可供同一局域网中的客户机使用。但是,在更复杂的网络中,可通过一个或更多DHCP中继代理来中继DHCP流量,以此来将DHCP操作扩展到跨越多个网段。

在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换。相反,它仅中继那些广播消息(或IPv6中的组播)。这种消息通常在客户机首次获得自已的地址时交换。

10 参考资料:

CSDN博主DHCP协议 详解的《DHCP协议 详解》,网址:https://blog.csdn.net/windeal3203/article/details/50677166?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主pythonchuxue的《DHCP原理及配置》,网址:https://blog.csdn.net/qq_41636653/article/details/81751060?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主kdb_viewer的《DHCPV6 vs DHCPV4》,网址:https://blog.csdn.net/kdb_viewer/article/details/83310904

豌豆代理(这是一个做IP代理的网站)的《例说图解TCP/IP协议族–DDI篇(2)DHCPv4协议进阶》,网址:https://www.wandouip.com/t5i284825/

TCP/IP协议详解(原书第二版)卷1:协议 P160-208

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章