标签:io 使用 strong 数据 问题 sp on c 工作
在某段时间内,若对网络中某资源的需求超过了该资源所能提供的部分,网络的性能就要变坏--产生拥塞(congestion)。出现资源拥塞的条件是:
对资源需求的总和>可用资源
若网络中产生拥塞,网络的性能就要明显变化,整个网络的吞吐量将随输入负荷的增大而下降。
拥塞控制 vs 流量控制
1)拥塞控制索要做的事情只有一个前提,就是使网络能够承受现有的网络负荷;
2)拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器以及与降低网络传输性能有关的所有因素;
3)流量控制往往指在给定的发送端和接收端之间的点对点通信的控制;
4)流量控制所要做的就是抑制发送数据的速率,以便使接收端来得及接收;
5)拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问题;
6)当前网络正朝着告诉化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆,而不是原因;
7)在许多情况下,甚至正式拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因,这点应该特别引起重视。
1)开环控制就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞(感觉很难啊)
2)闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:
检测网络系统以便检测到拥塞在何时、何处发生;
将拥塞发生的信息传送到可采取行动的地方;
调整网络的运行以解决出现的问题。
发送端需要维护两个窗口:接收端窗口(由接收端将其放在TCP保温的首部的窗口字段通知发送端);拥塞窗口(cwnd:发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量)。
发送端窗口的上限值=Min(rwnd,cwnd)
note:接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定,也就是说可以将发送窗口等同为拥塞窗口。
步骤:
拥塞窗口改为线性增加,每次增加1。
当cwnd<ssthresh时,使用慢开始算法;
当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法;
当cwnd=ssthresh时,都可以;
无论是在慢开始阶段,还是在拥塞避免阶段,只要发送方判断出拥塞(没有按时收到确认),就把ssthresh设为发送窗口的一半(但不能小于2)(乘法减小),然后把cwnd设置为1,执行慢开始算法。(这样做的目的就是要迅速减少主机发送到网络中的分组数,是的发生拥塞的路由器有足够时间把队列中积压的分组处理完。
首先要求接收方没收到一个时序的报文段后就立即发出重复确认,发送方只要连续收到3个重复确认后,就应当立即重传尚未收到的报文段。
快恢复算法
当发送单收到连续三个重复的确认时,就执行“乘法减小”算法,把ssthresh设置为拥塞窗口的一半,但是接下去不是从头执行慢开始算法;
由于发送方现在认为网络很有可能没有发生拥塞,所以现在不执行慢开始算法,即拥塞窗口cwnd现在不设置为1,设置为新的ssthresh大小,从那个地方开始执行拥塞避免算法。
标签:io 使用 strong 数据 问题 sp on c 工作
原文地址:http://www.cnblogs.com/dy-techblog/p/3960518.html