内核版本:linux-3.12.6
文 件:tcp_input.c
1、当TCP连接建立后,TCP 拥塞状态机初始状态为TCP_CA_Open(默认状态);
2、当tcp_left_out() 返回值不为零或 tcp_any_retrans_done()返回值为真时,
状态机转换到TCP_CA_Disorder(乱序)状态。
3、主要的函数调用链如下:
tcp_fastretrans_alert
|----tcp_try_keep_open ---->tcp_set_ca_state
|----tcp_try_to_open
|---
tcp_try_keep_open ---->tcp_set_ca_state
4、当TCP 拥塞状态机处于其它状态时,在每收到ACK的时候,都会尽力尝试恢复到默认状态;
5、TCP_CA_open -->TCP_CA_Disorder 条件转换代码如下:
-
static void tcp_try_keep_open(struct sock *sk)
-
{
-
struct tcp_sock *tp = tcp_sk(sk);
-
int state = TCP_CA_Open;
-
-
if (tcp_left_out(tp) || tcp_any_retrans_done(sk))
-
state = TCP_CA_Disorder;
-
-
if (inet_csk(sk)->icsk_ca_state != state) {
-
tcp_set_ca_state(sk, state);
-
tp->high_seq = tp->snd_nxt;
-
}
-
}
阅读(1953) | 评论(0) | 转发(0) |