TCP之拥塞窗口原理

学过网络相关课程的,都知道TCP中,有两个窗口:

  • 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度。
  • 拥塞窗口,也就是本文要讲的。

概念

一个连接的TCP双端只是网络最边缘的两台主机,他们不知道整个网络是如何工作的,因此他们不知道彼此之间的有效吞吐量。因此,他们必须找到一种方法来确定它。我们称之为拥塞窗口 (CWND)。这是在我们必须停止并等待确认之前可以发送的字节数。

拥塞窗口是决定任何时候可以发出的字节数的因素之一。拥塞窗口由发送方维护,是阻止发送方和接收方之间的链路因流量过多而过载的一种手段。这不应与发送方维护的滑动窗口相混淆,滑动窗口的存在是为了防止接收方过载。拥塞窗口是通过估计链路上有多少拥塞来计算的。

拥塞窗口对于设备来说是本地的,并且永远不会在连接上共享,这与在每个段中发送的接收器窗口不同。在任何给定时间,设备最多可以发送由接收器窗口和拥塞窗口之间的最小值指定的字节数,如下面的公式所示:

transmittable bytes = min(cwnd, rwnd)

这意味着如果拥塞窗口小于接收窗口,则设备可以在等待确认之前传输多达拥塞窗口中定义的字节数。相反,如果接收窗口小于拥塞窗口,则设备可以在等待确认之前最多传输接收器窗口中定义的字节数。

拥塞窗口根据网络拥塞动态变化。每次未确认段时,都假定是由于网络拥塞。拥塞窗口随时间演变的方式被定义为一个算法,这取决于实现。我们现在将介绍最常见的一种。该算法遵循以下规则:

  • 拥塞窗口从一个段的大小开始(大约 1KB)
  • 定义了一个拥塞窗口阈值(ssthresh)
  • 如果收到确认,并且当前拥塞窗口大小小于 ssthresh,则拥塞窗口加倍
  • 如果收到确认,但拥塞窗口大于或等于 sshthresh,则拥塞窗口增加其初始值(例如 1KB)
  • 如果一个段没有被确认从而触发重传,拥塞窗口就会减半并且 ssthresh 被放置在这个值
  • 拥塞窗口不能大于接收器窗口

该规则中包括我们经常听过的几种算法:

  • 慢启动(slow-start)
  • 拥塞避免(congestion avoidance)
  • 快速重传(fast retransmit)
  • 快速恢复(fast recovery)

算法

通过

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP拥塞控制是一种算法,用于确保在网络拥塞时TCP流量不会过载网络,从而导致丢包、延迟和网络中断。以下是TCP拥塞控制的原理: 1. 慢启动 当一个TCP连接开始时,它会使用慢启动算法。慢启动的目的是逐渐增加数据包的数量,直到网络拥塞为止。在慢启动期间,TCP发送方将逐渐增加发送数据包的数量,直到达到一个拥塞窗口大小,该大小网络拥塞程度决定。 2. 拥塞避免 一旦TCP连接进入了拥塞避免阶段,TCP发送方将按照一个固定的速率发送数据包。这个速率是根据网络的拥塞程度和拥塞窗口大小计算的。在拥塞避免期间,TCP发送方将逐渐增加发送数据包的数量,直到达到一个新的拥塞窗口大小。 3. 快速重传 如果TCP接收方收到一个失序的数据包,它将立即向TCP发送方发送一个重复确认。如果TCP发送方连续收到三个重复确认,它将假设一个数据包已经丢失,并立即进行快速重传。这可以帮助减少网络拥塞,并避免数据包丢失。 4. 快速恢复 一旦TCP发送方收到三个重复确认,它会进入快速恢复阶段。在这个阶段,TCP发送方假设数据包已经被接收方丢失,并将拥塞窗口减半。然后,它将继续发送数据包,直到它达到先前的拥塞窗口大小。这可以帮助减少网络拥塞,并避免数据包丢失。 以上就是TCP拥塞控制的主要原理。通过这些算法,TCP可以动态调整发送数据包的数量,并在网络拥塞时适当地减少发送数据包的数量,从而确保网络不会过载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值