图解拥塞控制,这应该是把拥塞控制讲的最通俗易懂的文章了
大家可能都听说过 拥塞控制 和 流量控制 ,想必也有一些人可能还分不清拥塞控制和流量控制,进而把他们当作一回事。拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网络的拥堵情况相关联,而流量控制与接收方的缓存状态相关联。 也就是说,拥塞控制和流量控制是针对完全不同的问题而采取的措施。今天这篇文章,我们先来讲讲拥塞控制。 一、为何要进行拥塞控制? 为了方便,我们假设主机A给主机B传输数据。 我们知道,两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。 然而实际情况有可能此时有太多主机正在使用信道资源,导致 网络拥塞 了,而A发送的数据包被堵在了半路,迟迟没有到达B。这个时候A误认为是发生了丢包情况,会重新传输这个数据包。 结果就是不仅浪费了信道资源,还会使网络更加拥塞。因此,我们需要进行 拥塞控制 。 二、如何知道网络的拥塞情况? A 与 B 建立连接之后,就可以向B发送数据了,然而这个时候 A 并不知道此时的网络拥塞情况如何,也就是说,A 不知道一次性连续发送多少个数据包好,我们也把 A 一次性连续发送多少个数据包称之为 拥塞窗口 ,用 N 代表此时拥塞窗口的大小吧。 为了探测网络的拥塞情况,我们可以采取以下 两种策略 : 1、先发送一个数据包试探下,如果该数据包没有发生超时事件