拥塞的代价
运输层向网络层中发送报文段(含有初始数据或重传数据)的速率用表示,它有时被称为网络的供给载荷。
TCP所采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。
TCP发送方跟踪一个拥塞窗口cwnd,它对一个TCP发送方能向网络中发送流量的速率进行了限制。在一个发送方中未被确认的数据量不会超过 cwnd 和 rwnd(接收窗口) 中的最小值,即满足以下公式。
LastByteSent - LastByteAcked ≤ min{cwnd,rwnd}
注意rwnd是流量控制中的概念。在下面的讨论中,我们将接收方缓存视为无限大,这样来讨论拥塞控制而避免流量控制的问题。
在每个RTT的起始点,上面的限制条件允许向连接发送cwnd个字节的数据,在RTT结束时发送方接收对数据的确认报文。因此发送方的发送速率大概是cwnd/RTT
字节/秒。通过调节cwnd的值,实际上调节了发送方向连接发送数据的速率。
我们将一个TCP发送方的丢包事件定义为:要么出现超时,要么收到来自接收方的三个冗余ACK。而丢包事件在发送方看来,是路径上出现了拥塞的一种指示。
因为TCP使用确认来触发(或增大)它的窗口调节长度,TCP被称为自计时的。
TCP遵从下列指导性原则以令发送方确定它应当发送的速率
慢启动
TCP连接开始时,cwnd 的值通常被设为一个 MSS 的较小值,这使得初始发送速率大约为 MSS/RTT。但对于 TCP 发送方而言,可用带宽可能远大于 MSS/RTT,因此 TCP 发送方希望尽可能快地找到可用带宽的数量。
在慢启动状态,cwnd 的值以一个 MSS 开始并且每当传输的报文段首次被确认就增加一个 MSS。这样一来,每经过一个 RTT,发送速率就翻倍。TCP 发送速率呈现指数级增长。
每有一个报文被首次确认,就增加一个MSS。这导致了每一个RTT内cwnd都会翻倍。
有下列三种改变状态的情况
如果存在超时指示的丢包事件,将 cwnd 置为 1 并重新开始慢启动过程。还将第二个状态变量的值 ssthresh(慢启动阈值)设置为 cwnd/2。
相当于用ssthresh标记一下可能快要出现超时的位置
当 cwnd 的值等于 ssthresh 时,结束慢启动并令 TCP 转移到拥塞避免模式。
如果检测到三个冗余 ACK,TCP 反应相对不那么剧烈,而是将 cwnd 的值减半,再为三个冗余 ACK 加上三个 MSS。再将 ssthresh 的值记录为 cwnd 的一半。最终进入快速恢复状态。
拥塞避免
进入拥塞避免说明 cwnd 的值是上次遇到拥塞的值的一半,这意味着我们距离拥塞并不远。因此 TCP 不再选择每过一个 RTT 将 cwnd 的值翻番,而是每次只将 cwnd 的值增加一个 MSS。
有下列两种改变状态的情况
快速恢复
TCP拥塞控制的FSM描述
TCP连接大多数情况下都处于拥塞避免状态,这个时候的cwnd增长是一种线性增长。而无论是发生了超时还是快速回复,cwnd的下降都是以减半为基础的。所以我们称之为****
对 TCP 吞吐量的宏观描述
w/RTT
。0.75W/RTT
。现有丢包率L,往返时间RTT,最大报文段长度MSS,可推导出一条连接的平均吞吐量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nJOsao0-1628833752541)(G:\markdown\计算机网络\3 运输层\image-20210627223055720.png)]
R/K
,即每条连接都得到相同份额的链路带宽,则认为该拥塞控制机制是公平的。手机扫一扫
移动阅读更方便
你可能感兴趣的文章