1.为什么会产生拥塞?
网络资源(缓存空间,链路带宽容量和中间节点处理能力等)不足以满足用户的需求,网络性能发生了变化,产生了拥塞.
(很像交通堵车c.f. congestion)
2.拥塞控制和流量控制的区别?
流量控制针对的是发送方和接收方发送和接受的速率不匹配的问题.(端到端)
拥塞控制是根据网络整体的通过能力或网络拥挤程度来调整数据发送速率和数据量.即目的是使网络负载不超过网络传送能力.
- TCP拥塞控制的方法
慢开始、拥塞避免、快重传、快恢复.
发送方会维持一个动态变化的拥塞窗口(cwnd),但cwnd仍只是状态变量,实际决定发送方发送多少数据的是发送方的窗口.
3.1 如何发现拥塞?
Case1:当对同一个报文连续收到三个重复的ACK时,举例来说连续收到三个$M_2$,便认为其下一个$M_3$丢失,后续$M_4,M_5$继续到达,发现了拥塞.
对于个别报文段的丢失如本例$M_3$的丢失,认为拥塞的情况较轻.
Case2:超时
3.2 TCP 拥塞控制方法的具体分析
慢开始:发送方进行网络拥挤程度的探测,不是一开始就发送大量的数据,而是根据实时拥塞程度进行拥塞窗口的动态调整.拥塞窗口的大小取决于网络的拥塞程度.
这里cwnd一开始以翻倍进行指数增长.
慢开始阶段开始,cwnd=1,此时发送方只能发送1个报文段,当收到确认后,将cwnd翻倍(a.k.a cwnd*2),
拥塞避免:当cwnd>=ssthresh(慢开始门限)时,进入拥塞避免阶段,从此以后的每个轮次都只将cwnd进行线性+1;
如在过程中出现任何超时情况,则令ssthresh=cwnd/2,重新执行慢开始.
针对个别报文段丢失:快重传与快恢复:
快重传:当发现连续收到关于$M_2$的3个ACK时,执行快重传,立即重传$M_3$而不会等待$M_3$的超时时间到期.要求接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认;
快恢复:快重传完成后进入快恢复阶段,将ssthresh修改为cwnd/2,同时cwnd=ssthresh,然后进入拥塞避免阶段,重复上述过程。
针对超时重传:
发送数据包在一定时间周期内没有收到相应的ACK,等待RTO时间,超时之后就认为这个数据包丢失,就会重新发送。