摘要

  • RFC 9893 用信用窗口做主动流控:调制解调器为 FID 增加以字节计的信用,路由器只有在余额足以覆盖完整报文及 MAC 开销时才可发送。
  • Grant 是一段本地接口上的许可,Status 是路由器眼中的余额。两者都不能证明调制解调器已入队、链路已发送、远端已收到或应用已提交。

一次故障复盘里,最整齐的是信用账。Grant 的总额、路由器扣减的字节数和最后一条 Status 能够对上,控制日志也没有未知 FID。偏偏远端业务少了一次操作。若把账目平衡写成“交付成功”,就等于让路由器替调制解调器、无线链路、远端主机和应用共同作证。

RFC 9893 为 Dynamic Link Exchange Protocol 增加两类消息和五个可复用 Data Item。基础协议 RFC 8175 让路由器与调制解调器交换可变链路的控制信息,却没有端点以外的流识别,也没有数据面流控。信用方案把动作提前:不是先灌满接收侧再等待暂停,而是先由调制解调器表示有空间,路由器才发。

这能减少因缓冲不足造成的丢包,但权限范围很窄。一个信用窗口通常对应调制解调器内的一条物理或虚拟队列,可以由多个流共享,也可以专用。它只约束路由器到调制解调器这个方向,不预订未来无线时隙,不保证介质状态不变,也不约束远端接收器。

信用之前先有分类。RFC 9892 用 TID 标识一组流,再用 FID 标识其中的具体流;调制解调器把 TID 与 DLEP 目的地关联。TID 和 FID 都只有调制解调器本地意义。两台设备使用相同数字,不代表同一对象;即使在同一设备上,FID 也只在一段 DLEP 会话内唯一。

因此,证据连接键必须包含会话纪元。调制解调器身份、路由器身份、会话实例、分类器版本、目的地、TID、FID 和通配规则缺一不可。重连后数字可能复用,只按 FID 聚合会把新旧队列混为一谈。若没有匹配分类器,路由器不得发送;没有通配规则承接时,未匹配报文必须丢弃。

五个 Data Item 各自陈述不同事实。Initialization 建立或更新某个 FID 的窗口。Association 把一组 TID 分类关联到目的地。Grant 给窗口增加信用。Status 报告路由器当前认为可用的信用。Request 请求一个、多个或全部 FID 的增量。把它们折叠成“队列正常”,会同时抹掉陈述者、时间和对象。

Grant 的字段很精确。Additional Credits 是 64 位无符号整数,单位为字节,零表示没有新增。调制解调器可在传输能力或本地队列可用量高于此前公布窗口时发放增量。但 RFC 也承认,所连接技术的实际开销可能无法与协议的 MAC 计数直接对应,调制解调器可能需要近似换算。因此,Grant 是基于当时局部状态做出的分配,不是对下一时刻链路条件的冻结。

路由器扣账也有明确边界。它必须先确认余额覆盖整个报文,计数包含路由器—调制解调器链路上可见的 MAC 帧结构、报头与尾部;发送后按这些字节扣减。由此能证明路由器做了分类、发送决定和本地计数。它不能证明调制解调器接口收下报文、固件把它放进预期队列、调度器选中了它、无线重试没有耗尽,或远端发来了确认。

Status 更不是调制解调器缓冲区的读数。它是路由器的当前余额视图,用于状态同步。调制解调器将其与自己的未结状态比较;若差异无法由观察到的数据帧解释,可以重新初始化窗口,或调整以后的 Grant。规范预先承认双方视图可能偏离。把账修平只证明控制状态完成校正,不能倒推出偏离期间每个报文的去向。

RFC 9893 还给出一道很清楚的证据边界:文中所述日志条件来自收到的 Data Item 内容,不会因为数据面活动本身而产生消息。因此,DLEP 控制日志安静,并不排除调制解调器入口丢包、队列丢弃、调度延迟、无线重试失败、远端丢失或应用拒绝。

RFC 9894 的 Diffserv 扩展让调制解调器把 DSCP 映射到信用窗口。但路由器可能支持更少的队列或组合,只能采用子集,或重置会话并声明不支持。RFC 2474 讲的是码点到本跳行为的映射,RFC 2475 则把分类、整形、监管与逐跳行为组合成服务。一次本地队列处理不能自动升级为端到端服务凭证。

RFC 8651 的暂停/恢复机制提供了对照:它同样只适用于这一子网中从路由器到调制解调器的数据通道。信用机制更主动,并不因此拥有远端链路的观察权。

可靠的闭环要为每次越界找到新证人。先保存扩展协商、会话纪元、分类器原文、目的地、TID/FID、Initialization、Association,以及每次 Grant、Status、Request。再连接路由器的分类结论、包含 MAC 开销的报文长度、发送时间和扣减。其后分别取得调制解调器入口与入队、占用与丢弃、排空与调度证据;取得链路发送、重试、失败或确认;取得远端网络和传输层接收;最后取得应用授权、提交与响应。

Lu Heng 的 Running-Code Primacy 要求每个运行组件只陈述自己观察到的现实。路由器不能因为账对了,就替调制解调器的固件发言;调制解调器也不能替远端应用确认。Minimum Initial Specification 则说明公共协议应保持精简:队列数量、DSCP 映射、Grant 频率、告警阈值、采样、留存和回滚,留给能够在本地观察并承担后果的运营者。

管理层真正要问的不是“当时有没有信用”,而是“哪个会话允许哪个报文跨过了哪一道边界,此后的每一道边界由谁提供独立证据”。

Sources