在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞(congestion)。
若出现拥塞而不进行控制,那么整个网络的吞吐量将随着输入负荷的增大而下降。
四种拥塞控制算法:
慢开始(slow-start)
拥塞避免(congestion avoidance)
快重传(fast retransmit)
快恢复(fast recovery)
发送方发送TCP数据报文段;接收方发送TCP确认报文段。
1 发送方维护一个叫拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。
2 发送方将拥塞窗口作为发送窗口swnd,即 swnd=cwnd
3 发送方还要维护一个慢开始门限ssthresh状态变量:
当重传计时器超时,判断网络很可能出现了拥塞(网络拥塞时cwnd=24),进行以下工作:
1 将ssthresh值更新为发生拥塞时cwnd值的一半(ssthresh=12);
2 将cwnd值减少为1,并重新开始执行慢开始算法;
当慢开始算法执行到拥塞窗口值增大到新的慢开始门限值(ssthresh=12)时,就停止使用慢开始算法,转而执行拥塞避免算法
“慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
“拥塞避免”也并非指能够完全避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使得网络比较不容易出现拥塞
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
1 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
2 发送方一旦收到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。
【例】
这里不用等到t4,在t3时刻客户端已经收到了三个重复冗余的ack_seq,则会立即重新发送ack_seq=100的报文
更多内容可参考:TCP的流量控制和拥塞控制