【链路层】流量控制:发送窗口大小和链路利用率计算
一直觉得公式分母似乎有些小问题,结果仔细一画图分析就是对的
在数据链路层的滑动窗口式流量控制中,需要确定发送端的发送窗口大小(最大在途帧数)。这个问题的讨论引出了链路利用率和实际数据传输速率的概念和计算。
结论
链路利用率(信道利用率,以下简称利用率):发送方在一个发送周期的时间内,有效发送数据的时间占整个发送周期时间的比率。
链路带宽(信道带宽,以下简称带宽),也即理论数据传输速率,单位b/s。
带宽延迟积(BDP)= 带宽 \(\times\) RTT/2,单位就是数据量b。
信道吞吐率,也即实际数据传输速率,单位b/s
定义以下量:
- BD = BDP / 数据帧长:一个带宽延迟积包含多少数据帧,信道单向最多能发所少数据帧
- \(T_s\) = 数据帧长 / 带宽:数据帧的发送时间
- \(T_a\) = ack帧长 / 带宽:确认帧的发送时间
- \(w\):发送窗口大小,不考虑接收窗口大小
则有:
- 最大有效的窗口大小为 w = 2BD+1,此时链路理论上可不停发出帧。虽然设置上w可超过有效大小,但以下我们只考虑有效值,因而有\(w \leq 2BD+1\)
- 利用率 \(\leq \frac{w}{2BD+1}\),取等时为完美链路
- 实际利用率 \(= \frac{w\cdot T_s}{T_s + RTT + T_a}\)
- 实际数据传输速率 = \(\min\{ \frac{w \cdot 数据帧长}{T_s+RTT+T_a}, \textrm{带宽} \}\)
- 从而也发现这个利用率定义的一致性:利用率 = \(\frac{实际数据传输速率}{理论数据传输速率}\)
分析
考察理想情况下最满的情况:发送方一直在传数据帧,也即w=2BD+1。
假设BD=4,则一个发送周期的图景如下:
欸发现w=2BD+2才对啊,坏了;
2BD+1应该是忽略ack接收时间计算得的(或者说只要感应到ack0就释放缓冲区?这好像不合理),对应图景中④的情况
①到⑤为一个发送周期,随后将进入下一个发送周期。当w=2BD+2时,⑤-1并不适合作为传输周期的终点,此时可将④作为一个周期的结束;当w<2BD+2时,⑤-2则为恰当的传输周期重点
下面从两个视角推导相关公式。始终根据定义,利用率 = 发送有效数据时间 / 发送周期时间。
上述完美链路中最满发送图景中链路利用率 = 100%。据此可知,满利用率的发送窗口数为2BD+1(一个来回RTT时间:2BD;在接收ack0的时候也要能发送:1)。// TODO
视角1:考虑完美链路的非满发送,当\(w\leq 2BD+1\)时,在一个发送周期内显然能发完所有发送窗口数个的数据帧,于是可得公式1:\(利用率 = \frac{w}{2BD+1},w\leq 2BD+1\)。 // TODO
视角2:考虑非完美链路的非满发送,则此时会有\(利用率 \leq \frac{w}{2BD+1}\)。此时,使用实测数据RTT继续根据定义可得公式2:\(利用率 = \frac{w\cdot T_s}{RTT+T_s+T_a}\)。(可以发现,完美链路下 \(RTT/2 = BD\cdot T_s\))
两个视角基本相合(细节处理不同)发现2BD+2后尚未厘清视角1应该怎么调整使合于框架;但视角2的公式,除了无法描述100%的情况(因而最终公式配合使用了min)外总是对的。
练习
这块儿长得都差不多
【2017-912】太空站到地球带宽为 128kbps 的无错信道上单向发送 512 字节的数据帧,端到端的传播延迟 300ms,确认帧长度忽略不计,接收窗口足够大,问发送窗口分别为1/15/27时,吞吐率(数据发送速率)是多少?若要使信道利用率达到最大,则帧序号至少为多少位?