V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dzdh
V2EX  ›  问与答

什么是 TCP 的连接超时时间

  •  
  •   dzdh · 2021-04-15 15:08:44 +08:00 · 1195 次点击
    这是一个创建于 1329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是连接超时时间

    linux curl 访问 ip:80,假设 ip 机器 并没有开机,超时时间设置为 120s

    第 10s 的时候,开机了,webserver 启动了成功了。此时能成功建立连接吗

    前提:没有内核的 tcp syn retry

    原因: 如果我有个需求,访问某个接口获取数据,不在乎任何客观因素无所谓用多长时间。 是否意味着我 curl 无视超时时间,最终是一定能拿到结果的

    4 条回复    2021-04-15 17:12:46 +08:00
    hxndg
        1
    hxndg  
       2021-04-15 16:06:40 +08:00
    我记得如果没有 tcp retry 的话,unix 总共是实验 7 次? TCP/IP 卷 1 里面写了我忘记了。
    10s 我记得应该是 OK 的吧

    无视超时时间的话你得从 linux 协议栈和防火墙下手吧,curl 应该没有用?

    好久没看 TLS 下层的东西了,记得不是很清楚。
    monsterxx03
        2
    monsterxx03  
       2021-04-15 16:48:36 +08:00
    没有 tcp syn retry 不行, connect timeout 就是在规定时间内重复发 syn 包罢了, 没 syn 包不可能握手成功.

    你想要的效果理论上通过同时增大 curl --connect-timeout 和 net.ipv4.tcp_syn_retries 实现, 但这么干很傻
    1. 对面防火墙可能给你回 RST
    2. tcp_syn_retries 最大 255, 理论最长超时时间大概几个小时吧.
    3. tcp syn retry 的间隔时间类似 exponential backoff 的方式计算的, 上限好像是 2min? 不确定. 所以你可能对面 server 起来后过了 2 min 钟你才连上.

    只能在业务层面轮询.
    hxndg
        3
    hxndg  
       2021-04-15 17:01:57 +08:00
    @monsterxx03
    刚才重新翻了一下 tcp/ip 详解,七次 syn 重试,总共时间是两分钟多一点,
    但是内核会除了这七次意外,尝试 syn 重传
    所以楼主的 kernel syn retry 我不知道具体是指那七次还是七次之外的了。

    说白了,lz 的问题还是在业务层问 kernel 层
    monsterxx03
        4
    monsterxx03  
       2021-04-15 17:12:46 +08:00
    @hxndg 他大概是想依靠一个内核机制来解决一个业务层的问题. tcp_syn_retries 是可以设置的, 不同发行版默认值不一样, 一般默认是 6 次
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1070 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:12 · PVG 03:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.