流量控制

TCP流量控制是为了防止发送方发送数据过快,从而导致接收方无法及时处理而引起数据丢失。

滑动窗口

TCP流量控制主要通过滑动窗口机制来实现。滑动窗口是一种动态调整发送方发送数据量的方法,它基于接收方的接收能力来限制发送方的发送速率。

  1. 滑动窗口的概念

    • 发送方和接收方分别维护一个窗口,表示当前可以发送或接收的数据量。

    • 发送窗口的大小取决于接收方的接收窗口大小,即接收方能够接收的数据量。

  2. 工作原理

    • 发送方在发送数据前,会先查看接收方的接收窗口大小。

    • 根据接收窗口的大小,发送方调整自己的发送窗口,确保发送的数据量不会超过接收方的处理能力。

    • 当接收方处理完一部分数据后,会向发送方发送确认报文(ACK),并更新自己的接收窗口大小。

    • 发送方收到确认报文后,会更新自己的发送窗口,并根据新的窗口大小继续发送数据。

  3. 窗口的更新

    • 接收方根据自己的接收能力和处理速度,动态调整接收窗口的大小,并通过确认报文通知发送方。

    • 发送方根据接收方发送的窗口更新报文,调整自己的发送窗口大小。

a7ee34bd82810d30026ebce4c2857b4.png

具体操作

  1. 发送方的操作

    • 发送方在发送数据时,会按照接收方的接收窗口大小来发送数据。

    • 如果接收方的接收窗口变小,发送方会相应地减少发送数据量。

    • 如果接收方的接收窗口变为0,发送方会停止发送数据,直到收到接收方发送的窗口更新报文为止。

  2. 接收方的操作

    • 接收方在接收到数据后,会根据自己的处理能力和接收窗口大小来确认数据。

    • 如果接收方能够处理更多的数据,会增大接收窗口的大小,并通过确认报文通知发送方。

    • 如果接收方无法处理更多的数据,会减小接收窗口的大小,以限制发送方的发送速率。

优点

  1. 防止数据丢失:通过控制发送方的发送速率,避免接收方因处理不过来而导致数据丢失。

  2. 提高网络效率:确保数据能够有序、可靠地传输,提高网络的整体传输效率。

  3. 增强网络稳定性:在网络拥塞时,通过调整发送速率来减轻网络负担,增强网络的稳定性。

拥塞控制

拥塞控制是为了防止过多的书记注入到网络中,TCP拥塞控制采用了慢启动拥塞避免快速重传快速恢复来应对网络拥塞。

81d7b1e0fa7ccaffeabb7b078018ed7.png

当 cwnd < ssthresh 时,使用慢开始算法

当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法

当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法

工作原理

  1. 初始设置:在TCP连接刚建立时,拥塞窗口cwnd通常被设置为一个较小的值(如不超过2至4个SMSS,即最大报文段长度)。

  2. 慢启动阶段:在慢启动阶段,每当发送方收到一个对新的报文段的确认后,拥塞窗口cwnd就会增加(如每经过一个传输轮次,cwnd就加倍),直到达到慢启动门限(ssthresh)为止。这个阶段的目的是逐渐探测网络的拥塞程度。

  3. 拥塞避免阶段:当拥塞窗口cwnd达到慢启动门限ssthresh后,TCP连接进入拥塞避免阶段。在这个阶段,拥塞窗口cwnd的增长速度会放缓,每经过一个往返时间(RTT)就把cwnd加1,以避免网络拥塞的发生。

  4. 拥塞发生时的调整:如果网络中出现拥塞(如发送方未在规定时间内接收到ACK确认包),TCP会采取相应的拥塞控制算法来调整拥塞窗口cwnd的大小。例如,在超时重传时,会将cwnd重置为初始值,并将ssthresh设置为cwnd的一半,然后重新进入慢启动阶段。在快速重传和快速恢复算法中,当收到三个重复的ACK时,会立即触发重传,慢开始门限ssthresh减半,cwnd设置为ssthresh减半后的数值,然后开始执行拥塞控制算法,以快速恢复网络状态。