网络中运输层TCP协议的拥塞控制是如何实现的?

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)

  • 若出现拥塞而不进行控制,整个网络的吞吐量将随输入符合的增大而下降

假定如下条件:数据单向发送,接收方总是有足够大的缓存空间,因而发送方发送窗口的大小因网络的拥塞程度来决定,以最大报文段MSS的个数来讨论问题的单位

  • 发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
    • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些,但只要网络出现拥塞,拥塞窗口就减少一些
    • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发送超时重传)
  • 发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd
  • 维护一个慢开始门限ssthresh状态变量:
    • 当cwnd
    • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法
    • 当cwnd=ssthresh时,既可使用慢开始算法,也可使用拥塞避免算法

慢开始

cwnd按指数增大

”慢开始“是指一开始向网络注入的报文段少,并不是指cwnd增长速度慢

拥塞避免

”拥塞避免“并非指完全能够拥塞避免,而是指在拥塞避免阶段将cwnd控制为按线性规律增长,使网络比较不容易出现拥塞

cwnd按线性加1的规律增大

重传计时器超时

判断网络很可能出现了拥塞,进行以下工作:

  1. 将ssthresh值更新为发生拥塞时cwnd值的一半
  2. 将cwnd值减少为1,并重新开始执行慢开始算法

后面两个拥塞控制算法是新加的,用于改进性能

快重传

利用快重传算法可以让发送方尽早知道发送了个别报文段的丢失

所谓快重传,就是使发送方尽早进行重传,而不是等超时重传计时器超时再重传

  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等重传计时器超时再重传

使用快重传可以提高约20%吞吐量

快恢复

发送方一旦收到3个连续的重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法

  • 发送方将慢开始门限ssthresh值和cwnd值调整为当前窗口的一半;开始拥塞避免算法
  • 也有的快恢复实现是把快恢复开始时的cwnd值再增大一些,即等于新的ssthresh+3
    网络中运输层TCP协议的拥塞控制是如何实现的?_第1张图片
    在此感谢湖科大教书匠老师~,让我对网络的认识加深很多

你可能感兴趣的:(计算机网络,网络)