运输层(二)
5.5、TCP的拥塞控制
概念
网络拥塞往往是由许多因素引起的。例如:
- 点缓存的容量太小
- 链路的容量不足
- 处理机处理的速率太慢
- 拥塞本身会进一步加剧拥塞
拥塞控制的一般原理
- 拥塞控制的前提:网络能够承受现有的网络负荷
- 实践证明,拥塞控制是很难设计的,因为它是一个动态问题
- 分组的丢失是网络发生拥塞的征兆而不是原因
- 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因
开环控制和闭环控制
监测网络的拥塞
主要指标有:
- 由于缺少缓存空间而被丢弃的分组的百分数
- 平均队列长度
- 超时重传的分组数
- 平均分组时延
- 分组时延的标准差,等等
上述这些指标的上升都标志着拥塞的增长。
拥塞控制的算法
真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
下图的实例横纵坐标的意思
传输轮次:
- 发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段。
- 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值。
- 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。
拥塞窗口:
- 它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化。
慢开始
慢开始(slow-start)
- 目的:用来确定网络的负载能力或拥塞程度。
- 算法的思路:由小到大逐渐增大拥塞窗口数值。
- 两个变量:
- 拥塞窗口(cwnd):初始拥塞窗口值:2 种设置方法。窗口值逐渐增大。
- 1 至 2 个最大报文段 (旧标准)
- 2 至 4 个最大报文段 (RFC 5681)
- 慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞
图中swnd是发送窗口
每经过一个传输轮次,拥塞窗口cwnd就加倍
窗口大小按指数增加,2的n-1次方
拥塞避免(congestion avoidance)
- 思路:让拥塞窗口 cwnd缓慢地增大,避免出现拥塞
- 每经过一个传输轮次,拥塞窗口cwnd = cwnd + 1
- 使拥塞窗口 cwnd 按线性规律缓慢增长
- 在拥塞避免阶段,具有 “加法增大” (Additive Increase) 的特点
- 如果在发送过程中出现部分报文段丢失,这必然会造成发送方对这些丢失报文段的超时重传
- 这个时候又回到了慢开始
- 当慢开始算法执行到拥塞窗口值增大到新的慢开始门限值时,就停止使用慢开始算法。转而执行拥塞避免算法。
两个算法完整示意图
快重传和快恢复
快重传(fast retrasmit)
快恢复(fast recovery)
改进后的整体算法的示意图
练习
慢开始算法是指数增长的,16的时候拥塞了,说明在16之前就开始执行拥塞避免算法了,所以慢开始门限一开始应该是8。
5.6、TCP 超时重传时间的选择
如果超时重传时间 的值设置得比往返时间RTT0的值
RTO
,这会引起报文段不必要的重传,使网络负荷增大。
小很多
如果超时重传时间 的值设置得
RTO
往返时间RTT0的值,这会使重传推迟的时间太长,使网络的空闲时间增大,降低传输效率。
远大于
RFC6298 建议使用下式计算超时重传时间RTO
往返时间RTT的测量比较复杂
TCP 超时重传时间RTO的计算
注意:新的RTTD的计算公式中的RTTs指的是上一次计算出来的RTTs,而不是本次的RTTs。