欢迎光临散文网 会员登陆 & 注册

TCP

2023-04-04 15:49 作者:V-i-c  | 我要投稿


TCP的拥塞控制和流量控制以及滑动窗口

TCP 的拥塞控制和流量控制以及滑动窗口的关系如下:

  • 拥塞控制是 TCP 为了避免网络拥塞而采取的一种机制,它根据网络的发送速率来估算一个拥塞窗口(cwnd),并根据慢启动和拥塞避免等算法来调整 cwnd 的大小。cwnd 表示发送方可以发送的最大字节数。

  • 流量控制是 TCP 为了保证接收方不会被数据淹没而采取的一种机制,它由接收方维护一个接收窗口(rwnd),并在每个 ACK 报文中通知发送方当前的 rwnd 的大小。rwnd 表示接收方缓冲区中的可用空间。

  • 滑动窗口是 TCP 实现流量控制和拥塞控制的一种方法,它由发送方维护一个窗口大小,该大小等于 cwnd 和 rwnd 中的较小值。滑动窗口表示发送方可以发送的未确认数据的字节数。

简而言之,拥塞控制和流量控制是 TCP 的不同功能,它们都影响滑动窗口的大小。

滑动窗口协议是一种数据传输协议,它可以保证数据包的可靠和有序的传送,同时提高传输效率。滑动窗口协议的基本原理是:

  • 发送方和接收方都维护一个窗口大小,表示可以发送或接收的数据包的数量。

  • 每个数据包都有一个顺序号,用于标识数据包的位置和顺序。

  • 接收方在收到数据包后,会发送一个确认报文(ACK)给发送方,表示已经收到了哪些数据包。

  • 发送方根据接收方的 ACK 报文来调整自己的窗口大小和位置,以及发送下一个数据包。

  • 如果发送方没有收到接收方的 ACK 报文,或者收到了重复的 ACK 报文,表示有数据包丢失或延迟,发送方会重传丢失或延迟的数据包。

滑动窗口协议可以有效地利用网络带宽,避免数据包的重复或丢失,同时实现流量控制和拥塞控制。

拥塞控制算法

  1. 拥塞控制算法是一种机制,它可以控制数据包进入网络的速率,以避免网络拥塞和性能下降。TCP 使用了多种拥塞控制算法,其中最基本的是慢启动和拥塞避免算法,它们都基于加性增加/乘性减少(AIMD)的原则,即当网络没有拥塞时,发送方逐渐增加拥塞窗口(cwnd)的大小,当网络出现拥塞时,发送方大幅减小 cwnd 的大小。
    (AIMD)


  1. 下面是一个慢启动和拥塞避免算法的示例图,其中横轴表示传输轮次(time),纵轴表示 cwnd 的大小。可以看到,在开始时,cwnd 的大小按照指数增长 的值(8),然后进入拥塞避免阶段,cwnd 的大小按照线性增长。在第 9 轮时,出现了超时重传,此时 ssthresh 的值减半(4)(图错了),cwnd 的值重置为 1,重新进入慢启动阶段。

        

    • 慢启动和拥塞避免算法是 TCP 的基本拥塞控制算法,它们的工作原理如下:

      慢启动算法是在 TCP 连接建立时或出现超时重传时使用的,它的目的是逐渐探测网络的容量,避免一开始就发送过多的数据包导致拥塞。慢启动算法的特点是每经过一个往返时间(RTT),发送方就将拥塞窗口(cwnd)的大小翻倍,即指数增长。

      拥塞避免算法是在 TCP 连接达到一个阈值(ssthresh)后使用的,它的目的是在保持高效利用网络资源的同时,避免引起网络拥塞。拥塞避免算法的特点是每经过一个 RTT,发送方就将 cwnd 的大小增加一个最大报文段(MSS)的大小,即线性增长。

  1. 除了慢启动和拥塞避免算法,TCP 还有其他一些拥塞控制算法,例如快速重传和快速恢复算法,它们可以在出现数据包丢失或延迟时,更快地恢复数据传输¹。还有一些改进的拥塞控制算法,例如新泰勒算法(NewReno)、立方体算法(CUBIC)、复合算法(Compound)等,它们可以根据不同的网络环境和需求来调整 cwnd 的变化策略。

  2. 除了 TCP 之外,还有一些其他的协议或技术也使用了拥塞控制算法,例如滑动窗口协议、漏桶算法、令牌桶算法等,它们都有各自的优缺点和适用场景。漏洞算法和令牌桶算法

漏桶算法和令牌桶算法是两种常用的流量控制算法,它们的区别主要在于:

  • 漏桶算法是以固定的速率处理请求,不允许突发流量,当请求超过处理能力时,会丢弃新的请求。漏桶算法适合总量控制和平滑处理。

  • 令牌桶算法是以恒定的速率向桶中添加令牌,请求需要消耗令牌才能被处理,当桶中有足够的令牌时,可以允许一定程度的突发流量,当桶中没有令牌时,会拒绝服务。令牌桶算法适合速率控制和应对突发流量。


TCP的评论 (共 条)

分享到微博请遵守国家法律