TCP拥塞控制

 


理解拥塞控制与流量控制的区别

  当网络中的链路容量(即带宽)、交换结点中的缓存和交换机等资源呈现供应不足,导致网络性能变坏,这种情况就叫“拥塞”。而拥塞控制,就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。相比于流量控制,拥塞控制是一个全局性过程,涉及到所有的主机、路由器以及与降低网络传输性能有关的所有因素;而流量控制往往是端对端的过程,是指抑制发送端的发送速率,以便使接收端来得及接收。这两者要区分开来。

 

拥塞控制算法

 

 

 

慢启动与拥塞避免

 

 

 

  1. 当TCP连接进行初始化时,把拥塞窗口cwnd置为1(单位为:报文段个数),同时设置一个慢启动门限的初始值 ssthresh = 16;
  2. 之后执行慢启动算法,发送方每收到一个报文段的确认ACK,就把拥塞窗口加1,然后进行下一轮传输(例如:第二次窗口大小为2,会接收到2个ACK,下一次传输时窗口就变成了4。因此呈指数增长);
  3. 当拥塞窗口cwnd增长到慢启动门限时,就改为执行拥塞避免算法,窗口大小按线性规律增长
  4. 当网络出现超时(假设此时cwnd=24),也即发送方没有按时收到确认时,把慢启动门限ssthresh设置为出现拥塞时cwnd的一半,同时把cwnd置1,重新执行慢启动算法(这样做可以使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕);

 

快重传与快恢复

 

 

  快重传算法要求接收方每收到一个失序的报文段就立刻发出重复确认,而不是等待重传计时器到期,为的是让发送方及早知道有报文段没有到达接收端。该算法规定,发送方只要一连收到三个重复确认就应该立即重传对方尚未收到的报文段。在图中,由于报文段M3丢失,M4、M5、M6都属于失序报文段,因此连续发出三个重复确认M2,此时发送方收到三个连续的对M2的重复确认,就知道M3没有按时到达接收端,立即进行重传。要注意,这里使用“快重传”算法是为了将丢包情况与网络拥塞情况区分开来,因为如果发生拥塞,就不会有好几个失序的报文段到达接收端,让接收端可以连续发送重复确认。

 

 

 

  1. 当发送方连续收到三个重复确认时,为了预防网络拥塞(丢包就是网络拥塞的一个现象),就把慢启动门限ssthresh减半,但接下来不去重新执行慢启动算法;
  2. 因为发送方认为网络很可能没有发生拥塞,因此此时去执行拥塞避免算法,使拥塞窗口cwnd的大小从减半的ssthresh开始线性增长,这就是“快恢复”算法;
  3. 当真正发送网络拥塞时,报文段到达不了接收端(不存在接收端接收到失序报文段的情况),发送方就无法按时接收到ACK(重传计时器到期),这才执行慢启动算法。因此,慢启动算法只是在TCP连接建立时和网络出现超时时才使用。

 

posted @   ˙鲨鱼辣椒ゝ  阅读(259)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示