TCPIP详解 卷1协议 六 DHCP和自动配置

6.1------DHCP和自动配置

为了使用 TCP/IP 协议族,每台主机和路由器需要一定的配置信息。基本上采用3种方法:手工获得信息;通过一个系统获得使用的网络服务;使用某种算法自动确定。

拥有一个IP 地址和子网掩码,以及 DNS 服务器和路由器的IP 地址,这是一个系统能够在Internet上运行并提供常用服务的"基本要素"。

除了上述基本要素之外,主机或路由器的配置信息可能还需要很多其他要素,这取决于它使用或提供的服务类型。它们可能包括家乡代理、组播路由器、VPN网关和会话发起协议(SIP)/VoIP 网关的位置。

6.2------动态主机配置协议(DHCP)

DHCP是一种流行的客户机/服务器协议,它用于为主机(有时也为路由器)指定配置信息。通常使用 DHCP 获得 IP 地址、子网掩码、路由器的IP 地址、DNS 服务器的 IP 地址。DHCP 的最初设想是供 IPv4 使用,IPv6 使用的 DHCP 版本是DHCPv6,IPv6还支持自己的自动程序来确定配置信息。在一种混合配置模式中,IPv6 自动配置和 DHCPv6 可结合使用。

DHCP 的设计基于一种早期协议------称为Internet引导程序协议(BOOTP),它目前已过时。BOOTP为客户提供有限的配置信息,并且没有提供一种机制来支持改变已提供的信息。DHCP 使用租用的概念来扩展 BOOTP模型,并且可提供主机操作所需的所有信息。租用允许客户机使用一个商定的时间来配置信息。客户机可向DHCP 服务器请求续订租约,并继续操作。在这个意义上,BOOTP 和 DHCP 是向后兼容的,纯 BOOTP 客户端可使用 DHCP 服务器,DHCP 客户端也可使用纯 BOOTP 服务器。因此,BOOTP和DHCP同样使用UDP/IP。客户机使用端口68,服务器使用端口67。

DHCP 由两个主要部分组成:

  • 地址管理:用于IP 地址的动态分配,并为客户机提供地址租用。
  • 配置数据交付:包括DHCP协议的消息格式和状态机。

DHCP服务器可配置为提供三种地址分配:

  • 自动分配:客户机从服务器配置的地址池(通常为一个预定义的范围)中获得一个不可撤销的IP 。
  • 动态分配:最常用方法。客户机从服务器配置的地址池(通常为一个预定义的范围)中获得一个可撤销的IP 地址。
  • 手动分配:DHCP 协议用于传输地址,但地址对于请求的客户机是不变的(即它不是由服务器维护的可分配池的一部分)。DHCP 的作用如同 BOOTP。

三者之间的差异是地址分配是否基于客户机的身份,以及该地址是否可撤销或变更。

6.2.1 地址池和租用

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

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

当发送 DHCP请求时,客户机需要向服务器提供信息。这些信息可包括客户机名称、请求的租用期、已使用或最后使用过的地址副本和其他参数。当服务器接收到这个请求时,它可利用客户机提供的信息(包括 MAC 地址请求),结合其他从外部获得的信息(例如一天的时间、接收请求的接口),决定在响应中提供的地址和配置信息。当服务器向客户机提供租用期时,服务器将租用信息保存在持久性存储器中,通常是非易失性内存或磁盘中。如果DHCP 服务器重新启动并且运行良好,租约将保持完好。

6.2.2 DHCP和BOOTP消息格式

DHCP扩展了BOOTP

  • Op(操作):标识消息是请求(1)或应答(2)。

  • HW类型:基于ARP使用的值,常见的是1(以太网)。

  • HW长度:硬件(MAC)地址的长度,类似以太网的网络,该值通常为6。

  • 跳步数:用于保存消息传输过程中的中继次数。消息发送方将该值设置为0,并在每次中继时递增。

  • 事务ID:由客户机选择的一个(随机)数,服务器需要将它复制到响应中。它用于将应答与请求匹配。

  • 秒数:由客户机设置,它是第一次尝试申请或重新申请地址经过的秒数。

  • 标志:当前只包含一个经过定义的位,称为广播标志。客户机可能在请求中设置该位,表示它们不能或不愿处理单播 IP 数据报,但可处理广播数据报(例如,由于它们没有IP 地址)。通过设置该位通知服务器和中继代理,广播地址可用于响应中。

  • 客户机IP地址:请求者的 IP 地址(如果已知),否则为0。

  • "你的"IP地址:由服务器填写,以便向请求者提供服务器地址。

  • 下一个服务器IP地址:由服务器填写,以便向请求者提供服务器地址。

  • 网关(中继)IP地址::由DHCP或BOOTP 中继器填写,它们在转发 DHCP(BOOTP)消息时返回自己的地址。

  • 客户机硬件地址:通常保存客户机的 MAC 地址,它被用作一个标识符。

  • 服务器名:不是每次都需要填写,包含 64 字节ASCI 字符,表示服务器名,字符串以 null 结尾

  • 引导文件名:不是每次都需要填写,包含128 字节ASCI 字符,表示启动文件路径,字符串以 null 结尾

  • 选项:长度可变。广泛应用于DHCP中,以区分DHCP 消息与传统 BOOTP 消息。

    DHCP 是对 BOOTP 的扩展,DHCP需要的有些字段 BOOTP设计之初是不存在的,这些字段可通过选项来携带。

    选项采用标准格式,开始以8位标签表示选项类型。之后跟着的1字节包含选项值长度(不包括标签或长度),紧接着是包含选项值自身的可变数量的字节。

    大量选项对于 DHCP 是有效的,其中一些选项也被 BOOTP 支持。常见选项包括:

    • 填充(0)

    • 子网掩码(1)

    • 路由器地址(3)

    • 域名服务器(6)

    • 域名(15)

    • 请求的IP地址(50)

    • 地址租用期(51)

    • DHCP消息类型(53)

      DHCP消息类型选项(53)是 1 字节长的选项,DHCP消息一定会使用它,它有以下这些可能值:

      • DHCPDISCOVER(1)
      • DHCPOFFER(2)
      • DHCPREQUEST(3)
      • DHCPDECLINE(4)
        DHCPACK(5)
      • DHCPNAK(6)
      • DHCPRELEASE(7)
      • DHCPINFORM(8)
      • DHCPFORCERENEW(9)
      • DHCPLEASEQUERY(10)
      • DHCPLEASEUNASSIGNED(11)
      • DHCPLEASEUNKNOWN(12)
      • DHCPLEASEACTIVE(13)
      • 服务器标识符(54)
    • 参数请求列表(55)

    • DHCP错误消息(56)

    • 租约更新时间(58)

    • 租约重新绑定时间(59)

    • 客户机标识符(61)

    • 域搜索列表(119)

    • 结束(255)

    选项可由 DHCP 消息中的选项字段携带,也可以由前面提到的服务器名和引导文件名字段携带。当选项携带在后两个位置时,称为选项超载,将包含一个特殊的超载选项(52)来表明哪些字段适合携带选项。对于长度超过255字节的选项,[RFC3396]定义了一种特殊的长选项机制。实际上,如果同一选项在同一消息中重复出现多次,它们的内容按出现在消息中的顺序组合,并将结果作为一个选项来处理。如果一个长选项用于表示选项超载,这时的处理顺序是从后向前:选项字段、引导文件名字段和服务器名字段。

6.2.4 DHCP协议操作

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

  1. 发送请求的客户机将 BOOTP 的 Op 字段设置为 BOOTREQUEST,并将选项字段的前 4字节分别设置为十进制值 99、130、83 和 99(来自[RFC2132]的魔术 cookie 值)。客户机向服务器发送消息,使用 UDP/IP 数据报,其中包含一个 BOOTP 的BOOTREQUEST 操作和相应的DHCP消息类型(DHCPDISCOVER)。这种消息从地址0.0.0.0(端口68)发送到受限广播地址255.255.255.255(端口 67)。其他方向(从服务器到客户机)的消息从服务器 IP 地址和端口 67 发送到本地 IP广播地址和端口 68。
  2. 在一次典型的 DHCP交换中,客户机首先广播一个 DHCPDISCOVER消息。对于接收到请求的每台服务器,无论是直接接收还是通过中继代理,它们都会响应一个DHCPOFFER消息,并在"你的"IP 地址字段中包含提供的 IP 地址。其他配置选项(例如 DNS 服务器的IP地址、子网掩码)也经常包括在内。DHCPOFFER消息中包含租用时间(T),它提供了在不更新租约的情况下地址可被租用的时间上限。这个消息还包含更新时间(T1),它是客户机从获得租约到尝试要求服务器更新租约的时间,以及重新绑定时间(T2),它是客户机尝试要求 DHCP服务器更新其地址的时间。在默认情况下,T1 =(T/2),T2=(7T/8)。
  3. 当接收到来自一台或多台服务器的 DHCPOFFER 消息后,客户机确定自己想接受哪个DHCPOFFER,并广播一个包括服务器标识符选项的 DHCPREQUEST消息。请求的IP地址选项设置为由选中的DHCPOFFER消息提供的地址。多台服务器可能接收到广播的DHCPREQUEST消息,但只有DHCPREQUEST消息中标识的服务器同意将该地址进行绑定;其他服务器清除与该请求相关的状态。
  4. 在完成绑定后,选中的服务器响应一个DHCPACK消息,通知客户机现在可使用该地址。如果服务器无法分配包含在DHCPREQUEST 消息中的地址(例如,已通过其他方式分配或无法使用),该服务器将会响应一个 DHCPNAK 消息。
  5. 当客户机接收 DHCPACK 消息和其他相关的配置信息时,它可探测网络以确保获得的地址未被使用(例如,向该地址发送一个 ARP请求以执行 ACD)。如果客户机确定该地址已被使用,客户机就不使用该地址,并向服务器发送一个 DHCPDECLINE消息,通知该地址不能使用。在经过默认的10秒延时后,客户机可重试。如果一台客户机在租约到期前放弃该地址,它将发送一个 DHCPRELEASE 消息。
  6. 在客户机已有一个IP 地址并希望仅更新其租约的情况下,它可跳过最初的DHCPDISCOVER/DHCPOFFER 消息。取而代之的是,客户机通过一个 DHCPREQUEST 消息请求当前正在使用的地址。此后,协议工作流程如前面所述:服务器可能同意该请求(通过一个DHCPACK),也可能拒绝该请求(通过一个DHCPNAK)。另一种情况,当客户机已有一个地址时,它不需要更新该地址,但需要其他(非地址的)配置信息。在这种情况下,它可使用DHCPINFORM消息来代替DHCPREQUEST消息,以表明它使用现有地址,但希望获得额外的信息。这种消息导致服务器返回一个DHCPACK消息,其中包括请求的额外信息。

6.2.4.2 DHCP状态机

DHCP 协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型。

上图描述了客户机的状态机。状态之间的转换(箭头)源于消息的接收和发送或超时。如图所示:

  1. 客户机开始于INIT(初始)状态,这时没有信息,并广播DHCPDISCOVER 消息。
  2. 在选择状态时,它接收 DHCPOFFER消息,直到决定自己使用哪个地址和服务器。
  3. 当它做出选择时,通过一个DHCPREQUEST消息来响应,并进入请求状态。
    • 这时,它可能接收来自不需要的地址的ACK。如果它没有发现需要的地址,发送一个 DHCPDECLINE 消息,并转换到INIT状态。
  4. 它接收到一个自己需要的地址的DHCPACK消息,接受它,获得超时值T1和T2,并进入绑定状态,这时就能使用这个地址直至到期。
  5. 当第一个计时器(T1)到期时,客户机进入更新状态并尝试重新建立租约。如果它接收到一个新的DHCPACK(客户机进入绑定状态),这个过程成功。
    • 如果不成功,T2 最终到期,并导致客户机尝试从任意服务器重新获得一个地址。
    • 如果租用期最终到期,客户机必须放弃所租用的地址,如果没有可选的地址或可用的网络连接,这时它将断开网络连接。

6.2.5 DHCPv6

DHCPv6可使用一种"有状态"模式,其工作原理非常像DHCPv4,它也可以使用一种"无状态"模式,并结合无状态地址自动配置,在无状态模式下,IPv6客户机认为自己能配置IPv6地址,但需要通过DHCPv6获得额外信息(例如DNS服务器地址),另一种选择可使用ICMPv6路由器通告消息获得一台DNS 服务器的位置。

6.2.5.1 IPv6地址生命周期

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

上图给出了一个IPv6 地址的生命周期。当一个地址处于首选状态时,它可用于一般用途,并可作为源或目的IPv6地址。当首选状态的超时,相应的首选地址将废弃。当该地址处于废弃状态时,它仍可用于现有传输(例如TCP)连接,但不能用于启动新的连接。

当一个地址第一次被选择使用时,它进入一个临时或乐观状态。在处于临时状态时,它可能仅用于IPv6 邻居发现协议。这时,它不可用作任何其他目的的源或目的地址。同时,该状态的地址要检测重复,看看同一网络中的其他节点是否已使用该地址。这个过程称为重复地址检测(DAD)。常规 DAD 的替代方案称为乐观DAD[RFC4429],通过它选择的地址可用于一组有限的用途,直至DAD完成。因为一个乐观状态的地址实际上仅是针对DAD的一组特殊规则,它不是一个真正完整的状态。乐观地址对大多数目的而言是废弃的。特别是,一个地址可能同时是乐观的和废弃的,这取决于首选生命周期和有效生命周期。

6.2.5.2 DHCPv6 消息格式

DHCPv6消息封装为UDP/IPv6数据报,它使用客户机端口546 和服务器端口547。消息发送到中继代理或服务器,它使用一台主机的链路范围的源地址。这里存在两种消息格式,一种用于客户机与服务器之间,另一种用于中继代理。

下图左侧给出了基本 DHCPv6 消息格式,右侧给出了一种扩展版本,其中包括链路地址和对等方地址字段。右侧的格式用于DHCPv6中继代理和DHCPv6服务器之间。链路地址字段给出了全局IPv6地址,服务器用它标识客户机所处的链路。对等方地址字段包含中继代理地址或客户机地址(要中继的消息来自该客户机)。注意,中继过程可能是链状的,某个中继可能转发来自其他中继的消息。

左侧的消息格式中的消息类型包括典型的 DHCP 消息(REQUEST、REPLY 等),右侧的消息格式中的消息类型包括 RELAY-FORW 和 RELAY-REPL,分别表示从中继代理转发和目的地是中继代理的消息。右侧的选项字段包括一个中继消息选项,其中包含中继转发的完整消息。其他选项也可包含在内。

DHCPv4 和 DHCPv6之间的区别之一是 DHCPv6 使用 IPv6 组播地址的方式。客户机将请求发送到所有DHCP中继代理和服务器的组播地址(ff02::1:2)。源地址在链路本地范围。在IPv6中,没有保留 BOOTP 消息格式。下表给出了DHCPv6的消息类型、取值和定义它的RFC,以及针对DHCPv4的同类消息和定义它的RFC。

在DHCPv6中,最有意义的信息携带在选项中,包括地址、租用时间、服务位置,以及客户端标识符和服务器标识符。这些选项使用的两个重要概念是:

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

    IA 相关的配置信息包括一个或多个地址,以及相关的租约信息(T1、T2和总的租用时间值)。IA 的每个地址都有一个首选的和一个有效的生命周期[RFC4862],它定义了地址的整个生命周期。请求的地址类型可以是常规地址或临时地址[RFC4941]。临时地址由随机数的一部分派生而来,用于协助改善 IPv6 主机地址跟踪的隐私问题。临时地址通常与非临时地址同时分配,但需要频繁使用不同的随机数重新生成。

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

    下图给出了非临时地址和临时地址的IA选项格式。

    如图所示,对于非临时地址和临时地址的 IA 选项,主要区别是非临时地址包括T1 和 T2 值。这些值是已知的,它们也是DHCPv4 使用的值。对于临时地址,可能缺少 T1和 T2,因为生命周期通常基于分配给非临时地址的 T1 和 T2 值确定,这些值之前是已知的。

  • DHCP唯一标识符(DUID):用于标识一台DHCPv6客户机或服务器,并被设计为可持续一段时间。服务器用它标识所选地址(作为IA的一部分)对应的客户机和配置信息,客户机用它标识感兴趣的服务器。DUID长度是可变的,对于大多数用途来说,客户机和服务器将它看作一个不透明的值。DUID 是全球唯一的,但它很容易生成。为了同时满足这些关系,[RFC3315]定义了三种可能的DUID类型,但也不是只能创建这三种类型。三种DUID类型如下:

    1. DUID-LLT:基于链路层地址和时间的 DUID。推荐的格式。编码开始于一个2字节的标识符,用于指出是哪种类型的DUID。紧跟着是一个16位的硬件类型。在硬件类型之后,它包括一个 32位的时间戳,其中的秒数开始于2000年1月1日午夜(UTC)(mod 2^32),它将在2136年归零(返回0),最后部分是一个可变长度的链路层地址。链路层地址可由任何主机接口选择,并使用相同的DUID,一旦选定,它可用于与任何接口的通信。这种格式的DUID是稳定的,即使网络接口从该DUID中移除。因此,它需要主机系统固定存储相关信息
    2. DUID-EN:基于企业编号和供应商分配的 DUID。编码开始于一个2字节的标识符,用于指出是哪种类型的DUID。紧跟着是一个 32 位的专用企业编号
    3. DUID-LL:仅基于链路层地址的 DUID。编码开始于一个2字节的标识符,用于指出是哪种类型的DUID。紧跟着是一个16位的硬件类型。格式与DUID-LLT非常相似,但推荐给缺少固定存储(但有一个固定的链路层地址)的系统。RFC 指出DUID-LL 不能用于某些客户机或服务器,它们不能确定自己使用的链路层地址是否与一个可删除的接口有关。

6.2.5.5 协议操作

一台客户机是否启用 DHCP,取决于这台主机接收的 ICMPv6 路由器通告消息中的配置选项。路由器通告包括两个重要的位字段:

  • M 位是可管理地址配置标志,表示 IPv6 地址可使用 DHCPv6 获得。

  • O 位是其他配置标志,表示IPv6 地址之外的其他信息可使用 DHCPv6 获得。

M和O位字段可以任意组合:

  • M启用和O关闭可能是最不实用的组合。
  • 如果两者都关闭,则不使用 DHCPv6,并在分配地址时使用无状态地址自动分配。
  • M关闭和O启用表示客户机使用无状态DHCPv6,并使用无状态地址自动配置获得地址。

如图所示。在通常情况下,一台客户机首先确定使用的链路本地地址,然后执行ICMPv6 路由器发现操作,以确定所在网络中是否存在一台路由器。路由器通告包括前面提到的 M 和 O 位字段。如果正在使用 DHCPv6,则至少设置 M 位字段,并且由客户机来组播DHCPSOLICIT 消息,以便发现 DHCPv6 服务器。如果存在一个或多个DHCPADVERTISE响应消息,表示至少存在一台 DHCPv6 服务器。这些消息由 2 次称为四消息交换的 DHCPv6 操作构成。在已知一台 DHCPv6 服务器位置,或不需要分配地址(例如无状态 DHCPv6 或使用快速确认选项)的情况下,"四消息交换"可简化为"两消息交换",在这种情况下只使用请求和应答消息。DHCPv6 服务器确认 DUID、IA类型(临时、非临时或前缀)和 IAID 结合而成的绑定。IAID是由客户机选择的一个32 位数字。每个绑定可以有一个或多个租约,一个或多个绑定可通过一个 DHCPv6 事务来处理。

6.2.5.7 DHCPv6前缀委托(DHCPv6-PD和6rd)

DHCPv6也可用于配置路由器。这通过一台路由器向另一台路由器委托一个地址空间范围来实现。这个地址范围可描述为一个IPv6地址前缀。这个前缀在[RFC3633]定义的 DHCP 前缀选项中。这用于路由器委托的情况,它现在可像一个 DHCPv6 服务器那样工作,而不需要前缀网络的详细拓扑信息。这种情况可能发生,例如ISP 给出了一个可由潜在客户重新分配的地址范围。在这种情况下,ISP 可能使用 DHCPv6-PD 向客户设备委托一个前缀。

前缀委托定义了一种新格式的 IA,称为IA_PD。每个IA_PD 由一个 IAID 和相关的配置信息构成,它在地址上与前面讨论的 IA 相似。DHCPv6-PD 不只对固定路由器的前缀委托有用,它也可用于移动路由器(及其连接的子网)[RFC6276]。

目前,已创建一种特殊格式的PD以支持服务提供商快速部署IPv6。在OPTION-6RD(212)选项[RFC5969]中保存IPv6 6rd前缀,它用于根据客户已分配的IPv4地址为客户网站分配IPv6地址。IPv6地址是通过算法来分配的,它将服务提供商提供的 6rd 前缀作为前 n 位(推荐 n 小于 32)。客户分配的单播 IPv4 地址作为后面的 32(或更少)位,这种IPv6 6rd委托前缀同样可用DHCPv6-PD处理,并推荐64位或更短长度用于自动地址配置。

OPTION_6RD 选项长度可变,包括以下几个值:IPv4 掩码长度、6rd 前缀长度、6rd 前缀和 6rd 中继地址列表(提供6rd 中继的 IPv4 地址)。IPv4 掩码长度给出了用于分配 IPv6 地址的 IPv4 地址位数(从左侧开始计算)。

6.2.6 使用DHCP中继

中继代理用于将 DHCP操作扩展到跨越多个网段。在下图中,网段 A 和 B 之间的中继会转发DHCP消息,并通过选项或填充空白字段使用额外信息来标识消息。注意,在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换。相反,它仅中继那些广播消息(或IPv6中的组播)。这种消息通常在客户机首次获得自己的地址时交换。当一台客户机获得一个IP地址,并且服务器的 IP 地址使用服务器标识选项时,它可与服务器进行单播通信而不经过中继。注意,中继代理在传统上是第3层设备,并且通常结合了路由功能。但在第 2 层也存在可替代操作。

6.2.6.1 中继代理信息选项

在BOOTP或DHCP中继的最初概念中,中继代理的目的只是将一个消息从一个子网中继到另一个,而不需要经过一台路由器。这允许系统从一个集中位置不执行间接传递就获得一个地址。在中继和服务器之间传递的消息中需要包含额外信息。中继代理信息选项(针对DHCPv4,简称RAIO)[RFC3046]提供了使IPv4网络包括这种信息的方法。

DHCPv4 的 RAIO定义在[RFC3046]中,它实际是一个元选项,从某种意义上来说,它仅定义了一个框架,其中可定义许多子选项。很多这样的子选项已被定义,包括几个被ISP用于标识一个请求来自哪个用户、链路或网络的选项。在很多情况下,我们看到DHCPv4信息选项中的每个子选项都有对应的IPv6选项。

子选项例如:

  • 中继代理远程ID子选项和IPv6远程ID选项:

    中继的共同需求是通过超出客户机自身提供的信息之外的信息来标识发送 DHCP 请求的客户机。远程ID子选项提供了一种标识发送请求的 DHCP 客户机的方法,即采用一系列本地解释的命名方法(例如呼叫方 ID、用户名、调制解调器 ID、一条点到点链路的远程IP 地址)。DHCPv6 中继代理远程ID选项[RFC4649]提供了相同的功能,它还包括一个额外的字段(企业编号),以表明与供应商相关的识别信息。这种远程 ID 信息格式后来以一种基于企业编号的特定供应商方式定义。一种常用的方法是将 DUID 用于远程 ID。

  • 服务器标识符覆盖:

    在某些情况下,中继可能希望干预DHCP客户机和服务器之间的操作。这可采用一个特殊的服务器标识符覆盖子选项来实现[RFC5107]。这个子选项是前面提到的RAIO的一个覆选项。

    在通常情况下,一个中继会转发SOLICIT消息,并在消息从客户机传递到服务器的过程中,可能为这些消息附加某些选项。中继在这种情况下是必要的,因为客户机可能还没有一个可接受的IP地址,并且仅用广播或组播方式将消息发送到本地子网。当一台客户机接收并选择自己的地址之后,它可使用服务器标识符选项中携带的服务器标识直接与DHCP服务器通信。实际上,这将削弱中继在客户机和服务器之间后续事务中的作用。允许中继为不同类型的消息(例如除了SOLICT 外的 REQUEST)提供不同选项(例如RAIO 携带一个电路 ID),这通常是有用的。这种选项包括一个 4 字节的值,以指定服务器生成的DHCPREPLY消息中的服务器标识符选项中使用的IPv4地址。服务器标识符覆盖选项建议与中继代理标志子选项一起使用[RFC5010]。这个RAIO的子选项是一组标志,它们可携带从中继到服务器的信息。到目前为止,只有一个关于这种标志的定义:客户机是否使器用广播或单播地址作为初始消息中的目的地址。服务器可能根据这个标志设置做出不同的地址分配决定。

  • 租约查询:

    在某些环境下,允许第三方系统(如中继或接入集中器)学习一个特定DHCP客户机的地址绑定是有用的。这个功能由DHCP租约查询(针对DHCPv4的[RFC4388],[RFC6148],或针对DHCPv6的[RFC5007])来提供。

    在DHCPv6中,它也可为委托前缀提供租约信息。在上图中,中继代理可能从经过的 DHCP 分组中"搜集"信息,以影响那些提供给DHCP服务器的信息。这些信息可能由中继保存,但也可能在中继失败时丢弃。

    DHCPLEASEQUERY 消息允许一个代理根据需要重新获得这种信息,它通常发生在一个中继流量已失去绑定的情况下。对于 DHCPv4,DHCPLEASEQUERY 消息支持 4 种查询:IPv4地址、MAC地址、客户机标识符和远程ID。对于DHCPv6,它支持两种查询:IPv6地址和客户机标识符(DUID)。

    DHCPv4服务器可能用以下几种消息响应租约查询:

    • DHCPLEASEUNASSIGNED:指出该查询值的响应服务器是授权的,但目前没有分配相应租约。
    • DHCPLEASEACTIVE或DHCPLEASEUNKNOWN:表示一个租约是有效的,并提供了租约参数(包括 T1 和 T2)。这里没有对此信息用途的特定建议,无论出于何种目的,都希望提供给请求者。

    DHCPv6服务器使用一个LEASEQUERY-REPLY消息来响应:

    其中包含一个客户机数据选项。这个选项依次包括以下选项:客户机ID、IPv6地址、IPv6前缀和客户机的最后事务时间。最后一个值是服务器最后一次询问客户机的时间(以秒为单位)。LEASEQUERY-REPLY 消息也可包含以下两个选项:中继数据和客户机链路。第一个选项包括中继最后一次发送的相关查询的数据,第二个选项指出特定客户机拥有一个或多个地址绑定的链路。

  • 大批量租约查询

    租约查询的扩展称为大批量租约查询(BL),它可以同时查询多个绑定关系,使用 TCP/IP而不是 UDP/IP,并支持更大范围的查询类型。BL 被设计为一种获得绑定信息的特定服务,它实际上不是传统 DHCP 的一部分。因此,客户机可能希望不使用BL 而获得常规配置信息。BL的一个特殊用途表现在 DHCP 用于前缀委托时。在这种情况下,最常见的是一台路由器作为一个 DHCP-PD 客户机使用。它获得一个前缀,并从该前缀代表的一个地址范围中获得一个地址,以分配给传统的DHCP客户机。但是,如果一台路由器出现故障或重新启动,它可能会丢失这个前缀信息,并在一段时间内难以恢复,这是因为传统的租约查询机制需要绑定一个用于查询的标识符。BL有助于缓解这种情况。

    BL提供了对基本租约查询的几个扩展。首先,它使用TCP/IP(用于IPv6的端口547和用于IPv4的端口67)而不是UDP/IP。这种改变使一次查询可获得大量查询信息,这在检索大量委托前缀时是必要的。BL 也提供了一个中继标识符选项,允许查询者更容易地识别查询。BL 查询可基于中继标识符、链路地址(网段)或中继 ID。

    DHCPv6中继ID选项和DHCPv4中继ID子选项可能包括一个用于标识中继代理的 DUID。中继可在自己转发的消息中插入这个选项,服务器可用它关联自己接收的由特定中继提供的绑定。BL支持基于地址和DUID的查询,也支持基于中继 ID、链路地址和远程 ID 的查询。这些新查询只被基于 TCP/IP 并支持 BL 的服务器所支持。相反,BL 服务器仅支持 LEASEQUERY 消息,而不是整套的普通 DHCP 消息。

    BL 通过 LEASEQUERY-DATA 和 LEASEQUERY-DONE 消息扩展基本的租约查询机制。当一个查询被成功响应时,一台服务器首先返回一个 LEASEQUERY-REPLY 消息。如果附加信息是可用的,那么它包括一组 LEASEQUERY-DATA 消息,每个消息对应一个绑定,并通过一个 LEASEQUERY-DONE 消息来完成设置。属于相同绑定组的所有消息共享相同的事务ID,每个相同值由初始的LEASEQUERY REQUEST消息提供。

6.2.6.5 第2层中继代理

在一些网络环境中,第 2 层设备(例如交换机、网桥等)更靠近端系统,它们会中继和处理DHCP请求。这些第2 层设备没有完整的TCP/IP协议栈,并且不使用IP进行寻址。因此,它们不能作为传统的中继代理。

为了解决这个问题,[IDL2RA]和[RFC6221]分别针对IPv4和IPv6规定了第2层"轻量级"DHCP中继代理(LDRA)如何工作。当针对中继行为时,接口被标记为面向客户或面向网络,以及可信或不可信。面向网络的接口在拓扑结构上更接近 DHCP 服务器,可信的接口是那些假设到达的分组不存在欺骗的接口。

IPv4 LDRA 的首要问题是如何处理 DHCP 的 giaddr 字段,以及在 LDRA 本身没有 IP 层信息时插入一个RAIO。[IDL2RA]推荐的方法是:LDRA在客户机接收的DHCP 请求中插入 RAIO,但不填写 giaddr 字段。DHCP 消息以广播方式发送给一个或多个 DHCP 服务器,以及其他处于接收状态的LDRA。这种消息一直被洪泛(即在所有接口上发送,除了获得该消息的接口),直到被一个不可信的接口接收。当 LDRA 接收到一个包含 RAIO的这种消息,它不会添加其他的同类选项,但会继续执行洪泛。通过广播发送的响应(例如DHCPOFFER消息)可能被 LDRA 拦截,这时需要剥离 RAIO 并使用其中的信息,以便将响应发送给发出请求的客户机。很多 LDRA 也拦截单播的 DHCP 流量。在这些情况下,创建或剥离 RAIO也是必要的。注意,兼容的 DHCP 服务器必须支持处理和返回这样的DHCP 消息:无论是用单播发送还是广播发送,其包含的RAIO中没有有效的giaddr 字段。

IPv6的LDRA通过创建RELAY-FORW和RELAY-REPL消息处理DHCPv6流量。面向客户的接口将会丢弃接收到的ADVERTISE、REPLY、RECONFIGURE和RELAY-REPL消息。另外,不可信的面向客户的接口也会出于安全原因丢弃接收到的RELAY-FORW 消息。RELAY-FORW消息包含标识面向客户接口的选项(即链路地址字段、对等方地址字段和接口 ID 选项)。链路地址字段设置为 0,对等方地址字段设置为客户机 IP 地址,接口 ID选项设置为LDRA 中配置的值。当接收到一个链路地址字段为 0 的 RELAY-REPL 消息时,LDRA 解封所包含的信息,并将其发送到由接口 ID 选项(由服务器提供)指定的客户机接口。面向客户的接口修改接收的RELAY-FORW消息的跳步数。面向网络的接口将会丢弃接收的除RELAY-REPL之外的消息。

6.2.9 快速确认

DHCP 快速确认选项[RFC4039]允许一台 DHCP 服务器通过一个 DHCPACK 来响应DHCPDISCOVER 消息,从而有效跳过 DHCPREQUEST消息,并最终使用两消息交换来代替四消息交换。这个选项的设计目的是快速配置可能频繁改变其网络接入点的主机(例如移动主机)。当仅有一台可用的 DHCP服务器并且地址充足时,我们可以不关注这个选项。

要使用快速确认,客户机可在 DHCPDISCOVER 消息中包含该选项,但在任何其他消息中不能包含该选项。同样,服务器仅在DHCPACK消息中使用该选项。当一台服务器使用该选项来响应时,接收消息的客户机知道该返回地址可立即使用。如果后来确定该地址已用于另一个系统(例如通过ARP),客户机发送一个DHCPDECLINE消息,并放弃该地址。客户机也可能通过一个 DHCPRELEASE 消息自愿放弃接收到的地址。

6.2.10 位置信息(LCI和LoST)

IETF 的一个众所周知的成果是 Geoconf("地理配置")[RFC6225],[RFC6225]规定了如何使用GeoConf(123)和GeoLoc(144)的DHCP选项,为客户机提供这种地理空间位置配置信息(LCI)。地理空间 LCI 不仅包括纬度、经度和高度坐标,也为每个信息提供分辨率指标。LCI 可用于一系列目的,包括紧急服务。如果一个呼叫者使用 IP 电话请求紧急援助,LCI 可指示发生紧急情况的位置。

尽管刚提到的物理位置信息对找到特定的个人或系统是有用的,但有时知道一个实体的市政位置也是重要的。市政位置根据行政地理表示位置,例如国家、城市、区、街道,以及其他类似的参数。市政位置信息可通过 DHCP 以物理位置所采用的方式提供,使用的 LCI结构与地理空间 LCI 中使用的一样。[RFC4776]定义了携带市政位置的 GEOCONF_CIVIC(99)选项。这种格式的LCI比地理空间信息更麻烦,这是因为各个国家在行政地理上命名位置的方法不同。由于这种名称除了需要 DHCP 常用的英语、ASCII 语言和字符集外,可能还需要其他语言和字符集的支持,这会带来额外的复杂性。不仅是DHCP方面,这里还存在位置的隐私问题。IETF在 Geopriv 框架中讨论了这个问题。例如,参见[RFC3693]了解更多信息。

一个可供选择的高层协议称为启用HTTP的位置投递(HELD)协议[RFC5985],它可用于提供位置信息。代替在 DHCP 消息中直接编码 LCI,而是采用 DHCP 选项 OPTION_V4_ACCESS_DOMAIN(213)和 OPTION_V6_ACCESS_DOMAIN(57)分别为 IPv4 和 IPv6 提供一台 HELD 服务器的 FQDN[RFC5986]。

当一台主机知道自己的位置时,它可能需要使用该位置的相关服务(例如位置最近的医院)。IETF的位置到服务转换(LoST)框架[RFC5222]通过一个使用位置相关URI访问的应用层协议来实现上述功能。DHCP 选项 OPTION_V4_LOST(137)和 OPTION_V6_LOST(51)为一个 FQDN 提供可变长度的编码,FQDN 分别为 DHCPv4 和 DHCPv6 指定一台 LoST 服务器的名称[RFC5223]。这个编码与 DNS 的域名编码采用相同格式。

6.2.11 移动和切换信息(MoS和ANDSF)

随着使用移动计算机和智能手机通过蜂窝技术访问Internet的用户逐渐增多,定义了有关蜂窝配置和不同无线网络之间切换的框架和相关 DHCP 选项。目前,存在两套有关该信息的DHCP选项:

  • IEEE 802.21 移动服务(MoS)发现:

    MoS提供了3种类型的服务:信息服务、命令服务和事件服务。粗略地说,这些服务提供了有关可用网络、控制链路参数功能和链路状态变化通知的信息。MoS发现DHCP选项[RFC5678]为移动节点获得地址或域名提供了一种手段,无论提供这些服务的服务器使用 DHCPv4还是 DHCPv6。对于 IPv4,OPTION-IPv4_Address-

    MoS选项(139)包含一个子选项的向量,其中包含提供每种服务的服务器的IP地址。OPTION-IPv4_FQDN-MoS 选项(140)的一个子选项为每种服务的服务器提供了一个 FQDN向量。其他类似选项有OPTION-IPv6_Address-MoS(54)和OPTION-IPv6_FQDN(55),它们为 IPv6 提供了同等功能。

  • 接入网发现和选择功能(ANDSF):

    基于 3GPP 的 ANDSF 规范,[RFC6153]定义了携带 ANDSF 信息的 DHCPv4 和 DHCPv6选项。特别是,它定义了移动设备发现ANDSF服务器地址的选项。ANDSF服务器由蜂窝基础设施运营商来配置,并可能保存多种传输网络(例如同时使用3G和Wi-Fi)的可用性和访问策略等信息。

    ANDSF IPv4 地址选项(142)包含一个ANDSF服务器的IPv4地址向量。这些地址按优先顺序(第一个是最合适的)提供。ANDSF IPv6地址选项(143)包含一个ANDSF服务器的IPv6地址向量。要使用DHCPv4请求ANDSF信息,移动节点可在参数请求列表中包括ANDSF IPv4 地址选项。要使用DHCPv6请求ANDSF信息,客户机可在选项请求选项(ORO)中包含ANDSF IPv6地址选项。

6.3------无状态地址自动配置

大多数路由器通过手动配置地址,主机既可手动配置地址,也可使用一种如DHCP 的分配协议或某种算法来自动配置地址。这里存在两种形式的自动配置,它们取决于需要生成什么类型的地址。对于只用于一条链路的地址(链路本地地址),一台主机只需找到一些在链路上未使用的合适地址。但是,对于要用于全球性连接的地址,这类地址的某些部分通常必须被管理。IPv4 和 IPv6都有用于链路本地地址自动配置的机制,一台主机基本不需要协助就可以决定自己的地址。这就是所谓的无状态地址自动配置(SLAAC)。

6.3.1 IPv4链路本地地址的动态配置

在一台主机没有任何手工配置的地址,并且所在网络没有DHCP服务器的情况下,基于IP的通信是不可能发生的,除非主机使用某种方式生成IP地址。[RFC3927]描述了一种机制,主机通过该机制可自动从链路本地范围169.254.1.1至169.254.254.254使用16位子网掩码255.255.0.0生成自己的IPv4地址(见[RFC5735])。这种方法称为链路本地地址的动态配置或自动专用IP寻址(APIPA)。从本质上来说,就是一台主机从一个范围中随机选择一个地址,并检查该地址是否已在本子网中被其他系统使用。这种检查通过IPv4 ACD来实现。

6.3.2 链路本地地址的IPv6 SLAAC(无状态地址自动配置)

IPv6 SLAAC的目标是允许节点自动(和自主)分配链路本地IPv6 地址。[RFC4862]中描述了IPv6 SLAAC。它包括 3 个主要步骤:

  1. 获得一个链路本地地址
  2. 使用无状态自动配置获取全球地址
  3. 检测链路本地地址是否已在链路中使用。

无状态自动配置可用于没有路由器的环境,在这种情况下只分配链路本地地址。当路由器存在时,由一个路由器通告的前缀和本地产生的信息组合成一个全球地址。SLAAC也可结合DHCPv6(或手动分配地址)使用,以允许一台主机获得除自己地址外的其他信息(称为"无状态"DHCPv6)。当网络采用有状态或无状态 DHCPv6配置时,执行SLAAC的主机可用于同一网络中。在通常情况下,有状态DHCPv6用于需要为主机更精确分配地址时,但无状态DHCPv6和SLAAC结合是最常见的部署选择。

在IPv6中,临时(或乐观)链路本地地址由[RFC4291]和[RFC4941]规定的过程来选择。它们只用于具有组播能力的网络,并在建立时分配了极大的首选和有效生命周期。为了形成数字化的地址,在熟知的链路本地前缀 fe80::0(适当长度)之后附加了一个唯一的编号。这是通过将地址中最右边的N位设为N位数字,最左边的10位设为10位链路本地前缀1111111010,并且其余位设为0来实现的。生成的地址设置为临时(或乐观)状态,并检查该地址是否重复。

6.3.2.1 IPv6重复地址检测(DAD)

IPv6 DAD 使用 ICMPv6 邻居请求和邻居通告消息,以确定一个特定(临时或乐观)IPv6地址是否已在连接链路上使用。本次讨论只针对临时地址,但DAD也适用于乐观地址。[RFC4862]中定义了DAD,并建议在为一个接口分配IPv6地址时使用,无论手动分配还是自动配置或DHCPv6分配。如果发现地址重复,将不使用该临时地址。如果DAD 成功,临时地址转换为优先状态,并可不受限制地使用。

DAD 按以下步骤执行:一个节点首先加入临时地址的所有节点组播地址和请求节点组播地址。为了检查使用的地址是否重复,一个节点发送一个或多个ICMPv6 邻居请求消息。这些消息的源和目的IPv6地址分别是未指定地址和被检查目的地址的请求节点地址。目的地址字段设置为被检查的地址(临时地址)。如果在响应中接收到一个邻居通告消息,说明 DAD 失败,并放弃被检查的地址。当一个地址未成功完成DAD时,任何针对它的邻居请求被视为一种特殊情况,说明其他主机有使用相同地址的意图。如果接收到这些消息,丢弃它们,放弃当前的临时地址,并且 DAD 失败。

如果 DAD失败,通过接收一个来自其他节点的邻居请求或一个到目的地址的邻居通告,说明这个地址未分配给一个接口,并且不会成为一个首选地址。如果这个地址是一个基于由本地MAC地址导出的接口标识符配置的链路本地地址,不可能通过相同过程最终生成一个不冲突的地址,这时应放弃使用该地址并要求管理员输入地址。如果这个地址是基于不同形式的接口标识符,IPv6操作可能尝试使用基于别的临时地址的其他地址。

6.3.2.2 全球地址的IPv6 SLAAC

在一个节点已获得一个链路本地地址后,它可能需要一个或多个全球地址。全球地址的形成过程类似于链路本地SLAAC,但需要使用一个由路由器提供的前缀。这种前缀携带在一个路由器通告的前缀选项中,并且由一个标志来表示这个前缀是否用于与SLAAC共同形成全球地址。如果是,这个前缀与接口标识符(如果不采用隐私扩展方式,它与形成链路本地地址相似)组合形成一个全球地址。这种地址的首选和有效生命周期也由前缀选项表示的信息来确定。

6.3.2.4 无状态DHCP

DHCPv6 可用于一种"无状态"模式,在这种模式下,DHCPv6 服务器不指定地址(或保留任何一台客户机的状态),但提供其他配置信息。无状态DHCPv6定义在[RFC3736]中,并将SLAAC和DHCPv6相结合。

在一个无状态 DHCPv6 部署方案中,假设节点采用DHCPv6之外的方法获得自己的地址。因此,DHCPv6 服务器不需要处理定义在表 6-1 中的地址管理消息。另外,它不需要处理建立IA绑定所需的选项。这大大简化了服务器软件和配置工作。中继代理的操作没有改变。

无状态 DHCPv6 客户机使用 DHCPv6 的 INFORMATION-REQUEST 消息请求信息,该信息由服务器发送的 REPLY 消息提供。INFORMATION-REQUEST 消息包含一个选项请求选项,给出客户机想了解的更多信息的选项。INFORMATION-REQUEST 可能包含一个客户机标识符选项,它允许为特定的客户机定制答案。为了实现标准的无状态DHCPv6服务器,相应系统必须实现以下这些消息:

  • INFORMATION-REQUEST
  • REPLY
  • RELAY-FORW
  • RELAY-REPL

它还必须实现以下这些选项:

  • 选项请求
  • 状态代码
  • 服务器标识符
  • 客户机消息、服务器消息和接口ID:这三个选项在作为中继代理时使用。

作为一台可用的无状态 DHCPv6 服务器,以下几个选项也是必要的:

  • DNS 服务器
  • DNS 搜索列表
  • 可能的SIP 服务器

其他可能有用但不是必需的选项主要包括:优先级、经历的时间、用户类别、供应商类别、供应商特定信息、客户机标识符和认证。

6.4------DHCP和DNS交互

当一台 DHCP 客户机获得一个 IP 地址时,它接收的配置信息的重要部分是一台 DNS服务器的IP地址。它允许客户机系统将DNS名称转换为IPv4和/或IPv6地址,该地址是进行传输层连接时协议实现所需要的。如果没有 DNS 服务器或其他方式将域名映射为IP地址,大多数用户会发现他们几乎难以访问互联网系统。如果本地DNS工作正常,它将Internet 作为一个整体来提供地址映射,但如果配置正确,也可针对本地的专用网络(如前面提到的.home)。

由于本地专用网络的 DNS 映射通常采用烦琐的手工管理,因此,将指定DHCP地址与相应地址的DNS映射更新方法结合起来将会带来方便。这可通过组合DHCP/DNS服务器或动态 DNS来实现。

组合 DNS/DHCP 服务器(如 Linux dnsmasq包)是一个服务器程序,它可配置为提供 IP地址租约以及其他信息,也可读取一个DHCPREQUEST中的客户机标识符或域名,并在使用DHCPACK进行响应之前,通过"名称到地址"的绑定更新内部 DNS数据库。这样,由DHCP 客户机或与相同 DNS 服务器交互的其他系统发起的任何后续 DNS 请求,能够在客户机名称和新分配的IP 地址之间转换。

6.5------以太网上的PPP

对于大多数局域网和一些广域网连接,DHCP提供了最常用的客户机系统配置方法。

对于广域网连接(例如 DSL),常用另一种基于 PPP 的方法代替它。这种方法涉及在以太网中携带PPP,因此称为以太网上的PPP(PPPoE),PPPoE用于广域网连接设备(例如DSL调制解调器)作为一个交换机或网桥而不是使用路由器的情况下。PPP作为某些ISP建立连接的首选,这是因为它可提供比其他配置选项(例如DHCP)更细致的配置控制和审计日志。为了提供Internet连接,有些设备(例如用户PC)必须实现 IP 路由和寻址功能。下图显示了典型的使用情况。

该图显示了一个ISP 使用DSL为很多客户提供服务。DSL提供一条点到点的数字链路,DSL调制解调器为 PPP 端口提供桥接服务,该端口位于ISP的接入集中器(AC)中,连接客户的调制解调器线和 ISP 的网络设备。调制解调器和 AC 也支持 PPPoE协议,在这个例子中,该用户选择将一台家用 PC 连接到 DSL 调制解调器,并使用一个点到点的以太网络(即仅使用一根电缆的以太网)。

在 DSL 调制解调器与 ISP 成功建立一条低层链路后,PC 可以开始进行 PPPoE交换,它被定义在信息文档[RFC2516]中,如下图所示。

这个协议包括一个发现阶段和一个 PPP 会话阶段。发现阶段涉及交换几个PPPoE 主动发现(PAD)消息:

  • PADI(初始化)
  • PADO(提供)
  • PADR(请求)
  • PADS(会话确认)。

在这个交换完成后,由以太网封装的一次PPP会话开始,并最终由任何一方发送PADT(终止)消息来终止。如果低层连接中断,这个会话也会终止。

PPPoE 消息使用下图所示的格式,并封装在以太网的有效载荷区。

  • PPPoE版本和类型:长度都是 4 位,并包含当前PPPoE 版本的值0x1。

  • 代码:包含 PPPoE 消息类型的提示,如图的右下部分所示。

  • 会话 ID 字段包含值 0x0000 表示 PADI、PADO 和 PADR 消息,并在后续消息中包含一个唯一的 16 位数字。在 PPP 会话阶段会保持相同的值。

  • PAD 消息包含一个或多个标签,它们按 TLV 方式排列为一个 16 位的 TAG_TYPE 字段,随后是一个 16 位的 TAG_LENGTH 字段和一个数据可变的标签值。下表给出了TAG_TYPE字段的值和含义。

一次PPP会话开始,并最终由任何一方发送PADT(终止)消息来终止。如果低层连接中断,这个会话也会终止。

PPPoE 消息使用下图所示的格式,并封装在以太网的有效载荷区。

外链图片转存中...(img-RSGACKuo-1744638406646)

  • PPPoE版本和类型:长度都是 4 位,并包含当前PPPoE 版本的值0x1。

  • 代码:包含 PPPoE 消息类型的提示,如图的右下部分所示。

  • 会话 ID 字段包含值 0x0000 表示 PADI、PADO 和 PADR 消息,并在后续消息中包含一个唯一的 16 位数字。在 PPP 会话阶段会保持相同的值。

  • PAD 消息包含一个或多个标签,它们按 TLV 方式排列为一个 16 位的 TAG_TYPE 字段,随后是一个 16 位的 TAG_LENGTH 字段和一个数据可变的标签值。下表给出了TAG_TYPE字段的值和含义。

    外链图片转存中...(img-lwnmxp3d-1744638406647)

相关推荐
庸子19 分钟前
Active Directory域服务管理与高级应用技术白皮书
运维·服务器·网络·windows·ad
开发者工具分享1 小时前
项目后期发现重大漏洞,如何紧急修复
网络·安全·web安全
搬码临时工1 小时前
路由器端口映射的意思、使用场景、及内网ip让公网访问常见问题和解决方法
运维·服务器·网络·物联网·tcp/ip·计算机网络·智能路由器
、我是男生。1 小时前
MQTT、HTTP短轮询、HTTP长轮询、WebSocket
websocket·网络协议·http
小徐Chao努力1 小时前
【计网】SSL/TLS核心原理
网络·网络协议·ssl
codingandsleeping8 小时前
HTTP1.0、1.1、2.0 的区别
前端·网络协议·http
一一Null10 小时前
关于手机取证中逻辑采集与系统备份的差异
服务器·网络·智能手机
码农新猿类10 小时前
服务器本地搭建
linux·网络·c++
张太行_10 小时前
UDP目标IP不存在时的发送行为分析
网络协议·tcp/ip·udp
SlientICE11 小时前
TCP是什么?不需要!使用ESP32网络层直接通信!
网络·单片机·网络协议·tcp/ip