通信网络基础期末复习-第六章-拥塞控制_阿正的梦工坊的博客-程序员宅基地_拥塞控制的目的

技术标签: Computer Network  

第六章 拥塞控制

6.1 拥塞和流量控制概论

在计算机网络中,链路的容量、交换节点中的缓冲区和处理机等都是网络的资源。在某段时间内,若对网络某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会恶化。同时,如果信息流无限制的进入网络也会导致网络的性能恶化。当报文在网络中经历了比所期望的时延更长的时间时,就认为网络产生了拥塞。当网络发生拥塞时,只能有很少的信息流动,而且拥塞会很快的延伸,甚至导致“死锁”。发生死锁时,网络中几乎没有分组能够传送。因此,如果对网络的拥塞不加控制,网络的性能将会迅速下降。

造成网络出现拥塞有若干种原因
例如:
当从多个输入端到达同一节点的分组要求同一条输出链路时,就形成分组的排队。如果该节点的缓冲器容量不够,就会造成分组丢失。在某种程度上增加缓冲器的容量可以减少这种由于缺少缓冲容量而造成的分组丢失率;

同时,如果处理器的处理速度太低,或者链路带宽不够也会导致拥塞;

另外,拥塞节点本身也会使拥塞变得更严重。因为如果节点没有空闲的缓冲区,那么新到达的分组必定被丢弃,而发送端会因为等待应答超时而重发,甚至重发若干次,这必然会增加网络的负荷,使整个网络中节点的缓冲器逐渐地都将处于饱和。随着网络负荷的激增,吞吐率骤降,最后达到零值,导致网络进入死锁状态.

6.1.1网络数据流的控制技术分类

网络数据流的控制技术可以分为3类,即流量控制、拥塞控制和死锁防止。
1.流量控制
流量控制是对网络上的两个节点之间的数据流量施加限制。它的主要目的是让接收端来控制链路上的平均数据速率,以满足接收端本身的承受能力,以免过载。

2.拥塞控制
拥塞控制的目的是将网络内(或网络的部分区域内)的报文分组数目保持在某一量值之下,超过这一量值,分组的平均排队时延将急剧增加。因为一个分组交换网络实质上是一个排队的网络,每个节点的输出链路端口都配置一个排队队列,如果分组到达的速度超过或等于分组发送的速度,队列就会无限制地增长,致使分组平均传输时延趋于无穷大。如果进入网络的分组数目继续增加,节点缓冲器将会占满溢出,丢失一些分组。丢失分组的后果是导致发端重发。重发实际上又增加了网络内流通的业务量,最终可能使所有节点缓冲器都被占满,所有的通路完全被阻塞,系统的吞吐率趋于0。

3.死锁防止
网络拥塞到一定程度时,就要发生死锁现象。死锁发生的条件就是在构成一个封闭环路上的所有节点的相关链路缓冲器都被积压的报文分组所占满而失去了节点所担负的存储转发能力。即使在网络轻负荷情况下,也可能出现死锁的现象。死锁防止技术旨在合理地设计网络使之免于发生死锁现象。
在这里插入图片描述

6.1.2拥塞控制的基本原理

拥塞控制的基本原理是:寻找输入业务对网络资源的要求小于网络可用资源成立的条件。这可以通过增大网络的某些可用资源(如输入业务繁忙时增加一些链路,增大链路的带宽,或使额外的通信量从另外的通路分流),或者通过减少一些用户对某些资源的需求(如拒绝接受新的建立连接的请求,或者要求用户减轻其负荷,这属于降低服务质量)。

在这里插入图片描述

闭环控制是建立在反馈控制的概念之上,其控制过程有以下几种部分:
(1) 实时监测网络,以便监测到拥塞在何时、何处发生;
(2) 将拥塞发生的信息传送到可采取行动的地方(如控制中心);
(3) 调整系统的操作过程,以便纠正拥塞问题。

6.1.3 流控和拥塞控制所经历的层次

流量及拥塞控制可以出现在所有的协议层次上,不过主要还是在数据链路层、网络层和传送层;分段(逐跳)流控是数据链路层的功能,称为节点到节点之间的流控;而端到端流控主要在传送层,称为全局流控;拥塞控制则主要集中在网络层。影响拥塞控制的一些主要策略如表6-1所示。
在这里插入图片描述

6.2 流量和拥塞控制技术

流量和拥塞控制技术按执行流控和拥塞的方式可分为:集中式和分布式流量拥塞控制。

集中式流控中,网络中有一个特定的网控节点执行某种算法,为各个节点计算报文流量的分配值,然后将新的流量分配值传送给所有其他网络节点。
分布式流控则是把管理网络的流量过程分配到若干个网络节点来完成,这些节点控制通过其自身或外部的业务流量。

流量及拥塞控制有许多具体的实现方式,下面将着重讨论窗口式流量拥塞控制和漏斗式流量控制算法。

6.2.1 窗口式流量和拥塞控制

窗口式流控的思想类似于数据链路层的返回n- ARQ,在一个session中,发端A在未得到收端B 的应答情况下,最多可以发送W(窗口大小)个消息或分组或字节。收端B 收到后,回送给发端A 一个permit(它既可以是应答,也可以是分配消息),A 收到后方可发送新的数据。下面首先介绍一下在窗口式流控中应该注意的问题,然后再集中讨论具体的窗口式流控算法。

1.滑动窗口控制机构的建立

通信子网中的任意节点对之间都可能构成源/目的节点对。若子网的节点数为m,则一个节点可能与其他m-1个节点结合,最多形成m-1个源/目的节点对。如果在一个节点内为每一个源/目的节点对常设一个滑动窗口控制机构,将使节点控制机构变得相当复杂,占用许多的缓冲存储容量。减少这种复杂性的途径就是采用动态方法:在每个节点中只为有当前通信业务的源/目的节点对设置窗口控制机构,并相应地分配缓冲区。每一个源/目的节点对实际上就是一条虚拟的线路。可见,窗口控制机构应当随着每一条虚拟线路的建立而建立,这与为每一条数据链路建立一对滑动窗口控制机制是一样的。

2.窗口宽度的确定

一个源节点可能与许多不同节点构成源/目的节点对。如果源/目的节点对之间的距离比较远,则相应的两个节点之间的端到端时延就比较长,从源节点发出一个分组到它收到应答期间连续发出的分组数会比较大。因此,为了有效地利用通信子网的传输能力,这时源/目的节点对之间的窗口宽度W 就应当比较大。相反,源/目的节点对之间跳数比较少的节点对之间的窗口宽度W 就应该相应的小一些。

可见,窗口宽度应当根据源/目的节点对之间的距离来选择,而不能简单地选成一样大小。为此,可以在每一个源节点内设置一张说明窗口宽度和节点距离关系的对应表。根据这种对应关系,动态选择合适的窗口宽度,以便建立起相适应的窗口控制机制。

理想的窗口宽度应当这样选择:源节点从发送第一个分组到收到目的节点对该分组的确认时,源节点的窗口控制应该刚好发完窗口宽度允许的最后一个分组。这种情况下,源节点就能以最佳的速率不间断的发送分组。

3.报文的重装

当目的节点全部收完一个报文的所有分组后,才能着手重装报文,然后再提交给目的主机。这是,该源目的节点对上的一个报文才算传输成功,目的节点将给源节点返回一个确认应答。可见,端到端流控功能中还包括在目的节点进行报文重装的功能,特别是当通信子网采用自适应型路由策略和采用网内数据报传输方式时报文重装的功能尤其重要。在这两种情况下,源节点发出的报文分组可能沿不同的路径到达目的节点,因而造成分组到达的次序与发送次序可能不一致。如果某一分组在中转过程中丢失,在目的节点将无法将报文重装出来。此时,目的节点应在返回的应答中报告这一情况。源节点在确知后,应立即重发被丢弃的那个分组。为此,源节点缓冲区必须保留全部未应答的数据分组,以便在需要重传时使用。

下面讨论具体的窗口式流控技术。

1. 端到端的窗口流控

W:窗口大小,即流控窗口为W 个分组,如果收端希望收到的分组序号为k,则发端可以发送的分组序号为k~k+W-1的分组。
d:分组传输的来回时延,它包括来回的传播时延、处理时延、分组传输时间、应答分组的传输时延。
X:单个分组的传输时间
在这里插入图片描述
在图6-5(a)中,d≤ WX,则发端可以以1/X(分组/秒)的速率全速发送,流控不会被激活。而在图6-5(b)中,d> WX,在d 时间内,最多只能传送W 个分组,即分组传输的速度为W/d(分组/秒)。显然,对于给定来回时延d,最大的分组传输速率r为:
在这里插入图片描述
其结果如图6-6所示。从图中可以看出,d增加表明网络中拥塞增加,这样会导致分组传输速率W/d下降。如果W 较小,则拥塞控制反应较快,即在W个分组内就会作出反应。这种以很小的开销获得的快速反应是窗口流控策略的主要优势之一。
在这里插入图片描述

请看例题
在这里插入图片描述
在这里插入图片描述

2. 虚电路中逐跳窗口流控

虚电路中逐跳窗口流控(node-by-node windows for virtual circuits)是在虚电路经过的每个节点中保留W 个分组的缓冲区。在该链路上的每一个节点都参与流控,每一条链路的窗口都为W,每个接收分组的节点可以通过减缓回送允许(应答)分组给发送节点的方式来避免内存中积压太多的分组。在这种方式下,各个节点的窗口或缓冲区是相关的。假定虚电路是经(i-1)→i→(i+1)等节点,当节点i缓冲区满时,只有当节点i向节点i+1发送一个分组后,i才可能向i-1发送一个应答分组。这样就会导致i的上游节点i-1缓冲区满,依此类推,最后将导致源节点的缓冲区满。这样从拥塞节点缓冲区满返回到源节点缓冲区被填满的现象被称为反压现象(Back pressure)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shizheng_Li/article/details/108171729

智能推荐

ROOT与刷机_snpmyn的博客-程序员宅基地

ROOT获系统最高权限,安卓系统基于Linux内核,该流程亦据Linux而来。root权限分临时和永久root。root针对安卓系统对手机而言,使用户获安卓系统最高权限并助用户越过手机制造商限制。用户可卸载手机制造商、运营商、第三方渠道商预装在手机的应用及运行需最高权限应用程序。安卓系统root与Apple ios系统越狱类似。刷机重装系统,分第三方系统和官方底包,通刷第三方Rom...

【adb】Andriod获取常用性能指标的方法_Bug 挖掘机的博客-程序员宅基地

获取App的信息:获取App信息获取当前界面元素:adb shell dunpsys activity top获取任务列表:adb shell dumpsys activity activities获取App入口adb logcat | grep -i displayedaapt dump baadging mobike.apk | grep lunchable-activityapkanalyzer 最新版本的SDK中才有启动应用adb shell am start -w -n com.

虚拟机三种工作模式(bridged、NAT和host-only)_执迷的信徒的博客-程序员宅基地

原文地址:http://www.hellonet8.com/153.html以前一直不是很明白虚拟机中的bridged、NAT和host-only具体是什么意思,想着在虚拟机里面能上网,能和主机互相通信就完事了。VMware和Virtualbox两个虚拟机软件都有提供这些模式,原理都一样。不过我还是喜欢用Virtualbox,除了因为它完全免费外,而且还可以在linux和windows下很

java第七章jdbc课后简答题_java数据库编程——第七章,课后作业_weixin_39616798的博客-程序员宅基地

1.由控制台输入数据,提交后保存到MYsql数据库。(使用DAO模式)package DAO_dome.kehozuoye;/*** 汽车实体类* @author huang**/public class Vehicie {private String identity;//车主身份证号码private String heading;//车辆识别码private double emissions;...

HAUTOJ_菜鸟也有进大厂的梦的博客-程序员宅基地

1. 编写程序,使用分支结构求奇数偶数。求任意整数的绝对值。要求:输入一个整数,判断该数是奇数还是偶数。如果该数是奇数就输出“odd”,偶数就输出“even”(输出不含双引号)。输入样例:8输出样例:even 2. 编写程序,使用分支结构实现两整数排序。要求:从键盘输入两个整数x,y,按从小到大的顺序输出它们的值。数据之间以空格间隔。输入样例:20 16输出样例:16 203. 编写程序,使用分支结构实现三整数排序。要求:从键盘输入三个整数x,y和z,按从大到..

使用MVC模式+Servlet+JDBC开发后台_遛狗大师的博客-程序员宅基地

使用MVC模式+Servlet+JDBC开发良好扩展性和维护性后台

随便推点

美国Kaseya遭黑客攻击,下游1500家企业受损,中小企业如何防范勒索病毒?_腾讯安全的博客-程序员宅基地

7月2日,美国IT管理软件制造商Kaseya遭遇了黑客的攻击,黑客团伙利用其远程监控和管理产品VSA的0day漏洞向终端使用者发送勒索软件。黑客随后在暗网声称,他们的恶意软件感染了超过100万个系统。所有受害者被要求总共支付7000万美元的比特币,来获得“通用解密器”恢复文件。​Kaseya于周一表示,大约有50个客户受到此次攻击的直接影响。但Kaseya的很多客户都是托管服务提供商,专门为其他企业提供IT服务,所以实际受到影响的企业在1500家左右,目前尚未发现产品源代码遭到恶意修改的事件。R

操作系统2.3.11 管程_烟敛寒林o的博客-程序员宅基地

一、为什么要引入管程为了实现进程的同步,互斥操作,我们引入了信号量机制。但信号量机制存在问题:我们编写程序困难,容易出错。于是为了方便实现进程的同步,互斥操作提出了管程。二、管程的组成和基本特性1、管程的组成2、管程的基本特性1)局部于管程的数据只能被局部于管程内的过程所访问2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据3)每次仅允许一个进程在管程内执行某个内部过程三、用管程解决生产者消费者问题//管程monitor Produc..

二、MongoDB的基本操作之索引_咸鱼最牛逼的博客-程序员宅基地

(一)创建索引1、查询集合中所有索引db.imooc_collection.getIndexes()2、创建索引db.imooc_collection.ensureIndex({x:1}),(1)ensureIndex创建索引,参数是json文档(2)key的值不再代表值,而是代表方向: x:1代表正向排序,x:-1代表逆向排序。(3)创建索引要消耗很长的时间,如果系统负载较重,且有...

离散数学中的村人指路和说谎者_cocoshe_的博客-程序员宅基地

离散数学中的村人指路和说谎者最近开始学离散数学,遇到了这一类"脑筋急血栓"问题。。。。自己对这类问题思考和总结了一番,发现了一些有意思的规律大佬轻喷,俺是蒟蒻这种问题大概可以分成两类:二对一一对二啥是“二对一”呢?emmmm就是俩人(一个骗子一个老实人)对于一个问题作答的题目啥是“一对二”呢?emmmm就是一个人 对于俩选项(你是骗子 or not)下面分别对两类问题举一个例子二对一问题:村人指路题目:​ 边远村庄的每个人要么总说真话,要么总说谎话。对旅游者的问题

第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)..._诺谦的博客-程序员宅基地

内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘、D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序?1.内核运行应用程序步骤:1.1首先是进入stext函数启动内核:ENTRY(stext): ... ... ...

Android 中自定义软键盘,android系统开发工程师_普通网友的博客-程序员宅基地

String checkText(String text) {if (minValue_ == -1 && maxValue_ == -1)return text;if (text == null || text.equals(""))return text;Double sour = Double.parseDouble(text);if ((maxValue_ != -1) && sour >= maxValue_) {alartInfo = hint

推荐文章

热门文章

相关标签