摘要
- PPP Multilink 为来自多条成员链路的分片建立一个束级序列;B、E 位标出原包首尾,序号按分片递增,不会因为新包开始或成员加入而复位。
- 公共协议不强制等长分片或统一调度器。小包可以不拆,大包可以不均匀地拆,发送端可按本地速率选链路;MRRU 只限定接收端承诺重组的上限。
- 每条成员链路的 FCS 校验自己的分片,重组后的整包没有新增 FCS。Endpoint Discriminator 只辅助归束,并非凭证;BAP/BACP 与多类别扩展后来分别处理动态带宽和时延。
新接通的线路没有开启第二个网络
两条 ISDN 承载信道都能运行 PPP。最直观的办法,是把它们当成两条互不相关的网络链路;代价是地址、网络控制协议以及运维状态也会分成两套。另一个极端,是随意把同一包的字节撒到两条线上,却不给对端共同的恢复依据。只要两条线速度不同,后发的片段就可能先到。
Multilink 选择了中间的一层抽象:束。成员各自保留成帧、LCP 与认证过程,而网络层协议通常只在束上协商一次。成员可以加入或退出,束不必因此抹掉已经形成的网络层状态。
1994 年的 RFC 1717 首次写下这套机制,1996 年的 RFC 1990 取而代之并收紧若干含糊处。它常被概括为“带宽捆绑”,但历史上更值得保存的并非两条线相加的算术,而是一个更窄的问题:当物理成员会变化时,哪一小组状态必须由双方共同理解,才能还原同一个包?
被切开的不是一张完整的物理帧
发送端先把网络协议包加上普通 PPP Protocol 字段,但还没有加某条成员链路的 Address、Control、Flag 与 FCS。这个逻辑对象才是 Multilink 可分割的内容。每个分片随后作为 PPP 协议 0x003d 发送,前面带 MP 头;第一片的数据开头就是原 PPP 包的 Protocol 字段。
MP 头里的 B 位表示包的第一片,E 位表示最后一片。一个包完全不拆时,B 与 E 可以同时为 1。这一点排除了常见误读:进入 Multilink 不等于每个包都必须被切碎。小包可以保持完整;被切的包也不必平均分。发送端可以按成员速率比例安排片长,也可以采用另一种本地策略。
接收端无需知道发送端为什么作出某次调度。它只需读懂分片身份、包边界与顺序。这正是最小共同规范的价值:互操作所需的语法固定,性能策略仍可演化。
序号属于束,而不是某个包或某条线
默认 MP 头带 24 位序号,双方也可协商 12 位短头。一个束内必须统一使用同一种格式。每发一个分片,序号就向前推进。
序号不会在原包结束后重新从零开始,也不会因为第二条成员链路接入而重置。真正新建的束从零开始;旧束的成员集合改变,并不会自动形成新纪元。否则,新链路上的低序号很容易与旧成员上延迟到达的片段混淆。
接收端同样只维护一个束级重组结构。各成员速度与传播时延不同,片段乱序是正常情形。接收端记录每条活动成员已经观察到的序号进度,并求得一个共同越过的最低点。当某个缺口已经低于所有成员的进度时,它就不能再仅仅被解释为“还在较慢线路上”。接收端可丢弃无法完成的旧包,继续寻找后续 B/E 边界。
这个方法能界定等待,却不能取消不确定性。成员越慢、时延差越大、分片越大,所需缓存就可能越多。RFC 1990 还明确指出:如果对端故意扣住包,任何缓存量都无法保证检测出损失。序列只让重组可判定到一定程度,不会凭空创造可靠传输。
每片都能校验,不等于整包已经存在
每条成员链路仍按普通 PPP 成帧,并用自己的 FCS 保护所承载的那个 MP 分片。Multilink 没有在全部分片拼回原包之后再添加一个新的整体 FCS。
因此,十一个分片中的十个可能都通过链路 FCS,而第十一个永远没有到达。已有的十个并未损坏,接收端却仍无法交付原包。“所有成员 FCS 很干净”与“束完整交付了包”不是同一句话。
RFC 1990 也没有指定唯一的成员故障检测器。LQM 或 LCP Echo 可以提供旁证,但它们不在 MP 分片头里。如果某条成员需要可靠交付,还要另行协商 PPP Reliable Transmission。MP 负责排序和重组,不负责重传,也没有应用层确认。
排障记录因此至少应拆成五层:成员是否 Opened、成帧与 FCS 计数、每条成员最后观察到的序号、束的缺口与重组丢弃、向上交付的完整包以及最终业务结果。把这些全部压成一个“bundle healthy”,会恰好抹掉协议努力保留的证据边界。
MRRU 是重组承诺,不是成员线路的 MRU
Maximum Reconstructed Receive Unit 描述接收端愿意在束上接收的最大重组信息字段。它不是把某条成员链路的 MRU 换了一个更长的名字。成员只需装下自己的分片,逻辑包则在 MRRU 边界内恢复。
MRRU 的 LCP 选项类型是 17。它还承担一个明确的能力信号:不协商 MRRU,就不能靠 Short Sequence Number Header Format 单独宣布 Multilink。RFC 1990 要求至少支持 1500 字节,并取消早期文本中容易造成误判的默认值。
类型 18 协商短序号头,类型 19 是 Endpoint Discriminator。后者可以帮助判断两条线路是否通往同一对端、应归入哪个束,但它既不是 Multilink 能力本身,也不是身份认证。
有些判别符类别只在本地分配,不能保证全球唯一;Magic-Number Block 也只具概率上的独特性,在已有认证手段时,不应继续把它当数据库或认证键。对端还可以伪造这个值。RFC 1990 的安全边界很清楚:需要安全地让成员加入束,就必须使用 PPP 认证。标识符帮助匹配,不能自动授予权限。
何时增加一条线,是另一层协议的问题
基础 MP 允许成员集合变化,却不决定何时拨起第二条线,也不决定哪一端有权作出带宽选择。RFC 2125 把这两个问题交给 BACP 和 BAP。BACP 为一个束确定带宽分配的控制方;BAP 请求增减链路,并报告呼叫尝试状态。
这种分离避免了把运营策略塞进重组语法。BAP 报告呼叫成功,只能证明那次成员操作的结果;它不能证明新成员完成了预期配置、确实承载 MP 分片、改善了吞吐,更不能证明应用交易成功。
1999 年的 RFC 2686 又展示了另一条边界。基础 MP 的单一序列会产生串行化阻塞:1500 字节在 28.8 kbit/s 线路上可占用约 400 毫秒,使对话往返时延逼近一秒。多类别扩展允许高优先级分片穿插在低优先级分片之间。重组契约没有假装自己已经解决时延政策;需要时,再用独立扩展表达。
束是一份最低限度的共同事实
PPP Multilink 的成功,在于它让变化的物理成员共享一小组稳定状态:是否具备 MP 能力、MRRU、统一的序号格式、B/E 包边界以及一个连续的束级序列。发送端不必公开调度算法,接收端也不必把缓存策略变成全球规则。
这与把所有控制集中到一个权威完全不同。成员准入由认证负责,分片安排由发送端负责,接收容量由 MRRU 负责,动态拨号与优先级则交给可选的后续协议。共同语义只覆盖互操作无法回避的部分。
证据也必须保持这种克制。看到 0x003d,只能证明观察点存在 MP 表示;看到 B/E 和序号,只能证明分片声称的位置;看到 MRRU,只能证明重组上限;看到 Endpoint Discriminator,只得到一个归束线索。完整交付、身份、带宽收益与现实部署,都要由运行中的捕获、成员计数、重组完成数和上层结果另行证明。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
