拥塞控制与流控制区别:
拥塞控制Congestion control is a global issue.
流控制Flow control is to make sure that a faster sender can’t continually transmit data faster than the receiver is able to absorb it.
拥塞控制
1. 将路由器的内存放大;
2. 提高路由器的CPU处理速度。
上述两种方法都没有解决问题,此问题的解决必须让所有部件相互平衡之后才能解决。
拥塞控制的通用原则:
1. Open loop开环,试图采用良好的设计来解决此问题,保证系统一旦启动运行起来,就不需中途修正。追求完美。
2. Close loop闭环,基于反馈环路的概念。首先监视系统,检测何时何地发生拥塞;然后将该信息传递到能够采用行动的(多个)源主机;最后调整系统运行,修正问题。
数据链路层的拥塞预防策略:
1. 重传策略(重传时间不能太短);
2. 乱序缓存策略(选择性重传比回退N帧重传好);
3. 确认控制策略(捎带确认Piggyback);
4. 流控制策略(各窗口协议)。
虚电路子网的拥塞控制策略:
1. 准入策略(Admission control),一旦出现拥塞信号,不再创建任何虚电路,直到问题排除;
2. 允许建立虚电路,但是谨慎选择路由,使得有问题的虚电路都绕开有问题的区域;
3. 资源预留策略,造成带宽的浪费。
数据报子网的拥塞控制策略:
1. 警告位The Warning Bit,只针对源主机,当问题排除后,缓慢把流量加上去;
2. 抑制分组Choke packet,只针对源主机,通过发送抑制分组;
3. 逐跳抑制分组hop-by-hop,对它经过的每个路由器都起作用,此方案能迅速缓解拥塞,能将拥塞消灭于萌芽态,代价是上游路径上需要消耗更多的缓冲区空间。
4. 负载丢弃Loading shedding,最后一招,当上述方法均不能消除拥塞时采取。
丢弃策略:
4.1 wine策略(旧分组好,丢弃新分组,文件传输);milk策略(新分组好,丢弃旧分组,多媒体传播);
4.2 分组优先级策略(应用程序表明分组优先级);
4.3 随机的早期检测RED(在实际耗尽所有缓冲区空间之前就开始丢弃分组。)TCP针对分组丢失的相应措施是源主机减慢传输速度,因为分组丢失多半是因为缓冲区满。路由器如何告知源主机有关问题?发送抑制分组;或单纯丢弃分组不送报告;
4.4 抖动策略Jitter(适用于音频流和视频流,分组到达时间的变化量有偏差,当一分组到达路由时间比预定早,就缓存路由中直至预定是哎那再转发;如果分组到达比预定晚,路由器会尽快将其转发)。如视频点播,一般接收方会将分组缓存,然后从缓冲区中读取数据显示至显示器,而不是实时的从网络上获取数据。
服务质量
可靠性、延迟、抖动、带宽。这四个特征合起来决定了一个流所要求的服务质量Quality of Service, QoS。
获得好的服务质量:
1. 过度提供资源,提供足够的路由器容量、缓冲区空间与带宽,保证分组能顺利通过;
2. 缓冲能力,在接收方,数据流被递交之前可以先缓存起来,这样不会影响到可靠性与带宽,只是增加延迟,然而却可以消除抖动jitter。对于音频和视频,抖动是主要问题。
3. 流量整形:
一、 漏桶算法Leaky Bucket Algorithm
不断桶中进水速度为多少,水流出去的速度是常数a,当桶中无水时,速度为0,否则就是常数a。一旦桶满了,再往里流的水就溢出,造成分组的丢失。
无论负载如何变化, 漏桶算法始终保持一个速率,不灵活,同时可能造成分组丢失。
二、 令牌桶Token Bucket Algorithm
同漏桶算法的流量整形,但是桶中保存的是令牌,这些令牌是按照特定速度产生的。每一个分组要被传送出去,必须捉住一个令牌,出去时销毁一个令牌。
漏桶算法不允许空闲的主机将许可权保存起来以便以后发送大的突发数据;令牌桶则允许将许可权保存起来,直到桶的最大尺寸n。这特性意味着即使多达n个分组的突发数据也可以一次性发送出去。同时令牌桶满,丢弃的是令牌,而不是分组。