RFC1990:The PPP Multilink Protocol (MP),August 1996
本备忘录的状态
本文档为 Internet 社区指定了 Internet 标准跟踪协议,并请求讨论和改进建议。本协议的标准化状态和现状请参考当前版本的《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。
梗概
本文档提出了一种跨多个逻辑数据链路拆分、重组和排序数据报文的方法。这项工作最初的动机是希望利用 ISDN 中的多个承载通道,但同样适用于多个 PPP 链路连接两个系统的任何情况,包括异步链路。这是通过新的 PPP [2] 选项和协议来实现的。
当前 PPP 多链路规范 (RFC 1717) 和本备忘录之间的差异在第 11 节中进行了解释。任何实现本备忘录要求的附加限制的系统都将向后兼容符合 RFC 1717 的实现。
致谢
作者特别要感谢 ACC 的 Fred Baker、Network Systems 的 Craig Fox、Spider Systems 的 Gerry Meyer、Penril Dataability Networks 的 Dan Brennan、SGI 的 Vernon Schryver(对 padding 的全面讨论)以及 IP over大型公共数据网络和 PPP 扩展工作组,就该主题进行了很多有用的讨论。
1、 简介
1.1、 动机
基本速率和主要速率 ISDN 都提供了在系统之间打开多个同时通道的可能性,从而为用户提供了额外的带宽(需额外付费)。先前关于通过 ISDN 传输互联网协议的提议已将利用这种能力的能力作为一个目标(例如,Leifer 等人,[1])。
有一些提议在比特级别提供多个流之间的同步(BONDING 提议);此类功能尚未广泛部署,并且可能需要用于终端系统的额外硬件。因此,拥有一个纯粹的软件解决方案或至少是一个临时措施可能是有用的。
还有其他可以利用按需带宽的情况,例如使用 28,800 波特的拨号异步线路来备份租用的同步线路,或者打开额外的 X.25 SVC,其中窗口大小根据国际协议限制为两个。
在可用空间基础上在通道之间交替数据包的最简单可能算法(可能称为Bank Teller算法)可能会由于数据包的重新排序而产生不良副作用。
通过一个四字节的排序报文头和简单的同步规则,可以在系统之间的并行虚拟电路中拆分数据包,这样数据包就不会重新排序,或者至少大大降低了这种可能性。
1.2、 功能说明
这里讨论的方法类似于 ISO 7776 [4] 中描述的多链路协议,但提供了拆分和重组数据包的额外能力,从而减少了延迟,并可能增加有效最大接收单元 (maximum receive unit,MRU)。此外,这里对链路层上的确认模式操作没有要求,尽管这是可选的允许的。
多链路基于 LCP 选项协商,该协商允许系统向其对等方指示它能够将多个物理链路组合成一个“bundle”。只有在特殊情况下,一对给定的系统才需要连接它们的多个捆绑的操作。
在初始 LCP 选项协商期间协商多链路。系统通过发送多链路选项作为初始 LCP 选项协商的一部分,向其对等方表明它愿意进行多链路。这次谈判表明了三件事:
1. 提供该选项的系统可以将多条物理链路组合成一条逻辑链路;
2.系统能够接收使用多链路报文头(稍后描述)分段的上层协议数据单元(protocol data units,PDU),并将分段重新组装回原始PDU进行处理;
3. 系统能够接收大小为 N 个八位字节的 PDU,其中 N 被指定为选项的一部分,即使 N 大于单个物理链路的最大接收单元 (MRU)。
一旦多链路协商成功,发送系统就可以自由地发送用多链路头封装和/或分段的 PDU。
1.3、 约定
本文档的规范项中使用了以下语言约定:
** MUST、SHALL 或 MANDATORY - 该项目是规范的绝对要求。
** SHOULD或RECOMMENDED——除特殊情况外,通常应遵循该项目。
** MAY 或 OPTIONAL -- 该项目是真正的可选项,可以根据实施者的需要遵循或忽略。
2、 一般概述
为了通过点对点链路建立通信,PPP 链路的每一端必须首先发送 LCP 数据包以在链路建立阶段配置数据链路。在链路建立后,PPP 提供了一个认证阶段,在该阶段,认证协议可用于确定与链路所连接的每个系统相关的标识符。
多链路操作的目标是协调一对固定系统之间的多个独立链路,提供比任何组成成员具有更大带宽的虚拟链路。聚合链路或捆绑包由由多个链路连接的两个系统的标识符对命名。系统标识符可能包括 PPP Authentication [3] 提供的信息和 LCP 协商提供的信息。捆绑的链路可以是不同的物理链路,例如多条异步线路,但也可以是多路复用链路的实例,例如 ISDN、X.25 或帧中继。链路也可以是不同种类的,例如将拨号异步链路与租用的同步链路配对。
我们建议多链路操作可以建模为虚拟 PPP 链路层实体,其中通过不同物理链路层实体接收的数据包被识别为属于单独的 PPP 网络协议(多链路协议,或 MP),并根据多链路分段报文头中存在的信息。通过标识为属于多链路排列的链路接收的所有数据包都被呈现给相同的网络层协议处理机器,无论它们是否具有多链路报文头。
使用多链路过程传输的数据包根据 PPP 规则进行封装,其中手动配置了以下选项:
** 没有异步控制字符映射
** 没有魔术字
** 无链路质量监控
** 地址和控制字段压缩
** 协议字段压缩
** 没有复合框架
** 没有自我描述填充
根据 RFC1661 中指定的规则,这意味着实现必须接受在重组数据包的协议字段中存在或不存在前导零的重组数据包。虽然下面明确禁止在要分片的材料中包含地址和控制字段(通常是两个字节 FF 03),但无论如何都接受数据包是一种很好的防御性编程实践,如果存在则忽略两个字节,如这就是 RFC1661 指定的内容。
作为对在获得特定对齐时性能更好的实施方式的礼貌,建议在创建捆绑时通过检查是否已在允许进入捆绑的第一条链路上协商 PFC 来确定是否传输前导零。只要捆绑包仍然存在,该决定就应保持有效。
当然,允许各个链路对这些选项进行不同的设置。如下所述,成员链路应该协商自描述填充,即使预先分片的数据包不能被填充。由于成员链路上的协议字段压缩模式允许发送系统自行决定是否包含前导字节零,这是生成偶数长度数据包的替代机制。
捆绑包本身不允许 LCP 协商。实现不能通过多链路过程传输 LCP Configure-Request、Configure- Reject、-Ack、-Nak、Terminate-Request或-Ack 数据包,并且接收它们的实现必须静默丢弃它们。(“静默丢弃”是指不生成任何 PPP 数据包作为响应;实现可以自由生成记录意外数据包接收的日志条目)。相比之下,其他具有与更改捆绑包本身的默认值无关的控制功能的 LCP 数据包是允许的。一个实现可以发送 LCP Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply 和 Discard-Request 数据包。
逻辑链路实体的有效 MRU 是通过 LCP 选项协商的。网络控制协议数据包是否封装在多链路报文头中,甚至在哪个链路上发送它们都无关紧要,一旦该链路将自己标识为属于多链路布置。
请注意,不使用多链路报文头发送的网络协议无法排序。(因此将以任何方便的方式交付)。
例如,考虑图 1 中的情况。链路 1 在两个系统之间协商了网络层 NL 1、NL 2 和 MP。然后两个系统通过链路 2 协商 MP。
在链路 1 上接收到的帧在数据链路层根据 PPP 网络协议标识符进行解复用,并可以发送到 NL 1、NL 2 或 MP。链路 2 将接受具有链路 1 所接受的所有网络协议标识符的帧。
MP 接收到的帧在网络层根据 PPP 网络协议标识符进一步解复用,并发送到 NL 1 或 NL 2。MP 接收到的任何其他网络层协议的帧都将使用正常的协议拒绝机制拒绝。
图 1. 多链路概述
3、 数据包格式
在本节中,我们将描述各个分段的布局,它们是多链路协议中的“数据包”。网络协议数据包首先根据正常的 PPP 程序进行封装(但不成帧),然后将大数据包分成大小适合多条物理链路的多个段。尽管 PPP 规范允许这样做,但实现绝不能在要分段的逻辑实体中包含地址和控制字段。一个新的 PPP 报文头由 Multilink Protocol Identifier 组成,Multilink 报文头插入每个部分之前。(因此,PPP 中多链路数据包的第一个分段将有两个报文头,一个用于分段,然后是数据包本身的报文头)。
实现多链路过程的系统不需要对小数据包进行分段。也没有要求段的大小相等,或者根本不需要分组。与具有不同传输速率的成员链路竞争的一种可能策略是将数据包分成与传输速率成比例的段。另一种策略可能是将它们分成许多相等的分段,并为每个链路分配多个分段,数量与链路的相对速度成正比。
PPP 多链路分段使用协议标识符 0x00-0x3d 进行封装。协议标识符之后是一个包含序列号的四字节报文头,以及两个指示分段开始数据包或终止数据包的一位字段。在协商一个附加的 PPP LCP 选项之后,可以选择用一个只有 12 位序列空间的两字节报文头替换四字节报文头。假定地址和控制以及协议 ID 压缩有效。因此,单个分段将具有以下格式:
图 2:长序列号分段格式
图 3:短序列号分段格式
(B) Beginning,起始分段位是一个位字段,在派生自 PPP 数据包的第一个分段上设置为 1,对于来自同一 PPP 数据包的所有其他分段设置为 0。
(E) Ending,结束分段位是一个位字段,在最后一个分段上设置为 1,对于所有其他分段设置为 0。一个分段的 (B) 起始和 (E) 终止分段位可能都设置为 1。
序列字段是一个 24 位或 12 位的数字,每个传输的分段都会递增。默认情况下,序列字段为 24 位长,但可以通过如下所述的 LCP 配置选项协商为仅 12 位。
(E) Ending分段位和序列号之间是一个保留字段,其用途当前未定义,必须设置为零。当已协商使用短序列号时,长度为 2 位,否则为 6 位。
在此多链路协议中,单个重组结构与捆绑相关联。多链路报文头在此结构的上下文中进行解释。
图中所示的 FCS 字段是从传输数据包的成员链路的正常成帧机制继承而来的。如果在多个分段中传输,则没有单独的 FCS 应用于整个重组的数据包。
3.1、 填充注意事项
支持多链路协议的系统应该实现自描述填充。根据定义实现自描述填充的系统将在其初始 LCP 配置请求中包含填充选项,或者(为了避免配置拒绝的延迟)在接收到包含该选项的 NAK 后包含填充选项。
一个必须填充自己的传输但在不使用多链路时不使用自描述填充的系统,如果它通过仔细选择分段长度来确保仅(E)找到数据包的分段,则可以继续不使用自描述填充被填充。系统不得向对等方无法识别为已填充的任何数据包添加填充。非终端分段不得通过自描述填充以外的任何其他方法填充尾随材料。
如果系统可能填充非终端分段或使用易受攻击的网络或压缩协议,则系统必须确保在传输任何多链路数据包之前在单个链路上协商 RFC 1570 [11] 中描述的自描述填充到填充,如 RFC 1570 中所述。如有必要,添加填充的系统必须使用 LCP 配置 NAK 来从对等方引出配置请求以进行自描述填充。
请注意,LCP 配置请求可以随时在任何链路上发送,并且对等方将始终以自己的配置请求进行响应。填充其传输但不使用除多链路以外的易受填充攻击的协议的系统可能会延迟确保对等方具有配置请求的自描述填充,直到似乎需要协商使用多链路本身。这允许与既不支持多链路也不支持自描述填充的旧对等体填充的系统的互操作性。
4.交换缓冲空间对抗分段损失
在多链路过程中,一个信道可能相对于捆绑中的其他信道有所延迟。这可能导致分段被乱序接收,从而增加了检测分段丢失的难度。因此,估计接收器上缓冲所需的空间量的任务变得更加复杂。在本节中,我们将讨论一种声明分段丢失的技术,目的是最小化所需的缓冲区空间,同时最小化可避免的数据包丢失的数量。
4.1、 检测分段丢失
在捆绑中的每个成员链路上,发送方必须发送具有严格递增序列号的分段(以序列空间的大小为模)。此要求支持接收方基于比较序列号检测丢失分段的策略。序列号不会在每个新的 PPP 数据包中重新设置,即使对于包含整个 PPP 数据包的那些分段,也会消耗一个序列号,即其中(B)起始位和(E)结捆绑位都设置的分段。
实现必须将在新构建的包上传输的第一个分段的序列号设置为零。(加入到现有捆绑包的辅助链路对协议是不可见的,在这种情况下实现不得重置序列号空间)。
接收器跟踪捆绑中每个链路上的传入序列号,并维护捆绑中所有成员链路上最近收到的序列号的当前最小值(称为 M)。当接收器接收到带有 (E)nding 位的分段时,接收器检测到数据包的结尾。如果已接收到该分段之前的所有序列号,则数据包的重组完成。
当 M 前进超过带有尚未完全重新组装的数据包的 (E) 起始位的分段的序列号时(即,不是带有 (B) 起始位的分段和已接收到带有 (E)nding 位的分段)。这是因为捆绑包的序列号规则增加。假定如此检测到的任何序列号对应于已丢失的分段。
一个实现必须假设如果一个分段带有一个(B)起始位,那么之前编号的分段带有一个(E)起始位。因此,如果一个带有 (E)nding 位的数据包丢失,并且分片号为 M 的数据包包含一个 (B)eginning 位,则实现必须丢弃所有通过 M-1 的未组装数据包的分片,但不应丢弃该分片仅在此基础上承载新的(B)起始钻头。
检测到丢失的分段,其序列号被推断为 U,导致接收器丢弃所有分段,直到结捆绑位(可能推断出)大于或等于 U 的最低编号分段。但是,数量 M 可能跳到可以成功完成的一连串数据包的中间。
由于单个数据包的损坏或链路的灾难性丢失(可能仅在一个方向上发生),可能会丢失分段。这个版本的多链路协议没有规定检测故障链路的特定程序。可以使用 PPP 链路质量管理工具或定期发布 LCP 回显请求来实现这一点。
发送者应该避免保持任何成员链路空闲,以最大化接收者对丢失分段的早期检测,因为 M 的值不会在空闲链路上增加。如果没有足够的流量溢出一个链路的容量以避免空闲链路,发送者应该在成员链路之间轮流流量。
传输的最后一个分段的丢失会导致接收器停止,直到新的数据包到达。可以通过在捆绑中的每个成员链路上发送一个空分段来降低这种可能性,否则该空分段将在传输带有(E)nding位的分段后立即变为空闲,其中空分段是仅由多链路头组成的分段承载 (B)egin 和 (E)nding 位(即,没有有效负载)。担心浪费带宽或每个数据包成本的实现不需要发送空分段,并且可以选择推迟发送它们直到计时器到期,接收器中更长的停顿的可能性略有增加。接收者应该实现某种类型的链路空闲计时器来防止无限期的停顿。
每个链路规则的递增序列禁止将在故障链路后面排队的分段重新分配到工作链路,这种做法对于通过 LAPB 实现 ISO 多链路 [4] 来说并不罕见。
4.2、 缓冲区空间要求
没有多少缓冲可以保证正确检测到分段丢失,因为对抗性对等方可能会在一个通道上保留一个分段并在其他通道上发送任意数量的分段。对于所有通道都在传输的通常情况,您可以证明存在一个最小量,低于该量您无法正确检测到数据包丢失。该量取决于通道之间的相对延迟 (D[channel-i,channel-j])、每个通道的数据速率 R[c]、每个通道上允许的最大分段大小 F[c]、以及发送器在通道之间分配的缓冲总量。
当使用 PPP 时,可以使用 LCP echo request 和 echo reply 数据包来估计通道之间的延迟。(在不同传输速率的链路的情况下,应该调整往返时间以考虑到这一点。)每个通道的滑差定义为带宽乘以该通道相对于具有最长延迟的通道的延迟, S[c] = R[c] * D[c,c-worst]。(当然,S[c-worst] 将为零!)
会加剧序列号偏差的情况是,流量非常突发(几乎允许所有通道耗尽),然后发送器首先在一条链路上排队尽可能多的连续编号的数据包,然后排队在第二个链路上启动下一批,依此类推。由于发送器必须能够为每个链路至少缓冲一个最大大小的分段(并且通常会缓冲至少两个) 分配小于 S[1] + S[2] + ... + S[N] + F[1] + ... + F[N] 的任何接收器,将面临错误地假设丢包的风险,因此,应该至少分配两倍。
5、 PPP 链路控制协议扩展
如果需要可靠的多链路操作,则必须在每个成员链路上使用多链路协议之前协商 PPP 可靠传输 [6](本质上是使用 ISO LAPB)。
无论是否在成员链路上采用可靠传递,实现都必须向在多链路安排上运行的 NCP 提供一个信号,表明发生了丢失。
压缩可以在每个成员链路上单独使用,或者在捆绑包上运行(作为逻辑组链路)。通过运行压缩控制协议 [5] 来指示捆绑下(即,分别在每个链路上)使用多个压缩流,但使用替代的 PPP 协议 ID。
5.1、 配置选项类型
多链路协议引入了附加 LCP 配置选项的使用:
* 多链路最大接收重构单元
* 多链路短序列号头格式
* 端点鉴别器
5.1.1、 多链路 MRRU LCP 选项
图 4:多链路 MRRU LCP 选项
此 LCP 选项的存在表明发送它的系统实现了 PPP 多链路协议。如果没有被拒绝,系统会将在此链路上接收到的所有数据包解释为能够由通用协议机器处理,而在任何其他已接受此选项的链路上从同一对等方接收到的任何其他数据包都可以处理。
Max-Receive-Reconstructed unit 字段是两个八位字节,并指定重组数据包的信息字段中的最大八位字节数。系统必须能够接收任何重组的 PPP 数据包的完整的 1500 字节信息字段,尽管它可以尝试协商一个更小或更大的值。这里的数字 1500 来自 PPP 中 MRU LCP 选项的规范;如果此要求在 RFC 1661 的未来版本中发生更改,则此处将适用相同的规则。
系统必须在每个旨在实例化捆绑包或加入现有捆绑包的 LCP 协商中包含 LCP MRRU 选项。如果在旨在加入现有捆绑包的链路上提供 LCP MRRU 选项,则系统必须提供先前为捆绑包协商的相同 Max-Receive-Reconstruct-Unit 值。
系统不得在任何链路上发送任何多链路数据包,除非其对等方已提供 MMRU LCP 选项并且系统已在该链路上最近的 LCP 协商期间对其进行了配置确认。如果它的对等体没有提供它(直到,根据 PPP 规则,对等体配置拒绝它),系统可以在 configure-NAK 中包含 MMRU LCP 选项。
注意:当概念化为 PPP 实体时,此选项传达的 MRRU 值对应于捆绑包的 MRU;但是多链路 MRRU 选项的规则与 LCP MRU 选项的规则不同,因为必须在每次 LCP 协商中提供一些值,并且在多链路解释之前需要确认该选项。
5.1.2、 短序列号报文头格式选项
图 5:短序列号报文头格式选项
此选项建议对等方实现希望接收具有短的 12 位序列号的分段。当对等系统配置-Ack 的此选项时,它必须在捆绑的所有链路上以 12 位序列号发送所有多链路数据包或配置-拒绝该选项。如果需要 12 位序列号,则必须在实例化捆绑包时协商此选项,并且当系统打算使用 12 位序列号将该链路包含在现有捆绑包中时,必须明确包含在系统提供的每个 LCP 配置请求中.如果在捆绑包的生命周期内从未协商此选项,则序列号为 24 位长。
希望发送具有短序列号的多链路分段的实现可以在配置 NAK 中包含多链路短序列号,以要求对等方响应接收短序列号的请求。对等方不必用该选项做出响应。
5.1.3、 端点鉴别器选项
图 6:端点鉴别器选项
Endpoint Discriminator Option 表示发送数据包的系统的标识。此选项建议系统此链路上的对等方可能与另一现有链路上的对等方相同。如果该选项将此对等体与所有其他对等体区分开来,则必须从正在协商的链路建立一个新的捆绑包。如果此选项与现有链路的某个其他对等点的类和地址匹配,则新链路必须加入到包含到匹配对等点的链路的捆绑包中,或者必须建立一个新捆绑包,具体取决于 (1) 中所示的决策树通过下面的(4)。
为了安全地加入现有捆绑包,必须使用 PPP 身份验证协议 [3] 从对等方获取经过身份验证的信息,以防止敌对对等方通过提供伪造的鉴别器选项来加入现有捆绑包。
多链路操作不需要此选项。如果系统没有接收到多链路 MRRU 选项,但接收到了端点鉴别器选项,并且没有提供外部信息的手动配置,则实现绝不能假设仅在此基础上请求多链路操作。
由于也不需要身份验证,因此有四组场景:
(1) 无鉴权,无鉴别器:
除非有相反的手动配置,否则所有新链路都必须加入一个捆绑包。也允许有多个手动配置的捆绑包连接两个给定系统。
(2) 有鉴别器,不鉴权:
鉴别器匹配 -> 必须加入匹配包,鉴别器不匹配 -> 必须建立新包。
(3) 无鉴别器,有鉴权:
认证匹配 -> 必须加入匹配包,认证不匹配 -> 必须建立新包。
(4) 有鉴别器、有鉴权:
鉴别器匹配和认证匹配 -> 必须加入捆绑,鉴别器不匹配 -> 必须建立新捆绑,认证不匹配 -> 必须建立新捆绑。
该选项包含选择标识符地址空间的类和选择类地址空间内的唯一标识符的地址。
该标识符应指与传输系统相关的机械设备。对于某些类,标识符的唯一性是全局的,不受特定管理域范围的限制。在每个类中,地址值的唯一性由用于分配值的类相关策略控制。
每个端点可以无限制地选择一个标识符类别。由于目标是检测错误地假定为相似的端点之间的不匹配,因此仅在类上的不匹配就足够了。尽管不推荐使用一个类,但首选具有普遍唯一值的类。
系统或对等方都不需要支持此选项。如果配置请求中不存在该选项,则系统不得出于任何原因生成此选项的配置-Nak;相反,它应该表现得好像它收到了 Class = 0,Address = 0 的选项。如果系统收到此选项的 Configure-Nak 或 Configure-Reject,它必须从任何附加的 Configure-Request 中删除它。
大小由元素的 Length 字段确定。对于某些类,长度是固定的,对于其他类,长度是可变的。如果 Length 字段指示的大小低于类的最小值,则该选项无效。
实现可以使用端点鉴别器来定位本地数据库中的管理或身份验证记录。此选项的此类使用与其目的无关,并且在可以使用 PPP 身份验证协议 [3] 时不推荐使用。由于某些类允许对等点生成随机或本地分配的地址值,因此将此选项用作数据库密钥需要对等点管理员之间事先达成一致。
子字段的规范是:
Type:类型,19 = 用于端点鉴别器
Length:长度,3 + 地址长度
Class:类,Class 字段是一个八位字节,指示标识符地址空间。LCP Endpoint Discriminator Class 字段的最新值在最新的“Assigned Numbers”RFC [7] 中指定。当前值分配如下:
0:空类
1:本地分配的地址
2:互联网协议 (Internet Protocol,IP) 地址
3:IEEE 802.1 全局分配的 MAC 地址
4:PPP 魔术字块
5:公共交换网络目录号
Address:地址,地址字段是一个或多个八位字节,指示所选类别内的标识符地址。长度和内容取决于 Class 的值,如下所示:
类0:空类。
最大长度:0
内容:如果选项不存在于接收到的配置请求中,则此类是默认值。
类1:本地分配的地址。
最大长度:20
内容:定义此类以在无法使用全局唯一类之一的情况下允许本地分配。建议使用设备序列号。不推荐使用此类,因为不能保证唯一性。
类2:互联网协议 (IP) 地址。
固定长度:4
内容:此类中的地址包含 [8] 中定义的 IP 主机地址。
类3:IEEE 802.1 全局分配的 MAC 地址。
固定长度:6
内容:此类中的地址包含规范 (802.3) 格式 [9] 的 IEEE 802.1 MAC 地址。地址必须清除全局/本地分配位,并且必须清除组播/特定位。本地分配的 MAC 地址应使用 Class 1 表示。
类4:PPP 魔术字块。
最大长度:20
内容:这不是地址,而是 [2] 中定义的 1 到 5 个连接的 32 位 PPP 魔术字块。此类提供可能但不保证唯一的值的自动生成。在至少一个链路处于 LCP Open 状态的任何时间段内,端点必须连续使用相同的块。不推荐使用此类。
请注意,[2] 中使用 PPP 魔术字来检测从端点到自身的链路的意外环回。两个不同的端点生成匹配的魔术字的可能性很小。如果对等点可以生成不相关的魔术字,则在重复 LCP 协商以寻找所需的不匹配时,此概率会几何减少。
正如这里所使用的,魔术字用于确定两个链路实际上是来自同一个对等端点还是来自两个不同的端点。当有一个端点时,数字总是匹配的。即使有两个端点,数字匹配的概率也很小。为了获得与 LCP 环回检测一样的不存在错误匹配的信心,可以将几个不相关的魔术字组合在一个块中。
类:5:公共交换网络目录号。
最大长度:15
内容:此类中的地址包含由 I.331 (E.164) 定义的八位字节序列,表示适合用于通过公共交换电话网络 [10] 访问端点的国际电话号码簿号码。
6、 开始使用多链路头
当在一条链路(比如 Y)上协商了 Multilink 协议的使用,并且该链路被添加到当前包含单个现有链路(比如 X)的捆绑包中时,系统必须在 X 上传输多链路封装的数据包 在 Y 上传输任何多链路封装的数据包之前。
由于可以在包中添加和删除链路而不破坏与其关联的状态,因此应该为分段分配适当的(下一个)分段编号。如前所述,捆绑生命周期中传输的第一个分段被分配分段编号 0。
7、 关闭成员链路
成员链路可以根据正常的 PPP LCP 程序在该成员链路上使用 LCP Terminate-Request 和 Terminate-Ack 数据包来终止。由于假定成员链路通常不会对数据包重新排序,因此接收到终止确认足以假设其前面的任何多链路协议数据包都没有特殊的丢失风险。
在一个链路上接收到 LCP 终止请求不会终结捆绑其余链路上的过程。
只要捆绑中的任何成员链路都处于活动状态,捆绑的 PPP 状态就会作为单独的实体持续存在。但是,如果包中有一个唯一的链路,并且所有其他链路都正常关闭(使用 Terminate-Ack),则实现可能会停止使用多链路头。
如果多链路过程与 PPP 可靠传输一起使用,并且成员链路没有正常关闭,则实现应该预期接收到违反递增序号规则的数据包。
8、 与其他协议的交互
在常见情况下,LCP 和身份验证控制协议将在每个成员链路上进行协商。网络协议本身和相关的控制交换通常会在捆绑包上进行一次。
在某些情况下,可能希望某些网络协议免于排序要求,如果链路的 MRU 大小不会导致分段,则可以直接通过成员链路发送这些协议。
尽管上面明确表示不鼓励,但如果有多个成员链路连接两个实现,并且需要两个协议集的独立排序,但一个不被另一个阻止,则可以通过为给定系统分配多个端点标识符来描述两个多链路过程.但是,每个成员链路只属于一个捆绑包。可以将物理路由器视为包含两个逻辑上独立的实现,每个实现都是独立配置的。
一个更简单的解决方案是让一个链路拒绝加入捆绑包,方法是发送一个配置拒绝以响应多链路 LCP 选项。
9、 安全考虑
该协议的操作与 PPP 身份验证协议的操作一样安全 [3]。读者被引导到那里进行进一步讨论。
10、 参考文献
[1] Leifer, D., Sheldon, S., and B. Gorsline, "A Subnetwork Control Protocol for ISDN Circuit-Switching", University of Michigan (unpublished), March 1991. [2] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)", STD 51, RFC 1661, Daydreamer, July 1994. [3] Lloyd, B., and W. Simpson, "PPP Authentication Protocols", RFC 1334, Lloyd Internetworking, Daydreamer, October 1992. [4] International Organisation for Standardization, "HDLC - Description of the X.25 LAPB-Compatible DTE Data Link Procedures", International Standard 7776, 1988 [5] Rand, D., "The PPP Compression Control Protocol (CCP)", PPP Extensions Working Group, RFC 1962, June 1996. [6] Rand, D., "PPP Reliable Transmission", RFC 1663, Novell, July 1994 [7] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, USC/Information Sciences Institute, October 1994. [8] Postel, J., Editor, "Internet Protocol - DARPA Internet Program Protocol Specification", STD 5, RFC 791, USC/Information Sciences Institute, September 1981. [9] Institute of Electrical and Electronics Engineers, Inc., "IEEE Local and Metropolitan Area Networks: Overview and Architecture", IEEE Std. 802-1990, 1990. [10] The International Telegraph and Telephone Consultative Committee (CCITT), "Numbering Plan for the ISDN Area", Recommendation I.331 (E.164), 1988. [11] Simpson, W., Editor, "PPP LCP Extensions", RFC 1570, Daydreamer, January 1994.
11、 与 RFC 1717 的区别
本节记录了与 RFC 1717 的差异。对 RFC 1717 中不存在的实现有一些限制;遵守这些限制的系统可以与 RFC 1717 兼容的系统完全互操作。
11.1、 协商多链路,本身
RFC 1717 允许单独使用短序列号报文头格式 (Short Sequence Number Header Format,SSNHF) 或最大重构接收单元 (Maximum Reconstructed Receive Unit,MRRU) 选项来指示协商多链路的意图。本规范禁止单独使用 SSNHF 选项;但确实允许将两个选项的特定性放在一起。任何符合 rfc1717 并遵守此限制的实现都将与任何 RFC 1717 实现互操作。
11.2、 定义的初始序列号
该规范要求虚拟链路达到打开状态后传输的第一个序列号为 0。
11.3、 MRRU的默认值
该规范删除了 MRRU 的默认值(因为它必须始终与某个值协商),并指定实现必须支持具有与 PPP 的默认 MRU 大小相同的值的 MRRU。
11.4、 禁止 EID 的 Config-Nak
本规范禁止出于任何原因对 EID 进行 config-Naking。
11.5、 序列空间的均匀性
该规范要求在捆绑中的所有链路上使用相同的序列格式。
11.6、 开始和减少使用多链路头
本备忘录规定了在添加链路时应该如何开始使用多链路头,以及在什么情况下可以安全地停止使用它们。
11.7、 手动配置和捆绑分配
该文档明确允许在没有端点描述符和任何形式的身份验证的情况下手动配置多个捆绑包。