TCP流量控制+拥塞控制

TCP流量控制

为了提高信道利用率,TCP采用连续ARQ协议。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

实现方法:通过滑动窗口实现

TCP的两端都维持一个发送/接收缓存和接收/发送窗口。TCP的缓存是一个循环队列,其中发送窗口可以用3个指针表示。而发送窗口的大小受TCP数据报中窗口大小值的影响,TCP数据报中的窗口大小是接收端通知发送端其还可以接收多少数据,所以发送窗口根据接收的的窗口大小的值动态变化

原理这就是运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小

死锁:考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送放将发送窗口设置为0,停止发送数据。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那么发送方的发送窗口就一直为零导致死锁。

 死锁解决方法:解决这个问题,TCP为每一个连接设置一个持续计时器(persistence timer)。只要TCP的一方收到对方的零窗口通知,就启动该计时器,周期性的发送一个零窗口探测报文段。对方就在确认这个报文的时候给出现在的窗口大小(注意:TCP规定,即使设置为零窗口,也必须接收以下几种报文段:零窗口探测报文段、确认报文段和携带紧急数据的报文段)

TCP拥塞控制

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

发送方维护一个叫做拥塞窗口的状态变量(cwnd),其取值取决于网络的拥塞程度,且动态变化

如何判断是否出现拥塞:没有按时收到来自接收端的确认报文(超时重传)

拥塞控制的算法:

慢开始:一开始将cwnd设为1(指一个报文段的大小),每经过一个传输轮次,cwnd*2。

拥塞避免:每经过一个传输轮次,cwnd + 1。

快重传:连续收到三个重复ACK,发送端立即重传此报文。

  1. 接收方不要等待自己发送数据时才稍带确认,而是要立即发送确认
  2. 接收端即使收到了失序的报文段,也要立即发出对已收到报文段的重复确认
  3. 发送方一旦收到3个连续的重复ACK,将相应数据报重传,而不是等待该报文段的超时重传计时器超时后在重传
  4. 对于个别丢失的报文段,发送方不会出现超时重传,就不会误认为出现网络拥塞,避免了再次进入慢开始。

快恢复:发送方一旦收到3个连续的重复ACK,就知道目前是个别报文段丢失而不是网络拥塞,于是不执行慢开始,而是进入快恢复

快恢复:令ssthresh = cwnd/2;再令cwnd = ssthresh.

拥塞控制过程:一开始将cwnd设为1(指一个报文段的大小),维护一个慢开始门限(ssthresh)状态变量。

当cwnd< ssthresd时,使用慢开始算法;当cwnd>ssthresd时,使用拥塞避免算法;当出现超时重传,将ssthreh =cwnd/2,并进入慢开始。当出现快重传,进入快恢复。


 

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