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

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

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

linux 超时 tcp,Linux中TCP设置syn超时时间相关推荐

  1. linux socket默认超时时间设置,Socket中如何设置连接超时 (转)

    Socket中如何设置连接超时 (转) Socket中如何设置连接超时 AntGhazi/2001.12.14 主页:antghazi.yeah 把CSDN与中文翻了底朝天,也没找到如何设置socke ...

  2. Socket中如何设置连接超时

    Socket中如何设置连接超时 (antghazi发表于2003-3-16 9:28:38) 设置connect的超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案. ...

  3. oracle池式连接超时,oracle连接由于防火墙设置导致超时的问题

    当应用程序使用数据库连接池进行数据连接时,防火墙的设置有可能会导致连接出现超时或者被重置的问题.当从数据库读数据的时候 有可能会 Connection timed out, 这是由于应用会缓存数据连接 ...

  4. java web超时提醒_如何在Java Web应用程序中动态设置会话超时?

    我需要给我的用户一个Web界面来更改会话超时间隔. 因此,Web应用程序的不同安装对其会话可以具有不同的超时,但是它们的web.xml不能相同. 您的问题很简单,您需要在运行时配置会话超时间隔,并且应 ...

  5. java获取服务器超时_java – Eclipse中的Tomcat服务器超时

    我在Eclipse中遇到Tomcat服务器问题.我收到以下超时错误: Server Tomcat v7.0 Server at localhost was unable to start within ...

  6. URLConnection 网络超时不返回,未设置自动超时

    最近在使用URLConnection conn = realUrl.openConnection(); 时 没有设置 conn.setConnectTimeout(30000);  conn.setR ...

  7. php中redis设置队列过期时间,如何在php中使用redis队列操作

    如何在php中使用redis队列操作 发布时间:2021-02-04 18:36:00 来源:亿速云 阅读:90 作者:Leah 这篇文章给大家介绍如何在php中使用redis队列操作,内容非常详细, ...

  8. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  9. golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

最新文章

  1. java实体类怎么写_Java中(entity)实体类的书写规范
  2. Eclipse6里面SSH整合说明
  3. 机器值计算机组成,计算机组成原理_数据的机器运算.ppt
  4. smtp中mailfrom是必须的吗_你是住在高层建筑中吗?这是你必须了解的
  5. Python 调试工具 PDB(Linux 环境下调试)
  6. python3字符串常用操作
  7. Linux 动态库剖析
  8. oracle 数据操作指令,ORACLE数据操作命令
  9. 广西民族博物馆真好玩
  10. VC 图像处理相关源代码,共28套打包下载.rar 分享
  11. springboot学习路径 转载子方志朋
  12. 西藏拉姆拉错:蓝蓝的湖水
  13. Windows7电脑自动断网的解决方法
  14. 计算机图形图像设计构图的基本形式,设计构图的八大基本表现手法!你造吗?...
  15. 如果讲不明白Spring Cloud核心组件,那我就白编故事了
  16. LWN:5.18合并窗口第一部分!
  17. Centos下增加swap空间
  18. 【车载以太网】【测试】架构及测试工具
  19. OpenCV 书稿:前言
  20. ionic capacitor 开发APP问题集合

热门文章

  1. SAP UI5 this.getList().getBinding(items).attachChange(this.handleMasterListChanged
  2. xml view里control id的生成逻辑
  3. CRM Web Client UI异步搜索介绍
  4. root cause of message type unknown during BP delta upload
  5. find out the service list changed with given user which have item category group
  6. 自己写的一段预测双色球号码的Java代码
  7. SAP UI5对于颜色使用的最佳实践
  8. 如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误
  9. Kubernetes里的ConfigMap的用途
  10. Netweaver和SAP云平台的quota管理