网络拥塞
何为拥塞控制?拥塞控制是指在计算机网络中,通过监测网络的拥塞程度并采取相应的措施来维持网络的稳定运行的方法。它的主要目标是确保网络资源的合理利用,避免网络拥塞导致的性能下降和服务质量下降。
为什么需要拥塞控制?因为我们的网络也会拥塞
网络拥塞是指在网络中传输的数据量超过了网络设备(如路由器、交换机)的处理能力,导致网络性能下降或者完全不可用的现象。
成千上万台终端都先网络发送报文进行交流,导致网络中需要处理大量的报文,导致了网络运载的负担,这是我们不喜欢遇见的,为了有效的缓解拥塞情况,tcp协议在对网络拥塞有着对应的控制。
TCP引入慢启动机制,先发送少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;
那么我们的TCP协议如何知道网络拥的呢
-
丢包率:TCP通过检测传输过程中的丢包情况来判断网络拥塞。当发送方收到三个重复的ACK时,就会认为网络中出现了拥塞,会采取拥塞控制措施。当同时收到3个相同的ACK应答报文,我们TCP就判定网络出现拥塞情况,因为在拥塞时,路由器和交换机可能丢弃TCP报文,导致丢包。
-
延迟:TCP还通过测量数据包的往返时间(RTT)来判断网络拥塞。当RTT变大时,TCP会认为网络出现了拥塞,并减少发送速率。
-
队列长度:TCP还会监测网络中的队列长度来判断网络是否拥塞。当队列长度超过一定阈值时,TCP会认为网络出现了拥塞,并减少发送速率。为了维护网络的拥塞控制,TCP使用拥塞窗口来确定发送数据的速率。这个窗口的大小取决于网络的拥塞程度和接收方的可用缓冲区大小
-
ECN标志位:TCP还支持使用显式拥塞通知(ECN)来判断网络拥塞。当路由器在转发数据包时发现网络拥塞时,可以将ECN标志位置为1,传递给接收方和发送方,以便它们采取相应的措施。
拥塞算法概念
那么我们的拥塞算法如何控制发送速率呢?前期将以2倍报文数量试探性发送TCP报文,在一个阈值后,将指数增长在改变为线性增长。
拥塞窗口是干什么用的,是控制滑动窗口大小用的。滑动窗口大小不仅仅是依赖报文中16位的报文大小控制,也需拥塞窗口控制,每次收到报文后,我们的拥塞窗口win_end=start+min(16位窗口大小,拥塞窗口大小)。
拥塞窗口在每次拥塞控制时开始为一条报文大小,后续每收到一条应答,拥塞窗口加一个报文大小单位。
那么,一直都是指数增长发送数量吗,不是的。在发送数量抵达某个阈值我们就开始线性增长。
- 当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
- 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;
少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞 。当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降; 拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案。