计算机网络 39:独立研究小项目,复现一个拥塞、排队或协议性能结论
“发送的数据总量相同,完成时间就应接近”忽略了到达过程。固定出口每毫秒服务一个报文时,24 个报文均匀到达可以几乎不排队;同样 24 个报文在很短窗口内到达,最后一部分会等待多个服务周期。
本篇把这个判断做成一个小型可复现实验。研究问题是:总报文数、报文大小和服务率不变时,发送同步程度是否改变队列等待分布;pacing 能否在该模型内缩短尾部等待。第 19、20、35 篇提供拥塞、队列和 incast 前置知识。
假设、基线与判定标准
实验使用离散 FIFO 单服务台。每个报文的服务时间固定为 1000 微秒,每次运行处理 24 个等长报文。三种到达模式只改变时间分布:
steady:单个来源每 1000 微秒提交一个报文,并加入 0–200 微秒固定种子抖动。burst:24 个报文都在 0–200 微秒窗口到达。paced:八个来源各发送三个报文,三轮之间间隔 8000 微秒,每轮带 0–200 微秒抖动。
种子固定为 7、19、43。每次运行保存 24 个逐报文等待值,并计算平均值、p50、p99 与最大值。预注册判定是每个种子都满足 burst p99 > paced p99 > steady p99。若任一运行不满足,结论在这个配置下被反驳。
这里的 p99 使用 nearest-rank:对 24 个等待值排序,取第 ceil(0.99 × 24) 个。样本很小,因此 p99 实际等于最大值;文章不会把它外推成线上 p99。
模式提炼:一次只改变待研究变量
固定服务模型与工作量 + 改变到达过程 + 重复固定种子 + 保存原始值
性能结论需要同时交代输入、统计口径和反例。只给一张平均值图,无法判断尾部是否由少数突发产生。
可复跑实现
queue_experiment.py 使用 Python 标准库生成到达时间,按 start = max(arrival, previous_finish) 计算 FIFO 服务开始时刻,等待时间为 start - arrival。它不实现 TCP、拥塞控制或真实队列管理器。
1 | |
素材包括实验配置、实验脚本、逐报文原始数据与汇总、资料与运行记录和审阅记录。
结果与解释
三次重复中,steady 的 p99 保持在很小范围,paced 的 p99 约为一个八报文批次的排队量,burst 的 p99 接近 23 个服务周期。固定工作量并没有固定等待分布,到达同步程度改变了瞬时队列长度。
pacing 在本模型中有效,是因为它把三个八报文批次分隔开,出口能在下一批到达前清空队列。这个结论依赖 pacing 间隔大于一批的服务时间。若把轮次间隔缩短,队列来不及清空;若出口服务率足够高,burst 也可能不产生显著等待。
模型没有反馈环,因此不能声称复现了 TCP 或 QUIC 拥塞控制。RFC 9002 中的拥塞窗口、ACK、丢包检测与 pacing 约束远比单服务台复杂。这里复现的是排队论中的条件化结论:相同总工作量的到达时序不同,会产生不同等待。
反例与证据强度
第一个反例是无限快出口。服务时间趋近零时,三种到达模式的等待都趋近零,同步本身不会造成可观测队列。
第二个反例是足够大的 pacing 间隔只改善发送端可控的突发。如果多个独立来源仍在同一时刻汇聚,单个来源 pacing 不保证消除 incast。
第三个边界是 FIFO。FQ-CoDel 把流隔离与受控延迟算法组合起来,CoDel 根据队列驻留时间采取动作。本文没有实现二者,不能从结果推导其真实参数或收益。
练习
练习一:把 pacing 间隔从 8000 微秒改为 4000 微秒,先预测 p99 如何变化,再运行脚本。解释哪一批报文开始与前一批队列重叠。
练习二:保持 24 个报文不变,把服务时间改为 100 微秒。说明为何 burst 的绝对等待下降,但“同步到达增加队列”的方向仍可能成立。
模式速查表
| 研究要素 | 本篇固定内容 | 结论边界 |
|---|---|---|
| 工作量 | 24 个等长报文 | 不代表真实业务大小分布 |
| 服务 | FIFO、每包 1000 微秒 | 不代表交换机或内核调度 |
| 重复 | 固定种子 7、19、43 | 只覆盖 0–200 微秒抖动 |
| 原始数据 | 每包等待时间 | 没有真实时间戳与抓包 |
| 反例 | 快出口、短 pacing 间隔 | 结论必须带容量条件 |
官方一手参考资料
- RFC 8289:The Controlled Delay Active Queue Management Algorithm,IETF,2018-01,访问于 2026-09-24。
- RFC 8290:The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm,IETF,2018-01,访问于 2026-09-24。
- RFC 8257:Data Center TCP (DCTCP),IETF,2017-10,访问于 2026-09-24。
- RFC 9002:QUIC Loss Detection and Congestion Control,IETF,2021-05,访问于 2026-09-24。
验证边界
已验证:Python 3 标准库在三个固定种子下重复运行 FIFO 离散模型,保存逐报文等待值并检查预注册顺序,验证类型为 STATIC。
NOT_RUN:未使用真实 NIC、交换机、内核 qdisc、TCP/QUIC 实现、硬件时间戳或跨主机链路;没有真实吞吐和延迟测量。模型输出不得与论文或设备结果拼接成性能排名。





