-
判断网络拥塞的 依据
1、重传定时器超时(此时已经发生了拥塞)。
2、收到3个对同一报文段的重复确认(说明个别报文段在网络中丢失,在接收到后面的分组时发送的重复的确认,于是可能不久就会出现拥塞,但实际上可能还未发生即快要发生了,可以由此提前采取控制措施避免拥塞); -
TCP拥塞控制方法有四种:
1、慢开始
2、拥塞避免
3、快重传
4、快回复 -
下面讨论的拥塞控制是基于窗口的拥塞控制。
发送方维持一个叫作拥塞窗口cwnd
的状态变量。
拥塞窗口的大小取决于网络的拥塞程度,并且动态变化。
发送方让自己的发送窗口
等于拥塞窗口
。 -
发送方控制拥塞窗口的原则:
只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多分组发送出去,如此提高网络的利用率;
只要网络出现了拥塞或即将拥塞的征兆,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络中出现的拥塞。 -
慢开始算法
当主机开始发送数据时,由于不知道网络的负荷情况,所以若立即把大量数据字节注入到网络,可能引起网络拥塞。
经验证较好的方法是:由小到大逐渐增大发送窗口(即拥塞窗口值)。
慢开始算法规定:在每收到一个对新的报文段的确认后,可以让拥塞窗口增加最多一个SMSS(发送方的最大报文段)的数值。
记N为原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。
拥塞窗口 cwnd 每次的增加量 = min(N,SMSS)。
实际上TCP是用字节数
作为窗口大小的单位,本次用报文段的个数
作为窗口大小的单位
来分析拥塞控制的原理。
起初发送方先设置cwnd=1,发送第一个报文段M1,接收方收到确认后回复M1。
发送方收到对M1的确认后,把cwnd从1增加到2,于是发送方接着发送M2和M3两个报文段。接收方收到后发回对M2和M3的确认。发送方每收到一个对新的报文段的确认(重传的不算)就是发送方的拥塞窗口加1。因此收到两个确认后,cwnd就从2增大到4,下一轮可发送M4到M7共4个报文段。
如此使用慢开始算法,拥塞窗口值是指数加倍。 -
传输轮次:一个传输轮次所经历的时间其实就是往返时间RTT,把拥塞窗口cwnd所允许发送的报文段都连续发送出去并收到了对已发送的最后一个字节的确认。
如:
拥塞窗口cwnd的大小是4个报文段,那么这时的往返时间RTT就是发送方连续发送4个报文段,并收到这4个报文段的确认,总共经历的时间。 -
慢开始的
慢
:不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后逐渐增大 cwnd。这当然比设置大的cwnd值一下子把许多报文段注入到网络中要慢得多。 -
慢开始门限
已知慢开始算法的cwnd增长速度是以指数关系增大
的。
为了防止拥塞窗口cwnd增长过大引起网络拥塞 ,还需要设置一个慢开始门限 ssthresh
。
当 cwnd < ssthresh 时,使用上述的慢开始算法
;
当 cwnd > ssthresh 时,停止使用慢开始算法
,改用拥塞避免算法
;
当 cwnd = ssthresh 时,可以使用慢开始算法
,也可以使用拥塞避免算法
。 -
拥塞避免算法
让拥塞窗口 cwnd 缓慢地增大,即每进经过一个往返时间RTT,就把发送方的拥塞窗口 cwnd 加 1,而不是像慢开始阶段那样加倍增长。此时的 RTT 是概念性的往返时间,指的是上一轮次发送的所有报文段的确认
都已收到的时间。
拥塞避免阶段,拥塞窗口 cwnd 按线性规律
缓慢增长(称之为加法增大AI),比慢开始算法的拥塞窗口增长速率慢得多。
一般但出现超时
或者3个重复的确认
,就要把门限值
设置为 当前拥塞窗口值的一半,并调整拥塞窗口的数值,继续执行拥塞避免的算法
。 -
拥塞控制过程
-
快重传算法
要求接收方不要等待自己发送数据时才进行捎带确认,要求立即发送确认;
就算受到了失序的报文段
也要立即发出对已收到的报文段的重复确认
;
如上图,接收方收到了M1和M2后都分别及时发出了确认。
若接收方未收到M3却收到了M4。
本来接收方可以什么都不做,但是按照重传算法,接收方必须立即发送对M2的重复确认,以便让发送方及时知道接收方未收到报文段M3。
发送方接着发送M5和M6,接收方收到后也仍要再次分别发出对M2的重复确认。
如此发送方一共收到了4个对M2的重复确认,其中3个都是重复确认,就知道接收方确实未收到报文段M3,因而应当立即进行重传(快重传)。
如此不会出现超时,发送方也不会误认为出现了网络拥塞。
使用快重传可以使整个网络的吞吐量提高20%。 -
快恢复算法
上上图中的点4,发送方知道现在只丢失了个别的报文段。
于是不启动慢开始,而是执行快恢复算法。
调整门限值 ssthresh = cwnd / 2 = 8,同时设置拥塞窗口 cwnd = ssthreash = 8,并开始执行拥塞避免算法 -
决定
发送窗口
的两个因素
拥塞窗口
接收窗口
5.8.2 TCP的拥塞控制方法
最新推荐文章于 2023-12-20 10:22:37 发布