linux 超时 tcp,Linux中TCP设置syn超时时间

无论您使用什么语言或客户端库,您都应该能够在网络套接字操作上设置超时,通常将其拆分为连接超时、读取超时和写入超时。

但是,尽管您应该能够使这些超时尽可能小,但连接超时尤其具有任何给定内核的有效最大值。在此点之外,您可能请求的较高超时值将不起作用 - 连接在较短的时间后仍将超时。

TCP 连接的特殊原因是,建立 TCP 连接具有以 SYN 数据包为起点的特殊数据包序列。如果没有收到对此初始 SYN 数据包的响应,内核需要重试,它可能需要尝试几次。我知道,所有内核在发送 SYN 重重之间等待的时间越来越多,以避免淹没慢速主机。

所有内核都对重试 SYN 的数量设置上限。在 BSD 派生内核(包括 Mac OS X)上,标准模式是第二个 SYN 将在第一个内核之后 6 秒,然后是第三个 SYN 18 秒后,然后连接时间在总共大约 75 秒后关闭。

但是,在 Linux 上,默认重试周期在 20 秒后结束。Linux 发送 SYN 的重报确实比 BSD 派生的内核快一些 - Linux 据说在这 20 秒内发送 5 个 SYN,但这包括原始数据包(重报在 3s、6s、12s、24s 之后)。

但最终的结果是,如果你的应用程序想要一个小于 20s 的连接超时,没有问题,但如果你的应用程序想要一个超过 20s 的连接超时,你会发现默认内核配置将有效地将其排回 20s。

更改此超时上限非常简单,尽管它要求您更改系统配置参数,因此您需要对框进行根访问权限(或让系统管理员同意为您更改该参数)。

相关的 sysctl 是 ,对于 IP v4 是 。tcp_syn_retriesnet.ipv4.tcp_syn_retries

在选择您更改的值时要保守。与 BSD 一样,SYN 重试延迟会及时增加(尽管增加一倍而不是三倍),因此重试数量的相对较少增加会导致最大连接超时的显著增加。在一个完美的世界中,有一个很高的超时没有问题,因为应用程序的连接超时将发挥作用。

但是,许多应用程序没有设置显式连接超时,因此,如果将内核设置为 10 分钟,当远程主机关闭时,您迟早会发现一些挂起了很久的东西!

我建议你把它设置为一个值 6, 7, 或最多 8。6 的有效连接超时上限约为 45 秒,7 提供约 90 秒,8 提供约 190 秒。

若要在正在运行的内核中更改此项,可以使用 /proc 接口:

# cat /proc/sys/net/ipv4/tcp_syn_retries

5

# echo 6 > /proc/sys/net/ipv4/tcp_syn_retries

或者使用 sysctl 命令:

# sysctl net.ipv4.tcp_syn_retries

net.ipv4.tcp_syn_retries = 5

# sysctl -w net.ipv4.tcp_syn_retries=6

net.ipv4.tcp_syn_retries = 6

若要使此值在重新启动期间粘接,但您需要将其添加到 :/etc/sysctl.conf

net.ipv4.tcp_syn_retries = 6

大多数 Linux 安装都支持从 中的文件读取系统,这通常是更好的做法,因为它更容易管理升级,所以我建议你把它放在一个文件中。/etc/sysctl.d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值