什么是 TCP 的连接超时时间

2021-04-15 15:08:44 +08:00
 dzdh

什么是连接超时时间

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

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

前提:没有内核的 tcp syn retry

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

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

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

好久没看 TLS 下层的东西了,记得不是很清楚。
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
2021-04-15 17:01:57 +08:00
@monsterxx03
刚才重新翻了一下 tcp/ip 详解,七次 syn 重试,总共时间是两分钟多一点,
但是内核会除了这七次意外,尝试 syn 重传
所以楼主的 kernel syn retry 我不知道具体是指那七次还是七次之外的了。

说白了,lz 的问题还是在业务层问 kernel 层
monsterxx03
2021-04-15 17:12:46 +08:00
@hxndg 他大概是想依靠一个内核机制来解决一个业务层的问题. tcp_syn_retries 是可以设置的, 不同发行版默认值不一样, 一般默认是 6 次

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX