服务端不 listen 可以创建 tcp 连接吗

这个问题有三类答案。

上来就撸 linux kernel 源码,折腾半天,哦,终于在 tcp_rcv_state_process 里找到了 tcp_rcv_synsent_state_process 调用,后者包含:

if (th->syn) {
        /* We see SYN without ACK. It is attempt of
         * simultaneous connect with crossed SYNs.
         * Particularly, it can be connect to self.
         */
        tcp_set_state(sk, TCP_SYN_RECV);

注释也不看,看到 tcp_set_state 就很兴奋,认为自己找到了答案,斩钉截铁回答 “不 listen 也能建立起连接”。

这种回答说明此人能看懂 linux kernel c 代码,可能根本不懂 tcp,就像一个毫无乐感且不识谱的人照着一个按排好的钢琴按键序列依次按下,就能弹出正道的光的一样。

大部分人都精通 linux kernel 源码,所以任何问题都可以落实到一个查找代码的问题。

第二类答案是告诉你可以在服务端创建个 tun 设备将 syn 引到用户态程序,然后构造一个 synack 回注到 tun 设备,或者 dpdk,iptables nf_queue,自定义 nf_hook 回注 synack 也可以做同样的事吧啦吧啦… 这说明这个人懂 tcp 握手套路但显然对协议理解并不深入,他只是对 linux 网络协议栈的玩法比较擅长。

第三类答案才是正确答案,就一句话,tcp 同时打开。撸代码的那位,tcp_set_state 上面注释写得很清楚了,rfc793 3.4 小节:

The procedure also works if two TCP simultaneously initiate the procedure. When simultaneous attempt occurs, each TCP receives a “SYN” segment which carries no acknowledgment after it has sent a “SYN”.
在这里插入图片描述

[root@localhost ~]# nc -p 2234 127.0.0.1 2234

知道姿势了吗?

浙江温州皮鞋湿,下雨进水不会胖。

相关推荐

  1. netty创建tcp服务+客户

    2024-04-28 14:18:04       22 阅读
  2. C++客户服务器TCP创建

    2024-04-28 14:18:04       53 阅读
  3. 一台服务器可以支持多少TCP连接

    2024-04-28 14:18:04       44 阅读
  4. TCP服务器和客户创建步骤

    2024-04-28 14:18:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 14:18:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 14:18:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 14:18:04       82 阅读
  4. Python语言-面向对象

    2024-04-28 14:18:04       91 阅读

热门阅读

  1. 使用H5+app在安卓5.1离线环境实现文字转语音

    2024-04-28 14:18:04       31 阅读
  2. 数学与机器学习:共舞于智能时代的双璧

    2024-04-28 14:18:04       29 阅读
  3. 数据结构(并查集,ST表)

    2024-04-28 14:18:04       33 阅读
  4. git tag管理

    2024-04-28 14:18:04       26 阅读
  5. 【LeetCode】每日一题 - 负二进制转化

    2024-04-28 14:18:04       39 阅读
  6. android 获取手机号码

    2024-04-28 14:18:04       33 阅读
  7. android 内部序列化对象

    2024-04-28 14:18:04       33 阅读
  8. springbean的加载过程以及应用场景

    2024-04-28 14:18:04       38 阅读
  9. Python构建学生信息管理系统:前端页面开发

    2024-04-28 14:18:04       35 阅读
  10. leetcode58 最后一个单词的长度

    2024-04-28 14:18:04       34 阅读