知识再分享:细谈TCP拥塞控制及其四种解决方法

前言

现实生活中存在一个这样的问题:

节假日的高速公路极易发生拥堵;原因是:大幅增加的车辆超过了高速公路的车流通行能力;结果是:所有车辆滞留拥堵,越堵越多,直到拥堵问题得到解决,方能正常通行!

互联网中的数据传输也会出现同样的问题,最经典堵塞问题便是:TCP报文拥塞!这也是此文将为读者朋友们细致讲解的主要问题,同时将介绍四大解决TCP拥塞问题的经典方法,欢迎交流!

知识再分享:细谈TCP拥塞控制及其四种解决方法

TCP:传输控制协议

TCP报文拥塞问题为何发生?

在TCP/IP网络体系中,任意两台网络设备进行数据通信均依赖于TCP报文,每一条互联网报文在由源设备发出后都将通过路由器进行路由、转发,进而以最优路径抵达目标设备,因此,传输TCP报文不可或缺的设备便是路由器。为加深读者理解,我们再以高速公路的例子来做比拟:

一条普通的高速公路,车辆正常通行须经过收费站进行过路缴费,才能继续前行,而收费站的重点便是由工作人员来负责收费、放行,我们知道,任何流程只要存在关键环节,那这个环节就会有明显的问题出现,比如说当高速车流量大幅增加时,由于收费站工作人员的效率有限,将无法快速完成大量缴费放行工作,如此,便会引发拥堵,导致车辆滞留增加,引起更严重的道路拥堵情况!

知识再分享:细谈TCP拥塞控制及其四种解决方法

网络拥堵示意图

引申到TCP报文传输过程中,这个现实问题就变成了经典的TCP报文拥塞问题当发送方的数据发送速率超过路由器的转发处理能力,那么一部分TCP报文便会在网络中滞留,堵塞其他的TCP报文传输,此时,如果不采取有效的疏通措施,越来越多的TCP报文将进一步加重拥塞,最终导致网络瘫痪!

知识再分享:细谈TCP拥塞控制及其四种解决方法

网络瘫痪

面对TCP报文拥塞问题,目前有四大经典处理方法,出发点有三个:

  • TCP拥塞发生之前——预防
  • TCP拥塞发生之中——避免
  • TCP拥塞发生之后——重传

对应的四大处理方式分别为:

  • 超时重传计时器
  • 慢启动
  • 拥塞避免
  • 快速重传

下面我们将结合图文对每一种处理TCP报文拥塞的方式进行详细讲解!

一、TCP拥塞控制:超时重传计时器

TCP/IP体系一直以可靠性传输著称,在TCP报文传输中重传便是保证TCP高可靠性的重要措施,超时重传计时器的具体实现是:发送方每发送一条TCP报文,便对这条报文设置一次定时器,只要在这个定时器设置的时间内,发送方收到了目标设备回传的TCP报文确认信号,就表示这条TCP报文得到了正确的传输,如果在这个定时器时间内发送方没有收到确认信号,就表示这一条报文没有被正确的传递,此时,发送方将重传这一条TCP报文,直至在定时器时间内收到确认信号。为加深读者朋友理解,我们可以类比生活中隔空传话的例子,如:

老李对远处的老王喊话:老王,我们回村吧?老李等了五秒钟,发现老王没有应答,表明老王没听见这句话,即回话超时了,于是老李就会再次对老王喊话:老王,我们回村吧?直到老王在五秒钟内应答喊话,才表明老李的话传到老王耳朵里了。

知识再分享:细谈TCP拥塞控制及其四种解决方法

喊话示意图

这五秒钟就相当于超时重传定时器,重传就相当于老李的重新喊话,这样大家就应该清楚超时重传机制了!值得注意的是重传定时器的时间要设置合理,这个时间一般和报文往返时间、平均报文传输时延已经时间偏差等因素有关,大多数采用最近一段时间的报文时延观察值来估算往返时间,进一步确定重传定时器的时间,比如老李声音从发出到听到老王的回应总时间不超过5秒,加上其他延时因素3秒,那么这个超时定时器设置为8秒以上但不能过长(如10秒)就是合理的!

知识再分享:细谈TCP拥塞控制及其四种解决方法

定时器

二、TCP拥塞控制:慢启动

慢启动是预防TCP拥塞的方式,具体实现是让发送方在每次发出TCP报文且在收到对方确认之前逐步扩大发送量(术语称为:扩大发送窗口的大小),一般是按照1/2/4/8等指数倍率增加数据发送量,直至发送速率达到路由器转发速率的门限阈值则停止继续增加发送量。

当目标网络设备在约定的时间内没有给发送方回传任意一条TCP报文的确认信号时,即出现超时,那么发送方将重置发送量,把发送窗口重置回1,再次开始慢启动的流程,如此循环来实现TCP拥塞控制!为加深读者朋友对慢启动的理解,我们举个旅客排队进火车站的例子:

火车站进站需要先经过站口A,再经过检票口B放行才能进入候车厅,为了防止人流拥挤,A站口每次会按照指数增长的方式放人进入检票口B,比如1人,2人,4人,8人......直到检票口B处理不过来了,那么A站口将重置放行的人流量为1,再重新按照指数倍率加人放入,如此循环。

知识再分享:细谈TCP拥塞控制及其四种解决方法

慢启动指数倍率增加发送窗口

三、TCP拥塞控制:拥塞避免

在慢启动的最终阶段,即发送窗口达到发送量门限阈值(不是路由器门限值)后,传输进入拥塞避免阶段,此时,TCP按照线性增加的方式继续扩大发送窗口,如按照+1递增,当发生拥塞时,将发送窗口上限减半,按照+1重新增加,当再度发送拥塞时,按指数倍率大幅减小发送窗口大小!关于这一点大家可以承接上述慢启动中火车站控制人流的方式去理解,比如:

检票口B的检票能力阈值是4个人,当站口A放入的人数超过4个人检票口B就会发生拥塞,此时A就减半最大放行人数,然后依然保持每次放行人数加1,当再次发生拥塞时,A再减半放行人数,如此循环。

知识再分享:细谈TCP拥塞控制及其四种解决方法

拥塞避免:线性增加发送窗口

四、TCP拥塞控制:快速重传

在了解快速重传之前,我们需要知道TCP报文的ACK基本工作原理!ACK全写为

Acknowledg,意为确认,每一条TCP报文在发出时都会有一个报文序号,我们假设报文长度始终为1:当发送方发送一个序号为N的报文时,对应接收端回传的ACK序列号就是N+1,接着发送放发出下一个序号为N+1的TCP报文,接收端回传ACK序列号为N+1,以此类推。

当接收端因各种问题无法正常接收序号为N的TCP报文时,回传信号的ACK序号便不会增加,始终保持收到上一次报文的回传信号,即:

  • 发送报文序号为N-1,接收端回传ACK=N
  • 发送报文序号为N,但报文丢失,接收端无法收到报文,则会发送第二个ACK为N的确认信号,叫做重复ACK
  • 如果接收端一直收不到发送方序列号为N的报文,则会出现回传三次冗余的ACK给发送端,这就意味着序号为N的报文丢失了
知识再分享:细谈TCP拥塞控制及其四种解决方法

连收3次重复ACK快速重传

当发送端连续收到三个重复的ACK,将不等超时重传定时器,立即重传序号为N的报文,这就是快速重传算法!

结语

本文详细讲解了关于TCP报文拥塞及四种解决拥塞的经典方法,并以现实生活中的例子做比拟更生动的说明了TCP拥塞控制原理,希望有助于广大读者朋友的学习、工作!

知识再分享:细谈TCP拥塞控制及其四种解决方法


分享到:


相關文章: