加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – TCP_NEW_SYN_RECV的含义是什么?

发布时间:2020-12-13 23:29:04 所属栏目:Linux 来源:网络整理
导读:我知道TCP_SYN_RECV,但TCP_NEW_SYN_RECV的含义是什么?他们之间有什么区别? https://github.com/torvalds/linux/blob/5924bbecd0267d87c24110cbe2041b5075173a25/include/net/tcp_states.h enum { TCP_ESTABLISHED = 1,TCP_SYN_SENT,TCP_SYN_RECV,TCP_FIN_W
我知道TCP_SYN_RECV,但TCP_NEW_SYN_RECV的含义是什么?他们之间有什么区别?

https://github.com/torvalds/linux/blob/5924bbecd0267d87c24110cbe2041b5075173a25/include/net/tcp_states.h

enum {
    TCP_ESTABLISHED = 1,TCP_SYN_SENT,TCP_SYN_RECV,TCP_FIN_WAIT1,TCP_FIN_WAIT2,TCP_TIME_WAIT,TCP_CLOSE,TCP_CLOSE_WAIT,TCP_LAST_ACK,TCP_LISTEN,TCP_CLOSING,/* Now a valid state */
    TCP_NEW_SYN_RECV,TCP_MAX_STATES  /* Leave at the end! */
};

另外我看到以下代码“sk-> sk_state == TCP_NEW_SYN_RECV”,为什么不使用“sk-> sk_state == TCP_SYN_RECV”?

https://github.com/torvalds/linux/blob/8fa3b6f9392bf6d90cb7b908e07bd90166639f0a/net/ipv4/tcp_ipv4.c#L16485

if (sk->sk_state == TCP_NEW_SYN_RECV) {
    struct request_sock *req = inet_reqsk(sk);
    struct sock *nsk;

解决方法

我发现了这个:

TCP_SYN_RECV state is currently used by fast open sockets.

Initial TCP requests (the pseudo sockets created when a SYN is received)
are not yet associated to a state. They are attached to their parent,and the parent is in TCP_LISTEN state.

This commit adds TCP_NEW_SYN_RECV state,so that we can convert
TCP stack to a different schem gradually.

来源,作者承诺:http://git.kernel.org/linus/10feb428a504

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读