TCP的拥塞控制

不止TCP流量控制(滑动窗口),超时重传是TCP可靠的保证,TCP的拥塞控制仍然是TCP可靠传输的保证。

TCP拥塞控制

流量控制解决了 两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,也会产生丢包问题

拥塞:对资源的需求超过了可用的资源(计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源)。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。拥塞现象就是到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理(资源不够),以致引起这部分乃至整个网络性能下降的现象

拥塞控制防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。

几种拥塞控制方法

讨论以下算法时,假定数据是单方向的,接收方的缓存空间足够大,发送窗口有拥塞程度决定

慢启动、拥塞避免、快速重传和快速恢复

慢启动

当主机开始发送数据时,如果立即把大量的数据注入到网络,可能引起拥塞。因此由小逐渐增大发送窗口。先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。 此处引入一个拥塞窗口, 通常开始发送报文时,发送开始时定义拥塞窗口大小为1每收到一个新的报文段确认后把拥塞窗口增加至多原来的2倍;而在每次发送数据时,发送窗口取拥塞窗口与接收端接收窗口最小者每个轮次,cwnd都是以2倍增长的。

 

防止拥塞窗口cwnd增加过大导致网络拥塞,需要设置一个慢启动门限ssthresh,慢开始门限用法如下:

当cwnd<ssthresh时,使用慢启动算法,按照指数增长

当cwnd>ssthresh时,使用拥塞避免算法,按照线性增长方式增加

当cwnd=ssthresh时,两种算法都可以

拥塞避免算法

该思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT(一个轮次,而不是收到一个确认报文)就把cwnd加1。该算法下的cwnd增大的速度比慢启动始更缓慢。

无论在慢启动阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(根据是没有按时收到确认,超时了),立即把慢启动始门限ssthresh设为出现拥塞时的发送窗口的一半。然后发送窗口cwnd重新设为1,执行慢启动算法。目的是迅速减少主机发送到网络分组的分组数。(区分使用了快速重传的方案)

ps:拥塞窗口大小的单位应为TCP报文段(MSS),一般MSS是1500字节(以太网MTU最大传输单元)。

快速重传

快速重传算法要求接收方每收到一个失序的报文段后就立即发送重复确认,如上图接收了M1和M2后,又接收到一个M4,M4属于失序报文,则发送对M2的重复确认。发送方只要连续收到三次确认重复就立即重传对方未收到的报文段M3(而无需等待超时时间到达)。因为发送方尽早的重传未被确认的报文段,所以提高了网络的吞吐量(比M3的超时更快一点).

快速恢复

与快重传算法配合的还有快恢复算法,过程如下:

(1)当发送方连续收到三个重复确认时,就把慢开始门限ssthresh减为当前拥塞窗口的一半,这时为了防止网络拥塞,接着并不是执行慢启动算法。

(2)由于上图这种情况很可能不是因为网络拥塞引起的,因此这里不执行慢启动算法(即不把拥塞窗口cwnd设为1,这样速度太慢),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法。

TCP Tahoe与TCP Reno区别?

  • 对于TCP Tahoe算法,当发生丢失时,会进入“快速重传”机制,慢启动阈值设为之前拥塞窗口值的一半,拥塞窗口值降为初始值1,重新进入慢启动阶段。当拥塞窗口值达到慢启动阈值时,在进入拥塞避免
  • TCP Reno算法实现了一个名为“快速恢复”的机制,慢启动阈值设为之前拥塞窗口值的一半,作为新的拥塞窗口值,并跳过慢启动阶段,直接进入拥塞控制阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值