计算完后CUBIC会进入快速恢复状态(TCP_CA_Recovery)或窗口减少状态(TCP_CA_CWR),以下代码展示了所有拥塞控制状态。 /* * 发送方的拥塞状态,指示最后一轮发送的数据包中的正常或异常情况 * 该状态受ACK信息和计时器事件驱动 */ enum tcp_ca_state { ...
当sender 收到 ACK 包含显示拥塞通知(ECN),这个 ECN 由路由器写在 IP 头中,告诉 TCP sender 网络拥塞,sender 不会立马降低 cwnd,而是根据快速恢复算法进行降窗,直到减为之前的一半。当 cwnd 正在减小 cwnd,网络中有没有重传包时,这个状态就叫 CWR,CWR 可以被 Recovery 或者 Loss 中断。 4.4 Recovery 当sender...
4.3 CWR 当sender 收到 ACK 包含显示拥塞通知(ECN),这个 ECN 由路由器写在 IP 头中,告诉 TCP sender 网络拥塞,sender 不会立马降低 cwnd,而是根据快速恢复算法进行降窗,直到减为之前的一半。当 cwnd 正在减小 cwnd,网络中有没有重传包时,这个状态就叫 CWR,CWR 可以被 Recovery 或者 Loss 中断。 4.4 Recovery...
4.4 Recovery 当sender 因为快速重传机制触发丢包时,sender 会重传第一个未被 ACK 的包,并进入 Recovery 状态。在 Recovery 状态期间,cwnd 的处理同 CWR 大致一样,要么重传标记了 lost 的包,要么根据保守原则发送新包。直到网络中所有的包都被 ACK,才会退出 Recovery 进入 Open 状态,Recovery 状态可以被 loss 状...
接下来,TCP发送方通过减半拥塞窗口对一个具有ECE拥塞指示的ACK做出反应,就像它对丢失报文段使用快速重传做出反应一样,并且在下一个传输的TCP发送方到接收方的报文段首部中对CWR(拥塞窗口缩减)比特进行设置。 除了TCP以外的其他运输层协议也可以利用网络层发送ECN信号。数据报拥塞控制协议(Datagram Congestion Control ...
tcp_set_ca_state(sk, TCP_CA_Loss); tp->high_seq = tp->snd_nxt; tcp_ecn_queue_cwr(tp);/*表示发送发进入拥塞状态*//*F-RTO RFC5682 sec 3.1 step 1: retransmit SND.UNA if no previous * loss recovery is underway except recurring timeout(s) on ...
TCP_CA_Open 连接建立是的初始状态,在这个状态下CWND根据是否触达慢启动的阈值来缓慢增加。 TCP_CA_Disorder 当收到DACK或者SACK是,说明接收端收到了乱序的报文,此时转变为TCP_CA_Disorder状态,CWND不再变化,即每收到一个包,就会发送一个包。 TCP_CA_CWR 当出现网络拥塞时,会进入TCP_CA_CWR状态,例如,收到一...
目前的 TCP 控制位如下,其中 CWR 和 ECE 用于拥塞控制,ACK、RST、SYN、FIN 用于连接管理及数据传输。 CWR:用于 IP 首部的 ECN 字段。ECE 为 1 时,则通知对方已将拥塞窗口缩小。ECE:在收到数据包的 IP 首部中 ECN 为 1 时将 TCP 首部中的 ECE 设置为 1,表示从对方到这边的网络有拥塞。URG:紧急模式ACK...
目前的 TCP 控制位如下,其中 CWR 和 ECE 用于拥塞控制,ACK、RST、SYN、FIN 用于连接管理及数据传输。 CWR:用于 IP 首部的 ECN 字段。ECE 为 1 时,则通知对方已将拥塞窗口缩小。 ECE:在收到数据包的 IP 首部中 ECN 为 1 时将 TCP 首部中的 ECE 设置为 1,表示从对方到这边的网络有拥塞。
TCP_CA_Open = 0, #define TCPF_CA_Open (1<<TCP_CA_Open) TCP_CA_Disorder = 1, #define TCPF_CA_Disorder (1<<TCP_CA_Disorder) TCP_CA_CWR = 2, #define TCPF_CA_CWR (1<<TCP_CA_CWR) TCP_CA_Recovery = 3, #define TCPF_CA_Recovery (1<<TCP_CA_Recovery) ...