网络——TCP拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞(congestion)。
若出现拥塞而不进行控制,那么整个网络的吞吐量将随着输入负荷的增大而下降。

四种拥塞控制算法:
慢开始(slow-start)
拥塞避免(congestion avoidance)
快重传(fast retransmit)
快恢复(fast recovery)

发送方发送TCP数据报文段;接收方发送TCP确认报文段。

慢开始和加法增大

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

  • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。
  • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。

2 发送方将拥塞窗口作为发送窗口swnd,即 swnd=cwnd
3 发送方还要维护一个慢开始门限ssthresh状态变量:

  • 当cwnd < ssthresh时,使用慢开始算法
  • 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法
  • 当cwnd = ssthresh时,既可使用慢开始算法,也可以使用拥塞避免算法

在这里插入图片描述

当重传计时器超时,判断网络很可能出现了拥塞(网络拥塞时cwnd=24),进行以下工作:
1 将ssthresh值更新为发生拥塞时cwnd值的一半(ssthresh=12);
2 将cwnd值减少为1,并重新开始执行慢开始算法;
当慢开始算法执行到拥塞窗口值增大到新的慢开始门限值(ssthresh=12)时,就停止使用慢开始算法,转而执行拥塞避免算法

“慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
“拥塞避免”也并非指能够完全避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使得网络比较不容易出现拥塞

快重传和快恢复

在这里插入图片描述
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
1 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

  • 这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将响应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
  • 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%

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

  • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh+3

在这里插入图片描述

真题嗅探

【例】(2009年39题)一个TCP连接总是以1KB的最大段长发送TCP段,发送方只有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来4个RTT(往返时间)内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是_____。
A 7KB
B 8KB
C 9KB
D 16KB
【分析】
在这里插入图片描述
「当拥塞窗口为16KB时发生了超时」,此时拥塞窗口cwnd值更新为1,慢开始门限值ssthresh值更新为发生拥塞时cwnd值的一半,即就是ssthresh=16/2=8;接下来会执行慢开始算法,经过第一个RTT,cwnd=2;经过第二个RTT,cwnd=4;经过第三个RTT,cwnd=8;此时达到了门限值ssthresh的值8,开始执行拥塞避免算法,经过第四个RTT,cwnd=9。

【例】
在这里插入图片描述
收到3个连续的重复确认,就将响应的报文段立即重传;这里不用等到t4seq=10超时,在t3时刻客户端已经收到了三个重复冗余的ack_seq,则会立即重新发送ack_seq=100的报文

更多内容可参考:TCP的流量控制和拥塞控制

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 快速重传算法规定,如果发送方收到三个连续的重复确认(即确认同一个报文段的ACK),则可以认为接收方没有收到该报文段,并且发送方应该立即重传该报文段,而不必等待超时定时器到期。这个算法可以有效减少网络拥塞和数据传输延迟。 ### 回答2: 快重传算法是一种用于可靠数据传输的算法。根据该算法的规定,发送方在发送每个报文段之后会等待确认。当发送方连续收到三个对报文段M2的重复确认时,就会认为接收方未收到对应的报文段M1。 在正常情况下,接收方会按照正确的顺序接收和确认报文段。当接收方收到报文段M1时,它会发送一个确认给发送方,表示已经正确收到了该报文段。发送方在接收到确认之后,会继续发送下一个报文段M2。 然而,在网络传输过程中,由于网络拥塞、传输错误等原因,报文段可能会丢失或被损坏。这时,发送方无法收到接收方的确认,从而不能确认报文段是否已经成功传输。为了解决这个问题,快重传算法引入了重复确认的概念。 当接收方收到一个被损坏的报文段,它会发送一个损坏确认给发送方,表示报文段损坏无法正常解析。在此之后,如果接收方连续收到三个对报文段M2的重复确认,即连续收到三个确认报文,发送方就会认为报文段M1丢失了,此时发送方会立即重新发送报文段M1,以确保接收方能够正确接收。 通过快重传算法,发送方可以在遇到报文段丢失的情况下快速重传,并且不需要等待超时。这样可以提高数据传输的效率和可靠性,保证数据能够正确地传输到接收方。 ### 回答3: 快重传算法规定,发送方只要连续收到3个对报文段M2的重复确认,就可认为接收方未收到对应报文段M1。 这个算法的原理是基于接收方收到报文段之后,会向发送发送确认报文段。当发送发送了报文段M1之后,接收方成功收到并发送了确认报文段A1给发送方。但是由于网络原因,发送方并未收到确认报文段A1,于是会再次发送报文段M1。当接收方成功收到报文段M1之后,仍然会发送确认报文段A1给发送方。但是由于网络原因,发送方又未收到确认报文段A1,于是再次发送报文段M1。 在这种情况下,当发送方连续收到3个对报文段M1的重复确认时,就可以认为接收方未收到对应的报文段M1。这时发送方会立即重传报文段M1。 这个算法的目的是为了提高数据传输的可靠性。通过及时重传未被接收方确认的报文段,可以避免数据传输的中断和丢失。这样可以提高网络的传输效率和可靠性。 需要注意的是,快重传算法并不会直接重传掉线的报文段,而是等待接收到连续的重复确认后才会触发重传。这样可以避免误判网络中的丢包情况,提高算法的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值