tcp_tw_reuse对客户端的作用

客户端频繁建立连接然后主动关闭连接,会产生大量TIME_WAIT,此时,如何快速利用TIME_WAIT呢?
必须满足下面所有条件:

客户端:

/proc/sys/net/ipv4/tcp_tw_reuse   为 1   #TIME_WAIT socket 生存时间超过1秒
/proc/sys/net/ipv4/tcp_timestamps 为 1

服务端:

/proc/sys/net/ipv4/tcp_timestamps 为 1

即client在满足上述条件下,会强制将客户端的timewait的socket复用,这样client就能无视和本地 timewait五元组冲突socket,直接新建连接。

缺点:如果网络整个访问路径存在防火墙或者lvs/slb,则 还需要 确定他们 能否透传 TCP的tcp_timestamps,如果中间设备修改或者删除tcp_timestamps,那么即使client 和 server 都满足了条件,还是不能起效果。所以一旦出现开启了tcp_timestampstcp_tw_reuse但是客户端还是不能重用timewait的socket,建议在终端(客户端和最终server)抓包,对比报文。

内核源码:

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 viewpointof data integrity. Even without PAWS it is safe provided sequencespaces do not overlap i.e. at data rates <= 80Mbit/sec.Actually, the idea is close to VJ's one, only timestamp cache isheld not per host, but per port pair and TW bucket is used as stateholder.If TW bucket has been already destroyed we fall back to VJ's schemeand use initial timestamp retrieved from peer table.*///tcptw->tw_ts_recent_stamp 为1表示老的timewait socket 是携带时间戳的,即server端需要开启 tcp_timestamps。// sysctl_tcp_tw_reuse 表示本机开启了tcp_timestamps // get_seconds() - tcptw->tw_ts_recent_stamp > 1,表示老的timewait socket已经超过1秒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;
}

tcp_tw_reuse对客户端的作用相关推荐

  1. linux系统参数之ip_local_port_range、tcp_max_tw_buckets、tcp_tw_reuse

    一,linux TIME_WAIT 相关参数 1,/proc/sys/net/ipv4/ip_local_port_range:端口范围,不要超过1024到65535,1024以下系统使用,65535 ...

  2. tcp_tw_reuse、tcp_tw_recycle和tcp_timestamps

    为了解决TIME_WAIT问题的参数优化 提到TIME_WAIT就不得不提MSL:即Maximum Segment Lifetime,最大报文生存时间,和TTL相似,TTL是IP头中的,是一个设置的初 ...

  3. 网络优化之net.ipv4.tcp_tw_recycle和tcp_tw_reuse参数

    linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net ...

  4. tcp_tw_recycle和tcp_tw_reuse

    tcp TIME_WAIT 进入主题前必须做铺垫啊,讲讲TIME_WAIT.因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭.先发FIN包的一方执行的是主动关闭:后发FIN包的一方 ...

  5. Oracle监听启动扫描sqlnet,监听中sqlnet.ora的作用

    sqlnet.ora最常用的两个功能是: 客户端起作用==连接方式 用于指定客户端的名称解析查询的命名方法的顺序.==>> NAMES.DIRECTORY_PATH=(tnsnames, ...

  6. Zookeeper java客户端ZkClient使用详解

    简介 ZKClient是一个Zookeeper客户端框架,是对Zookeeper原生API的封装.使得使用更方便.功能更多. 查看之前必须要对Zookeeper的基本命令操作.Watch机制.Acl等 ...

  7. 开源邮件客户端_排名前6位的开源桌面电子邮件客户端

    开源邮件客户端 本文最初于2015年10月8日发布,并进行了更新以反映新信息和项目更改. 移动和Web技术仍然没有使桌面过时,尽管有一些常规的说法相反,但桌面客户端似乎并不会很快消失. 并且有充分的理 ...

  8. oracle12c32下载,oracle 11g 32位|oracle11g客户端下载 32位 - 121下载站

    oracle11g是一款专业的oracle数据库管理软件,新版中增加了不少功能,同时提高了稳定性. oracle 11g 32位功能 1.oracle客户端的作用主要是为了远程访问oracle服务器用 ...

  9. oracle11g 下载图解,oracle11g 64位客户端下载 附安装教程

    软件大小: 587.18 MB 更新时间: 2016-03-22 软件语言: 简体中文 软件厂商: Home Page 软件等级: 软件类别: 国产软件 / 免费软件 / 编程工具 官方网站: 应用平 ...

最新文章

  1. 伍六七带你学算法 入门篇-拼写单词
  2. Python 常用文件
  3. 使用Cbrgen和Setdest构造无线仿真环境
  4. 黑马程序员-4 String类和StringBuffer类
  5. 工具推荐|程序员必须知道的11款新型编程工具
  6. 5新建没有头文件_IAR新建工程
  7. Android开发中手机存储路径问题
  8. luogu1991 无线通讯网
  9. sqlplus(数据泵)导入导出dmp实践使用
  10. Ace Admin 学习笔记
  11. 带徽标的Bootstrap 3 Navbar
  12. invocation, 作者 Medwyn Goodall,女巫医 [搜索 invocation Medwyn Goodall]
  13. Java求矩形面积和圆形面积的异常处理实例
  14. 算法入门 13.并查集
  15. 数据分析实战 -- 股票量化交易分析
  16. PrimoCache2.2.0汉化程序与2.0.0的交叉使用
  17. 【Android进阶】14、theme 主题 和 menu 顶部应用栏
  18. 业界资讯:小程序开放小游戏类别
  19. 陕西美食羊肉泡馍,舌尖上的美感
  20. oracle 断电起不来,解决方案

热门文章

  1. 统计学 一 集中趋势
  2. 亲测可行!!!将下载好的优酷文件kux格式转为MP4格式
  3. DAMOYOLO:基于DAMOYOLO训练数据集详细教程
  4. C语言中的多线程简介
  5. Exce丨服务器2O19系统己满,《电子表格Exce20.docx
  6. 【机械臂算法】机械臂动力学参数辨识仿真
  7. 基于PHP的学生留言管理系统
  8. python统计文本字数
  9. 【强化学习论文合集】三十一.2021智能体和多智能体系统国际联合会议论文(AAMAS2021)
  10. Android键盘输入语言设置默认打开myanmar 缅甸语