运输层—TCP的拥塞控制

很多人容易把TCP的流量控制和TCP的拥塞控制弄混淆,但是实际上这两者是有区别的,我们可以通过两个例子来理解TCP的流量控制和拥塞控制。TCP的流量控制例子:假设光纤网络的链路传输速率是1000Gb/s,有一个巨型计算机向一个PC机以1GB/s的速率发送文件,显然,网络的带宽是很足够的,所以不会存在网路的拥塞问题,但是流量控制是必须的,巨型计算机必须经常停下来,才能使得PC机及时接受发送的文件。TCP的拥塞控制的例子:假设有一个网络的传输速率是1Mb/s,而有1000台大型计算机连接在这个网络上面,其中的500台向另外的500台计算机以100kb/s的速率发送文件,那么现在的问题不是大型计算机能不能接收到数据了,而是整个网络的输入负债是否超过了这个网络所能够承受的。这就是TCP的流量控制和TCP拥塞控制的区别。流量控制一般指的是点对点的控制,是一个端到端的问题。而拥塞控制是一个全局性的过程。防止过多的数据输入到网络中,以免超过了网络的负载。

从上图我们可以看出三种不同的情况,理想的拥塞控制,实际的拥塞控制,还有没有使用拥塞控制。没有拥塞控制的图像表示了,随着网络中的负载不断地增加,从轻度拥塞,到拥塞状态,由于没有使用拥塞控制,所以一旦网络拥塞了,网络的吞吐量(在这里表示网络中输出的分组数量)就会急剧下降,一直到最后为0,形成一种死锁的现象。对于理想的拥塞控制来说,随着负载的不断增加,网络进入拥塞的时候,吞吐量依然保持在了一个稳定的很高的水平。对于实际的拥塞控制来说,可以从图中发现,虽然最后的吞吐量保持在一定的水平,但是在拥塞之前,吞吐量是比不上没有做拥塞控制的情况的。这说明了拥塞控制本身就会损失一些网络吞吐量。
对于拥塞控制,我们一般分为开环控制和闭环控制,开环控制就是设计网络的时候就将有关的拥塞的因素都考虑进去,力求在网络真正运行的时候不产生拥塞,但是一旦网络运行起来了,就不再进行改正了。闭环控制就是基于反馈环路的,闭环控制可以通过下面几种措施:
(1)监测网络系统以便监测到拥塞在合适、何处发生
(2)把拥塞发生的信息传送到可采取行动的地方
(3)调整网络系统的运行以解决出现的问题
下面将要介绍4种拥塞控制的算法:慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。
1、慢开始和拥塞避免
发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态的变黄,发送方要让自己的发送窗口等于拥塞窗口。慢开始算法是这样的:由小到大逐渐增大发送窗口,在开始发送报文段的时候,将cwnd设置为一个最大报文段MSS的数值,然后在没收到接收方的一个确认之后,就将拥塞窗口增加一个MSS的数值。(本来TCP是用字节作为窗口的单位的,但是为了方便起见,我们使用报文段的个数作为窗口的单位)
拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,而不是加倍,每次加1。

从上图我们来具体分析一下慢开始和拥塞避免算法,最开始慢开始算法将cwnd的值设置为1,然后进行没收到一个确认,就将cwnd进行加倍,ssthresh(慢开始门限)的初始值设置为16,当cwnd = ssthresh的时候,就不再进行慢开始算法了,从而进行拥塞避免算法,拥塞避免算法每次收到一个确认的时候就只是将cwnd加上1,当cwnd达到24的时候,这是后网络进入拥塞状态了,这时候需要进行的操作是:将ssthresh的值设置为当前拥塞值的一半,然后将cwnd的值设置为1,然后重新开始慢开始算法。
在很多TCP文献中都可以看到“乘法减小”和“加法增大”这样的说法,AIMD算法(加法增大乘法减小)就是上述两种算法的合称。
2、快重传和快恢复
慢开始和拥塞避免算法是1988年提出的,1990年又增加了两个新的拥塞控制算法,1990年的版本是Tahoe,1988年的版本是Reno,后者已经弃用了,1990年增加的版本中增加的是快重传和快恢复算法。
快重传算法是要求接收方在每次收到一个失序的报文段之后就立即发出重复确认,而不需要等待自己发送数据的时候才捎带,发送方收到了三个重复的确认就要立即重传对方尚未收到的报文段,而不要等待重传计时器的时间到了之后才重传。
快恢复算法是这样的:如果发送方收到了三个重复确认的时候,就把ssthresh门限减半,但是这时候发送方认为网络很可能没有发生拥塞(因为如果网络发生了严重的拥塞,那么也不会连续收到好几个重复确认)所以这时候不要求cwnd变回到1,然后开始执行慢开始算法,而是把cwnd的值设置为新的sstresh门限值的一般,然后开始执行拥塞避免算法。
上述的几个算法都是假设接收方的缓存空间是足够的,但是实际上接收方的缓存空间是有限的,实际上发送窗口的值也要受限与接收窗口rwnd,可以用下列的公式来说明发送窗口与接收窗口和拥塞窗口的 关系
发送窗口的上限值 = Min 【rwnd , cwnd】
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值