拥塞控制
什么是拥塞控制(可以理解,在没有红绿等的十字路口,很容易发生轻微堵车,如果这种问题得不到缓解,那么可能会直接导致十字路口处于死锁状态,任何人都无法通过):
- 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏。这种情况下就叫做拥塞。
- 在计算机网络中的链路容量,减缓节点中的缓存和处理及等,都是网络的资源
- 若出现拥塞而不进行控制,这个网络的吞吐量将随着输入负荷的增大而下降
网络中对资源的需求超过可用量的情况就叫拥塞,当吞吐量明显小于理想吞吐量时就出现了轻度拥塞。拥塞控制就是减少注入网络的数据,减轻路由器和链路的负担,这是一个全局性问题,涉及网络中的所有路由器和主机,而流量控制是一个端到端的问题。
TCP 的拥塞控制算法包括了慢启动、拥塞避免和快恢复。慢启动和拥塞避免是 TCP 的强制部分,差异在于对收到的 ACK 做出反应时拥塞窗口增加的方式,慢启动比拥塞避免增加得更快。快恢复是推荐部分,对 TCP 发送方不是必须的。
-
慢启动:拥塞窗口 cwnd 以一个 MSS 最大报文段开始,每当传输的报文段首次被确认就增加一个 MSS。因此每经过一个 RTT 往返时间,拥塞窗口就会翻倍,发送速率也会翻倍(慢启动的慢要理解正确)。结束慢启动的情况:
- ① 发生超时事件,发送方将 cwnd 设为 1,重新开始慢启动,并将慢启动阈值设置为 cwnd/2。
- ② 当拥塞窗口达到慢启动阈值时就结束慢启动而进入拥塞避免模式。
- ③ 如果检测到三个冗余的 ACK,TCP 就会执行快重传并进入快恢复状态。
-
拥塞避免:一旦进入拥塞避免状态,cwnd 值大约是上次拥塞时的 1/2,距离拥塞并不遥远。因此 TCP 不会每经过一个 RTT 就将 cwnd 翻倍,而是较为保守地在每个 RTT 后将 cwnd 加 1。发生超时事件时,拥塞避免和慢启动一样,将 cwnd 设为 1,并将慢启动阈值设置为 cwnd/2。 -
快恢复:有时个别报文段丢失,但网络中并没有出现拥塞,如果使用慢启动会降低传输效率。这时应该使用快重传来让发送方尽早知道出现了个别分组的丢失,快重传要求接收端不要等待自己发送数据时再捎带确认,而是要立即发送确认。即使收到了乱序的报文段也要立即发出对已收到报文段的重复确认。当发送方连续收到三个冗余 ACK 后就知道出现了报文段丢失的情况,会立即重传并进入快恢复状态。在快恢复中,会调整慢启动阈值为 cwnd/2,并进入拥塞避免状态。
|