tcp短连接TIME_WAIT问题解决方法大全(4)——tcp_tw_reuse

2023-10-28

tcp_tw_reuse选项的含义如下(http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt):
tcp_tw_reuse - BOOLEAN
Allow to reuse TIME-WAIT sockets for new connections when it is
safe from protocol viewpoint. Default value is 0.

    
这里的关键在于“协议什么情况下认为是安全的”,由于环境限制,没有办法进行验证,通过看源码简单分析了一下。
=====linux-2.6.37 net/ipv4/tcp_ipv4.c 114=====
int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
{
const struct tcp_timewait_sock *tcptw = tcp_twsk(sktw);
struct tcp_sock *tp = tcp_sk(sk);


/* With PAWS, it is safe from the viewpoint
  of data integrity. Even without PAWS it is safe provided sequence
  spaces do not overlap i.e. at data rates <= 80Mbit/sec.


  Actually, the idea is close to VJ's one, only timestamp cache is
  held not per host, but per port pair and TW bucket is used as state
  holder.


  If TW bucket has been already destroyed we fall back to VJ's scheme
  and use initial timestamp retrieved from peer table.
*/
    //从代码来看,tcp_tw_reuse选项和tcp_timestamps选项也必须同时打开;否则tcp_tw_reuse就不起作用
    //另外,所谓的“协议安全”,从代码来看应该是收到最后一个包后超过1s

if (tcptw->tw_ts_recent_stamp &&
   (twp == NULL || (sysctl_tcp_tw_reuse &&
    get_seconds() - tcptw->tw_ts_recent_stamp > 1))) {
tp->write_seq = tcptw->tw_snd_nxt + 65535 + 2;
if (tp->write_seq == 0)
tp->write_seq = 1;
tp->rx_opt.ts_recent  = tcptw->tw_ts_recent;
tp->rx_opt.ts_recent_stamp = tcptw->tw_ts_recent_stamp;
sock_hold(sktw);
return 1;
}


return 0;

}


总结一下:
1)tcp_tw_reuse选项和tcp_timestamps选项也必须同时打开;
2)重用TIME_WAIT的条件是收到最后一个包后超过1s。



官方手册有一段警告:
It should not be changed without advice/request of technical
experts.
对于大部分局域网或者公司内网应用来说,满足条件2)都是没有问题的,因此官方手册里面的警告其实也没那么可怕:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tcp短连接TIME_WAIT问题解决方法大全(4)——tcp_tw_reuse 的相关文章

  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 谁在 Mac OS X 上监听给定的 TCP 端口?

    在Linux上 我可以使用netstat pntl grep PORT or fuser n tcp PORT找出哪个进程 PID 正在侦听指定的 TCP 端口 如何在 Mac OS X 上获得相同的信息 在 macOS 上Big Sur然
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • 具有多个代理的 HttpClient,同时处理套接字耗尽和 DNS 回收

    我们正在与朋友一起开发一个有趣的项目 我们必须执行数百个 HTTP 请求 所有请求都使用不同的代理 想象一下 它类似于以下内容 for int i 0 i lt 20 i HttpClientHandler handler new Http
  • TCP 连接寿命

    客户端 服务器 TCP 连接在野外可以持续多长时间 我希望它保持永久连接 但事情发生了 所以客户端将不得不重新连接 我什么时候可以说代码有问题而不是某些外部设备有问题 我同意赞 林克斯的观点 虽然无法保证 但假设不存在连接或带宽问题 您可以
  • Java Servlet 中限制 HTTP 请求

    在 java servlet 中 如何根据客户端的 IP 地址限制来自用户的 http 请求 我不想每秒处理来自特定源 IP 地址的超过 X 个请求 其中 X 是可配置的并且具有 0 1 中的实际值 10 范围 从 10 秒内 1 个请求到
  • StreamWriter的正确使用

    经过几次尝试后 我无法让 StreamWriter 正确构建 工作 所以我做了一些根本错误的事情 C Visual Studio 我有一个现有的 TCP 客户端 它连接并充当读取器 它工作正常 private System Net Sock
  • 具有非阻塞或多线程功能的 Ruby Tcp Server 类

    找不到任何可以帮助创建非阻塞 多线程服务器的 gem 或类 哪里可以找到 The Ruby 文档 http ruby doc org core classes Socket html M002091关于套接字有一些很好的例子 使用该页面中的
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • 如何用单线程实现TCP上的全双工通道?

    我正在编写的网络库需要通过 TCP 套接字发送和接收消息 消息可以随时发送或接收 即应该作为全双工通道工作 我能够使用两个线程来实现这样的场景 调用 send 的主线程和一个主要在 receive 调用处阻塞的专用线程 我的问题是 是否可以
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • 可以访问每个套接字的 TCP 统计数据/信息吗? (C/C++)

    我需要一些信息 例如我创建的特定 TCP 套接字发生的重新发送包 数据包丢失的数量 有人知道如何直接从我的 C C 程序访问或请求此类信息吗 也许是 Linux 特有的东西 或者我是否需要 作为解决方法 捕获和分析我自己的流量 提前致谢 通
  • Golang SSL TCP套接字证书配置

    我正在创建一个 Go TCP 服务器 不是 http s 并且尝试将其配置为使用 SSL 我有一个 StartCom 免费 SSL 证书 我正在尝试使用它来完成此任务 我的服务器代码如下所示 cert err tls LoadX509Key
  • 通过 SSH 隧道访问 LDAP

    我通过 SSH 根访问 访问了客户办公室网络内的一台机器 我正在我的计算机上编写一个需要集成到 LDAP 的 PHP 应用程序 LDAP 服务器位于我客户网络的另一台服务器中 并且not可以从外部访问 但是我可以通过可以通过 SSH 连接的
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • MongoDB 的简单 HTTP/TCP 健康检查

    我需要为 Docker 容器内的 MongoDB 实例创建运行状况检查 尽管我可以采取解决方法并通过 CLI 使用 Mongo Ping 但最好的选择是创建一个简单的 HTTP 或 TCP 测试 标准 ping 测试中默认 27017 端口

随机推荐

  • struct和typedef struct的区别

    在了解struct和typedef struct之前 我们先学习下typedef的定义和用法 typedef为C语言的关键字 作用是为一种数据类型定义一个新名字 这里的数据类型包括内部数据类型 int char等 和自定义的数据类型 str
  • 网络安全(黑客技术)自学

    前言 网学黑客技术的人越来越多了 不少人都不知道该怎么学 今天就来详细的说一说黑客是如何自学成为一名黑客 首先 什么是黑客 黑客 泛指擅长IT技术的电脑高手 黑客一词 源自英文Hacker 早期其实就是一群爱好电脑技术的人 他们有着与常人不
  • awk 练习题

    test txt为cp etc passwd test txt 用awk 打印整个test txt 以下操作都是用awk工具实现 针对test txt awk F print 0 test txt 查找所有包含 bash 的行 awk ba
  • web前端知识总结一(HTMl+CSS)

    web前端知识总结一 HTML CSS 文章目录 web前端知识总结一 HTML CSS 浏览器 HTML基础 换行标签 水平线标签 图片标签 绝对路径 相对路径 视频标签 链接标签 锚点 无序列表 有序列表 自定义列表 表格 表格属性 合
  • vue使用什么进行css开发,教你在Vue项目中使用React超火的CSS-in-JS库: styled-components...

    什么是CSS in JS 顾名思义 CSS in JS就是可以使用JS来编写CSS样式 那么为什么要用JS来编写CSS呢 我写CSS写的好好的 干嘛非给自己找不自在呢 相信以前大家都听说过这么一个词 关注点分离 就算没听过这个词那么你肯定至
  • Java笔记-Object,String,Math,BigInteger类

    一 项目的jar包的导入与导出 jar包是一个可以包含许多 class文件的压缩文件 我们可以将一个jar包加入到项目的依赖中 从而该项目可以使用该jar下的所有类 也可以把项目中所有的类打包到指定的jar包 提供给其他项目使用 1 1导出
  • 艾诺威Aerohive AP120,TTL简单设置和Image(固件)损坏修复等

    艾诺威Aerohive AP120 TTL简单设置和Image 固件 损坏修复等 原始用户名 admin 原始密码 aerohive 默认IP 192 168 58 64 eth0 WAN口 mgt0 LAN口 WLAN 无线 串行口速度
  • IDEA使用maven搭建java项目连接redis(图文)

    1 新建项目 2 添加依赖 对应的依赖配置项可以在https mvnrepository com artifact redis clients jedis 中找到 可以根据自己想要的版本进行配置 3 mevan下载jar 4 解决依赖包导入
  • 美国教育数据分析

    现有一份来自kaggle的美国教育相关的数据集 数据中一共有1497个样本 25个属性 我们先将这份数据的缺失值进行补充 并进行标准化 然后将这份数据中的学生数学成绩作为标签 利用其它的24个属性构建机器学习方法 来对学生成绩进行预测 通过
  • 《英语国家社会与文化入门》答案翻译

    Traslate by 东莞理工学院 14级软件2班 赖静朝 本资料仅供学习交流 不保证内容的绝对准确性 严禁使用于任何商业用途 下载地址 链接 http pan baidu com s 1nv6JhAp 密码 b3oc 如果发现错误 可以
  • 锐捷实操系列

    1 锐捷实操 Telnet方式登录 1 配置路由器以太网口的IP地址 Ruijie config interfaceinterface number 进入接口配置模式 Ruijie config if GigabitEthernet0 0
  • Blender基础操作:移动游标位置、快速设置原点

    1 游标 作用 用于物体定位 比如 1 作为出生点 新创建的物体的初始位置 2 在游标处汇合的操作 右键 吸附 选中项 游标 如何移动游标的位置 手工移动 选中游标工具 点到指定位置 不推荐 右键 吸附 游标 选中项 自动吸附 勾选磁铁 顶
  • 华为测开面试记,三面被吊打,所幸最后Offer已到手

    在互联网做了几年之后 去大厂 镀镀金 是大部分人的首选 大厂不仅待遇高 福利好 更重要的是 它是对你专业能力的背书 大厂工作背景多少会给你的简历增加几分竞争力 但说实话 想进大厂还真没那么容易 最近面试华为 结果三面被吊打 不甘心的我整理了
  • 简单使用 MySQL 索引

    MySQL 索引 1 什么是索引 在数据库表中 对字段建立索引可以大大提高查询速度 通过善用这些索引 可以令 MySQL 的查询和 运行更加高效 如果合理的设计且使用索引的 MySQL 是一辆兰博基尼的话 那么没有设计和使用索引的 MySQ
  • linux:vmware下docker容器无法ping通外部

    问题 如题 原因 可能是因为网络原因 之前用的梯子如果没有断开而直接关机 导致网卡出现异常 而vm ware也可能是同样原因 尝试解决 关闭vmware并重启 再一次进入到容器 问题解决
  • ant编译Tomcat8时报错 the archive file.tar.gz doesn't exist

    报错 testexist echo Testing for D project Tomcat 8 0 2 src share commons dbcp2 2 0 SNAPSHOT src build xml downloadgz 2 pro
  • Python tkinter 树形列表控件(Treeview)的使用方法

    1 方法 方法 描述 bbox item column None 返回指定item的框选范围 或者单元格的框选范围 column cid option None kw 设置或者查询某一列的属性 delete items 删除指定行或者节点
  • [专利与论文-11]:南京市职称申请 - 继续教育学时认定表如何填写

    2021年电子信息申报通知 中 高级 南京人力资源和社会保障学会 关于做好2020年度南京市专业技术人员继续教育工作的通知 关于做好2020年度南京市专业技术人员继续教育工作的通知 今年申报职称 关于学时 需要填写 南京市专业技术人员继续教
  • MySQL自带数据库

    文章目录 MySQL自带数据库 自带数据库介绍 1 mysql 2 information schema Server层统计信息字典表 Server层表级别对象字典表 Server层其它信息字典表 InnoDB层系统字典表 InnoDB层锁
  • tcp短连接TIME_WAIT问题解决方法大全(4)——tcp_tw_reuse

    tcp tw reuse选项的含义如下 http www kernel org doc Documentation networking ip sysctl txt tcp tw reuse BOOLEANAllow to reuse TI