主动队列管理

网络工程 通讯协议 协议理论 第4层
2021-07-30 14:09:01

正在阅读有关 Active Queue Management 的一篇论文。刚看到这一段,我无法理解。在这部分感到困惑:

https://queue.acm.org/detail.cfm?id=2209336

在此处输入图片说明

图 4 显示了 TCP 接收器的队列与时间的关系,它每个窗口发送一个 ack 而不是每个数据包发送一个。这是一些商业操作系统使用的合法但脆弱的操作模式,每个数据包的开销非常高,以减少生成的 ack 数量,以便在基准测试中可靠地执行。这种队列长度的变化也出现在 Web 流量中——主要是小传输的叠加,这些传输基本上都是启动瞬态的。由于这个 ack 策略意味着一个完整的数据包窗口总是作为一个背靠背的突发传输,初始开启瞬态在每个 RTT 重复,并且缓冲区总是被占用。然而,窗口恰好填满了管道,并且没有多余的队列,因此任何减少此队列的尝试都将导致瓶颈的利用率低下。因此,

1)。我的理解是 Ack 总是按数据包发送。如果不是,每个窗口也发送 ack 是什么意思?2)。这个语句是什么意思“由于这个 ack 策略意味着一个完整的数据包窗口总是作为背对背突发传送,初始开启瞬态重复每个 RTT 并且缓冲区总是被占用”?

1个回答

Q1) 主机应该尽快发送 ACK = 在每个数据包的基础上。但是,正如文本中提到的,在窗口结束时仅发送一个 ACK​​ 并不违反 RFC。

Q2) 发送方在整个窗口中发出声音,只有当窗口结束时,ACK 才会到达并安排新的窗口。这与发送窗口的正常滑动模式形成对比。这种突发通常只在传输开始时出现,此时 TCP 参数必须自行对齐。'ACK only at end of window' 阻止这种对齐。

很明显,这种 ACK 方案破坏了滑动窗口方案的目的。本质上,它将吞吐量限制为每个 RTT 一个窗口。这很像一个接收/发送窗口为 1 的数据包与窗口大小一样。