12.3 拥塞控制流程

12.2.1 TCP拥塞状态        TCP拥塞状态共有5个:135 enum tcp_ca_state {136 TCP_CA_Open = 0,137 #define TCPF_CA_Open (1< 摘要由CSDN通过智能技术生成

12.3.1 TCP拥塞状态

        TCP拥塞状态共有5个:

135 enum tcp_ca_state {
136     TCP_CA_Open = 0,
137 #define TCPF_CA_Open    (1<<TCP_CA_Open)
138     TCP_CA_Disorder = 1,
139 #define TCPF_CA_Disorder (1<<TCP_CA_Disorder)
140     TCP_CA_CWR = 2,
141 #define TCPF_CA_CWR (1<<TCP_CA_CWR)
142     TCP_CA_Recovery = 3,
143 #define TCPF_CA_Recovery (1<<TCP_CA_Recovery)
144     TCP_CA_Loss = 4
145 #define TCPF_CA_Loss    (1<<TCP_CA_Loss)
146 };

        Open:是初始状态,也是正常状态

        Disorder:当第一次由于SACK块或重复确认而检测到拥塞时进入此状态;此状态下拥塞窗口不变,TCP需要保持网络中的包的数量不变;TCP在进入Recovery状态之前要进入本状态

        CRW(Congestion Window Reduced):此状态下TCP会减小拥塞窗口,但不会重传已发送数据;这个状态在本地拥塞或收到显示拥塞通告(ECN)后设置

        Recovery:减小拥塞窗口直至到达ssthresh但不能增加拥塞窗口,会重传数据

        Loss:所有已发送数据都会被标记为丢失,拥塞窗口减小到一个报文段,然后数据发送端使用慢启动算法增大拥塞窗口。这个状态下不能使用快速重传算法

12.3.2 拥塞窗口

        TCP在调用tcp_write_xmit函数发送数据时会检查拥塞窗口:

1811 static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
1812                int push_one, gfp_t gfp)
1813 { 
...
1842         cwnd_quota = tcp_cwnd_test(tp, skb);
1843         if (!cwnd_quota) {    //拥塞窗口不允许发送数据
1844             if (push_one == 2)  //发送丢失探测报文是允许的
1845                 /* Force out a loss probe pkt. */
1846                 cwnd_quo
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值