您的位置:首页 > 理论基础 > 计算机网络

网络基础 — TCP的流量控制和拥塞控制

2018-03-13 00:18 507 查看

TCP的流量控制和拥塞控制

1.利用滑动窗口实现流量控制  
如果发送方把数据发送的过快,接收方可能会来不及接受,这就会造成数据的丢失,所谓流量控制就是让发送方的发送速率不要太快.要让接收方
来得及接收. 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制.
TCP为每一个连接设有一个持续计时器. 只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送
一个零窗口检测报文段,那么怎么收到这个报文段的一方就重新设置持续计时器.

2.必须考虑传输速率.
可以用不同的机制来控制TCP报文段的发送时机. 如:<1>TCP维持一个变量,它等于最大报文段长度MSS.只要缓存中存放的数据达到MSS字节时,就
组装成一个TCP报文段发送出去 <2>由发送方的应用进程指明要求发送报文段,既TCP支持的推送操作 <3>发送方的一个计时器期限到了,这时就把
已有的缓存数据装入报文段发送出去.
Nagle算法:若发送应用程序要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都
缓存起来. 当发送方接受对第一个数据字符的确认后,把发送缓存中的所有数据组装成一个报文段再发送出去,同时继续对随后到达的数据进行缓
存.只有在收到对前一个报文段的确认之后才继续发送到下一个报文段. 当数据到达较快而网络速率较慢时,用这样的方法可以明显地减少所用的网
络带宽. Nagle算法还规定:当发送的数据一达到发送窗口大小的一般或者已达报文段的最大长度时,就立即发送一个报文段.

糊度窗口综合证:TCP接收方的缓存已满,而交互式的应用进程一次只从接受缓存中读取一个字节(这样就使接收缓存空间仅腾出1字节),然后向发
送方发送确认,并且把窗口设置为一个字节.(但发送的数据报为40字节的话),接收方又发送1个字节的数据(发送方的IP数据报是41个字节).接收方
发回确认之后,仍然将窗口设置为1个字节,这样网络的效率很低.要解决这个问题,可让接收方等待一段时间,使得接收缓存已经有足够的空间容
纳一个最长的报文段,或者等到接收方缓存已经有一般空闲的空间. 只要出现这两种情况,接收方就发回确认报文,并向发送方通知当前的窗口大
小. 此外,发送方也不要发送太小的报文段,而是把数据报积累成足够大的报文段,或到达接受缓存空间的一半大小.


TCP的拥塞控制

1.拥塞:既对资源的需求超过了可用的资源,若网络中许多资源同时供应不足,那么网络的性能就要明显的变坏,整个网络的吞吐量随之负荷
的增大而下降.

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载. 拥塞控制所要做的都有一个前提:网络能够承受现有的
网络负荷. 拥塞控制是一个全局性的过程,涉及到所有的主机,路由器,以及与降低网络传输性能有关的所有因素.

阻塞控制代价:需要获得网络内部流量分布的信息. 在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施
控制。这样就产生了额外的开销,拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享.
几种常见的控制方法: 慢开始,拥塞避免,快重传 和 快恢复.

慢开始和拥塞避免

发送方维持一个拥塞窗口的状态变量.  拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化. 发送方让自己的发送窗口等于阻塞.
发送方控制拥塞窗口的原则是:只要网路没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去,但只要网络出现拥塞,拥塞窗口
就减少一些,以减少注入到网络中的分组数.
慢开始算法:当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么有可能引起网络拥塞,因为现在并不清楚网络的符合情况.因此
,较好的方法就是先探测一下,既由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值. 通常在刚刚开始发送报文段的时候,
先把拥塞窗口cwnd设置为一个最大报文段MSS的数据,而在每收到一个对新的报文段的确认后,把阻塞窗口增加至多一个MSS的数值,用这样的方法
逐渐增加发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理.



每经过一个传输轮次,拥塞窗口cwnd就会加倍,一个传输轮次所经历的时间其实就是往返时间RTT。 不过"传输轮次"更加强调:把拥塞窗口cwnd所
运行发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认. 另外,慢开始的"慢"并不是指cwnd的增长速率慢,而是指在TCP开始
发送报文段时候先设置cwnd = 1,使得发送方在开始时只发送一个报文段,然后逐渐增大cwnd.
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量.慢开始门限ssthresh的用法如下:
当cwnd < ssthresh时,使用慢开始算法.
当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法.
当cwnd == sshresh时,即可使用慢开始算法,也可使用拥塞控制避免算法.
拥塞避免算法:让拥塞窗口cwnd缓慢增大,既每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍. 这样拥塞窗口cwnd按线性规律
缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多.
无论是在慢开始阶段还是在拥塞避免阶段,只要发送发判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞
时的发送发窗口值的一般(但不能小于2). 然后把拥塞窗口cwnd重新设置为1,执行慢开始算法,这样做的目的就是要迅速减少主机发送到网络中的
分组数,使得发送拥塞的路由器有足够时间把队列中积压的分组处理完毕. 下面这张图可以表述这个过程:



这个图的意思我们很容易理解的,首先TCP连接进行初始化,把拥塞窗口cwnd置为1. 我们将慢开始门限的初始值设置为16个报文段,既ssthresh为
16. 现在开始执行慢开始算法,以后每次发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值+=cwnd,因此拥塞窗口cwnd随着传输轮次按指数
规律增长. 当拥塞窗口cwnd增长到慢开始门限值ssthresh时,就开始执行拥塞控制算法,拥塞窗口按线性规律增长.
假定拥塞窗口数值增到24的时候,网络出现超时了,更新后的ssthresh值变为12,拥塞窗口再重新设置为1,然后重新执行慢开始算法,然后等达到
ssthresh的时候开始拥塞控制算法! 然后慢慢继续! 慢慢地控制这拥塞的过程.

快重传和快恢复

如果发送方设置的超时计时器时限已到但还没有收到确认.那么很可能是网络出现了拥塞! 致使报文段在网络的某处被丢弃.这时,TCP马上把
拥塞窗口减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半.这是不使用快重传的情况.
快重传算法首先要求接收方每收到一个失序的报文段就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不是等到自己发送数
据才进行捎带确认.



接受方收到了M1和M2后都分别发出了确认. 现在假定接收方没有收到M3但是接着收到了M4.显然,接收方不能确认M4,因为M4收到的失序报文段.
根据可靠传输原理,接收方应该及时发送对M2的重复确认,这样做可以让发送方及早知道报文M3没有到达接收方. 发送方接着发送了M5,M6,接受
方收到这两个报文时,也还要再次发出对M2的重复确认. 这样发送方共接收到了四个对M2的确认,其中后3个都是重复确认. 快重传算法还规定,发
送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期. 由于发送方尽早重传未被确
认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%.
与快重传配合使用的还有快恢复算法,其过程有以下两点:
1.当发送方连续收到三个重复确认,就执行"乘法减小"算法,把慢开始门限ssthresh减半.这个为了预防网络发送拥塞
2.注意!注意! 注意! 由于发送方现在认为网络很有可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法,而是将cwnd的值设置为
慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大!
>>>>>>新的TCP Reno版本在快重传之后采用快恢复算法而不是采用慢开始算法.



也有的快重传实现是把开始时的拥塞窗口cwnd值再增大一点,既等于ssthresh + 3*MSS. 这样做的理由是:既然发送方收到三个重复确认,就表明
三个分组已经离开了网络.这三个分组不再消耗网络的资源而是停留在接收方的缓存中,可见现在网络中并不是堆积分组而是减少了三个分组,因此
也可以适当把拥塞窗口扩大了一些. 在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用.
采用这样的拥塞控制方法使得TCP的性能有明显的改进,接收方根据自己的接受能力设定了接受窗口rwnd,并把这个窗口值写入TCP首部中的窗口字
段,传送给发送方. 因此,接收窗口又称为通知窗口,因此,从接收方对发送方的流量控制的角度考虑,发送方的发送窗口一定不能超过对方给出
的接收窗口rwnd.
发送方窗口的上限值 = Min[rwnd,cwnd]
当rwnd < cwnd时,是接收方的接受能力限制发送方窗口的最大值
当cwnd < rwnd时,则是网络的拥塞限制发送方窗口的最大值.

资料查阅:
google搜索 http://blog.csdn.net/yechaodechuntian/article/details/25429143
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: