Skip to content

算法Algorithm

受限可靠流状态机

Restricted reliable stream · Cumulative acknowledgement protocol

在固定有限字节串上定义发送、丢失、乱序、重复、确认与重传事件,证明前缀安全并明确公平交付和退出条件。

形式陈述 ​

本页构造教学协议R9,而非TCP实现。底层沿用消息传递的发送与交付事件,允许包丢失、重复、乱序,不允许篡改、伪造;两端不崩溃。双方预先知道唯一且不复用的流标识 c、总长度 N 与固定分段边界,偏移是不会绕回的自然数,N≥0,m≥1。空流初态即满足 u=r=N=0,无数据包需发送。发送者保存不可变字节串 X[0:N)。这些强限制让补洞机制可以完整检查。

把 X 分成长度至多 m 的非空段,数据包为 (c,s,X[s:t))。发送者状态为累计已确认位置 u、已发新数据末端 n,初始 u=n=0。接收者保存数组 B[0:N)、每格是否已到的位图、连续前缀末端 r=0;输出只追加,不修改已有内容。事件规则如下。

  1. 新发送:发送从 n 起的下一段,再令 n=t。数据包进入可丢失信道
  2. 收数据:先检查流标识和固定分段范围,再填入尚未保存的字节;重复位置不重复输出。随后从 r 起逐格推进,直到遇到空格或到达 N,将新连续部分交给读者;回复ACK=(c,r)
  3. 收确认:只有 u<a≤n 才令 u=a;旧ACK不回退,超过 n 的ACK不接受
  4. 重传:若 u<n 且重传计时器到期,重发从 u 开始的最早未确认段。每次仍未完成,就继续安排以后有限时刻的重传;新发送也必须最终获得执行机会

固定分段及整段交付使 u,r,n 始终落在段边界。发送完成状态为 u=N。接收达到 r=N 后仍须回应该流的重复包,直到环境约定不再需要确认;不能刚交付完就销毁状态,否则最后ACK丢失会使发送者一直等待。

直觉

接收者不是按“包到达的次序”拼字符串,而是按包写明的位置补格子。确认报告连续填满到哪里。最后一段先到只会填后面的格子;缺口补上时,前缀可以一下推进很多字节。

重复包会再次触发确认,这正好修复“数据到了,确认没到”的情况。字节只追加一次与ACK可以发送很多次并不矛盾。

例子与边界

取 X 为十六进制 00 03 43 41 54 00 02 4F 4B,N=9,m=3,三段依次为P0=[0,3)、P1=[3,6)、P2=[6,9)。发送者先发三段,因此 n=9,u=0。按以下轨迹复算:

事件 已填位置 接收r 发出ACK 发送u
P1先到 [3,6) 0 0,到达发送者 0
P0丢失 不变 0 无 0
P2到达 [3,9) 0 0,到达发送者 0
超时重发P0并到达 [0,9) 9 9,但丢失 0
网络中重复P1到达 [0,9) 9 9,到达发送者 9
R9补洞与累计确认

只有第四步新增交付9字节;第五步没有第二份消息内容。数据发送共4次,含原始P0的丢失与一次重传;网络额外复制P1一次不算发送者调用。接收者发出4个ACK,其中一个丢失。这里不把三次“到达后段”理解成三个TCP重复ACK规则;R9没有Reno。

若最后ACK及以后所有ACK永久丢失,接收者可能早已完成,发送者仍无法确认完成。设定有限尝试上限可以让发送者退出,但返回只能表明“传输未获完整确认”;不能证明对端没收到,更不能回滚已交付前缀。若允许重启、旧流ID复用或位串篡改,本协议的证明前提失效,需要新增机制。

推论与应用

前缀安全为什么不依赖包的顺序 ​

采用归纳不变量:每个已填格 i 都等于 X[i];输出恰为 X[0:r);r 是从0开始连续填满的最大末端;发送侧 0≤u≤r≤N 且 u≤n≤N。初态显然满足。合法数据包只复制原位置的字节,推进循环只越过已填格,因此保持输出前缀。ACK由某个过去的 r 生成,而 r 单调,接受ACK便仍有 u≤r。丢失不改变端点状态,重复只重复填同值,乱序只改变哪些格先填。这逐类覆盖了全部事件。

什么时候能最终完成 ​

活性另需公平条件:持续未完成时,发送者最终发出所有新段并持续重传最早未确认段;某个数据包若被发送无穷多次,就被交付无穷多次;同样规则适用于反向ACK;接收者持续处理并保留流状态。若 u 永远停在某段起点,该段会反复到达,接收者最终产生至少越过该段末端的ACK。可取的ACK值有限,某个这样的值被发送无穷多次,最终到达,迫使 u 前进,矛盾。有限个段依次推进,得到 u=N。公平性没有给完成时间上界。

位图与缓存占 O(N) 空间。数组实现每个到达字节检查一次,前缀推进总共 N 次;若累计收到 D 个含重复字节的载荷字节,接收数据处理成本为 O(N+D);若还计入A次独立ACK处理,则再加 O(A),发送复制成本按实际发送载荷字节另计。无限丢失时通信量没有有限上界。有限窗口会进一步限制在途与缓存范围,但需要相应地改写发送规则,不能把本页的整流缓存假定悄悄删去。

参考资料
  • Peterson、Davie,Computer Networks: A Systems Approach,在线6.2-dev版,§5.2.4:按序字节、重传与滑动窗口机制。
  • RFC 9293,§§2.2、3.4,用于对照真实TCP累计确认;R9的预共享长度、固定分段、无绕回数组和证明均为本页自定模型,不是该RFC的实现声明。
关系图谱9 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系