TCPIP协议族学习笔记(三):流量控制及阻塞控制

TCP/IP协议族学习笔记(三):流量控制及阻塞控制

一、流量控制

​ 1.1概念:当发送方和接收方通过一段链路进行数据通信,相当于发送方的应用进程与接收方的应用进程之间通过链路进行通信。发送方的应用进程将待发送的应用报文交付给发送进程,发送进程一方面将应用报文封装成协议数据单元(数据包),存入发送缓存;另一方面,将数据包取出进行发送。

​ 接收方的接收进程一方面将数据包存入接收缓存,一方面凑够缓存中取出数据包,从其中提取应用报文送给接收方。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 假设发送方源源不断的发送数据,如果原计算机的上层应用产生数据的速度比目的计算机上层应用吸收数据的速度快。则接收方就会被这种数据淹没。

​ 1.2 流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。流量控制的基本方法是由接收方控制发送方发送数据的速率。常见的方式有以下两种:

​ 1.2.1 停止-等待流量控制 :

​ 发送方每发送一帧,都必须停止发送,等待接收方发回的针对该帧的确认,之后才能发送下一帧。

​ 接收方每接收一帧都要给发送方发回一个确认,表示可以接收下一帧。传输效率很低。

1.2.2 滑动窗口流量控制

​ 发送方维护一个发送窗口,发送窗口的大小W表示在未收到接收方发来确认的情况下,最多还可以发送多少个帧;只有接收窗口向前滑动时,发送窗口才有可能向前滑动;

​ 接收方维护一个接收窗口,只有当接收到的帧的序号落入接收窗口内才收下该帧,将窗口向前滑动一个位置,并给发送方发回确认;若接收到的帧的序号落在接收窗口之外,则一律将其丢弃。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 注意:1. TCP的窗体单位是字节,不是报文段。

​ 2. 死锁

​ 假设B在向A发送了零窗体报文段后不久,B的接收缓存又有了一些存储空间,于是B向A发送了一个rwnd=400的报文段,然而这个报文段在传送过程中丢失了,A就一直等待B发送非零窗体的报文通知,而B一直等待A发送数据,假设没有不论什么措施的话。这话死锁的局面会一直延续下去。

​ 为了解决问题,TCP为每个连接设有一个持续计时器(也叫坚持定时器)。仅仅要TCP连接的一方收到对方的零窗体通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗体控測报文段(携1字节的数据),对方在收到探測报文段后。在对该报文段的确认后给出如今的窗体值,假设窗体值仍为零,则收到这个报文段的一方就又一次设置持续计时器,假设窗体不为零,那么死锁的僵局就被打破了。

​ 3. 糊涂窗体综合症

​ TCP接收方的缓存已满时,应用进程一次仅仅从接收缓存中读取1字节(这样就使接收缓存空间仅腾出1字节),然后向发送方发送确认,并把窗体设置为1个字节(但发送的数据报为40字节长)。接收,发送方又发来1个字节的数据(发送方的IP数据报是41字节)。接收方发回确认,仍然将窗体设置为1个字节。这样,网络的效率非常低

要解决问题,可让接收方等待一段时间,或者等到接收方缓存已有一半空暇的空间。仅仅要出现这两种情况之中的一个。接收方就发回确认报文,并向发送方通知当前的窗体大小。

此外,发送方也不要发送太小的报文段。而是把数据报积累成足够大的报文段。


二、拥塞控制

​ 1.1 拥塞的概念:

​ 当有过多的数据报出现在了因特网的某一区域内,如果网络中的源计算机发送数据报的数量超过了网络或者路由器的容量,则有可能发生拥塞现象。在这种情况下,某些路由器可能会丢失一些数据报。但是数据报丢失的越多,情况会越糟糕,原因在于上层的差错控制机制,发送方可能会重新发送这些被丢弃的分组的副本。如果拥塞持续下去,在某一时刻这种状况将会达到极点,此时系统崩溃,没有任何数据报能被交付。

​ 1.2拥塞控制的作用

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 吞吐量:单位时间内,从网络输出的分组数量;

​ 输入负载:单位时间内,输入给网络的分组数量;

​ 理想控制网络在达到饱和之前,两者相等,输入负载超过某一限度时,由于网络资源受限,吞吐量不再增长达到饱和,此时输入负载一部分损失掉了(被某结点丢弃),但在拥塞控制下吞吐量维持在最大值。

​ 当前网络正朝着高速化的方向发展,很容易出现转发节点缓存不够大而造成分组的丢失。但分组的丢失只是拥塞的征兆,而不是原因。很多情况下,甚至是拥塞机制本身成为网络性能恶化甚至拥塞的原因。

​ 1.3 TCP的四种拥塞控制算法

  • 慢开始

  • 拥塞避免

  • 快重传

  • 快恢复

    假定1.数据是单方向传送,而另一个方向只传送确认。

    ​ 2.接收方总是有足够大的缓存空间,因而发送方发送窗口的大小是由网络的拥塞程度决定。

    ​ 3.以TCP报文段的个数为讨论问题的单位,而不是以字节为单位。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 1.假设最开始时拥塞窗口的值为1,慢开始门限值为16.当发送方收到接收方的确认报文段后,拥塞窗口cwnd的值+1.意味着发送方可以发送两个报文段。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 2.接收方收到2个两个报文段后,向发送方依次发回两个确认报文段,发送方收到2个确认报文段后将拥塞窗口的值+2=4,故此时发送方可以连续发送4个报文段,接收方接收4个报文段后再发回4个确认报文段。发送方收到后再将拥塞窗口的值+4=8,可以连续发送8个报文段。接收方收到后再发送8个确认报文段,发送方收到后cwnd+8=16,达到慢开始门限值,改用拥塞避免算法。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

3.采用拥塞避免算法意味着每轮次cwnd+1,而不是像慢开始算法那样每轮次按指数方式增长。此时发送方向接收方连续发送16个报文段,当收到接收方16个确认报文段后,cwnd+1=17,可以发送17个数据报文段。收到17个确认报文段后cwnd再次+1=18…随着传输轮次的增加,传输窗口发送数据报的数目线性加一。​

4.假设当cwnd=24时,发送24个报文段,假设传输过程中丢失了4个报文段,则接收方只收到20个报文段且只返回20个确认报文段。一段时间后,之前丢失的那4个报文段的重传计时器超时,判断网络可能出现了拥塞,进行以下工作:

​ ①将慢开始门限值更新为发生拥塞时cwnd的一半(12);

​ ②将cwnd的值减少为1,并重新开始执行慢开始算法。重复上述步骤。

TCPIP协议族学习笔记(三):流量控制及阻塞控制

​ 有时,个别报文段会在网络上丢失,但实际上网络并未发生拥塞。这将导致发送方超时重传,误认为发生拥塞。降低了传输效率。

​ 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

TCPIP协议族学习笔记(三):流量控制及阻塞控制
​ 过程:1.发送方发送报文段M1,接收方收到后发回确认报文段M1;

​ 2.在发送方收到确认报文段M1之前,可以发送报文段M2。接收方收到后发送确认M2;

​ 3.在在发送方收到确认报文段M2之前,可以发送报文段M3。假设报文段M3丢失。

​ 4.发送方发送M4,接收方确认后发现收到的报文段时失序的M4,而不是应该收到的M3,于是发送重复确认M2;

​ 5.发送方收到重复确认M2之前发送M5,接收方确认后发现收到的报文段时失序的M5,而不是应该收到的M3,于是再次发送重复确认M2;

​ 6.发送方收到第一次重复确认M2,在第二次重复确认M2到达前发送M6,接收方确认后发现收到的报文段时失序的M6,而不是应该收到的M3,于是第三次发送重复确认M2;

​ 7.发送方收到第二次和第三次重读确认M2后立即重传M3。接收方收到后发送确认M6,表示到M6的数据都收到了。

TCPIP协议族学习笔记(三):流量控制及阻塞控制
TCPIP协议族学习笔记(三):流量控制及阻塞控制

1.4 控制拥塞的形成

​ 1.2.1 无连接网络中的拥塞控制

​ 方法1: 反向信令:在与运动方向与拥塞反向相反的数据报中设置一个比特,以通知发送方拥塞正在形成,应当放慢发送分组的速度。

前向信令:与运动方向和拥塞方向一致的分组中设置一个比特,用于 向该分组的接收方发送拥塞警告,然后接收方就可以通知上层协议,再由上层协议想办法通知源点。

注意,在因特网的网络层中没有使用信令

​ 方法2:扼流分组:因特网的网络层使用了一个辅助协议ICMP,当一个路由器拥塞了,他就会向源点发送一个ICMP分组十七放慢速度。

​ 1.2.2 面向连接网络中的拥塞控制

议,再由上层协议想办法通知源点。

注意,在因特网的网络层中没有使用信令

​ 方法2:扼流分组:因特网的网络层使用了一个辅助协议ICMP,当一个路由器拥塞了,他就会向源点发送一个ICMP分组十七放慢速度。

​ 1.2.2 面向连接网络中的拥塞控制

在建链阶段进行提前协商。发送方和接收方可以在建立虚电路之时对通信量的级别达成一致意见。即路由器先检查现有的通信量,并与自己的最大通信量相比较,然后才允许建立新的虚电路。