专栏首页专注网络研发以讹传讹的“tcp_tw_reuse”

以讹传讹的“tcp_tw_reuse”

因为Linux是一个通用的操作系统,所以其运行环境也是为了通用环境设计的,不会太好,也不会太坏,因为其要默认兼容大部分环境。因此在做服务端部署的时候,都需要对Linux的系统参数进行一番调整。

网上和各种书籍,都介绍了一大堆需要调整的系统参数和建议值,我以前也在不同的地方看到很多这样的介绍,在此就不再重复了。只不过近日正在看这些系统参数的实现,也就因此发现了一个问题。

在各种资料和书籍中(包括一些“较为出名”的书籍中),都会介绍到net.ipv4.tcp_tw_recycle和net.ipv4.tcp_tw_reuse。其中,前者表示是否开启TIME_WAIT套接字的快速回收,后者表示是否允许重用TIME_WAIT套接字。一般情况下,都是建议大家打开这两个选项。

今天的重点是net.ipv4.tcp_tw_reuse。源码面前出真相,我们看看tcp_tw_reuse的作用是什么。这个过程很简单。

tcp_tw_reuse设置的是内核变量sysctl_tcp_tw_reuse,而这个变量仅在tcp_twsk_unique函数中使用。而这个函数的调用路径有且仅有一个:tcp_v4_connect->inet_hash_connect->__inet_check_established->twsk_unique->twsk_unique。

也就是说tcp_tw_reuse仅在TCP套接字作为客户端,调用connect时起作用。绝大部分的TCP服务器,应该不会有大量主动连接的动作(或许会连接DB等,但一般也是长连接)。因此这个选项对于TCP服务来说,基本上是无用的,完全是没必要打开,甚至可能还会给一些初级的运维工程师带来迷惑和干扰。

简单看一下tcp_twsk_unique的实现:

当开启了net.ipv4.tcp_tw_reuse时,并且之前使用了TCP timestadmp选项(用于PAWS)时,才允许重用TIME_WAIT套接字。

本文重点就是为了纠正各种资料的“以讹传讹”,大家都没有认真看过tcp_tw_reuse是如何工作的,就建议服务端打开这个选项,这种传播知识的方式,窃以为不可取。

BTW,微信文章比博客有个好处:一个小知识点,介绍几句,就可成文,不需要博客那么正式。

作者:gfree.wind@gmail.com

微博:glinuxer

微信公众号:LinuxerPub

本文分享自微信公众号 - LinuxerPub(LinuxerPub),作者:glinuxer

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 应用层如何强制发送RST即相关内核实现

    前几天群里有个同学问,“如何让应用层强制发送RST中止连接”,而不是通过FIN包的四次交互来关闭连接。当时,我只是凭借以往的经验,猜测使用lin...

    glinuxer
  • TCP的MTU Probe和MSS(1)

    在前面两篇文章中,我们研究了在TCP三次握手时MSS选项的值:一般情况下,都是由出口路由的MTU大小决定:MTU-40。也就是说,TCP在握手阶...

    glinuxer
  • TCP接收窗口的实现(一)

    TCP首部中的Window字段,表示当前套接字的接收窗口,即目前可以接收的数据大小,对端不会发送超过接收窗口大小的数据。如果在三次握手时,两端都支持Window...

    glinuxer
  • R语言学习 - 热图简化

    热图绘制 - pheatmap 绘制热图除了使用ggplot2,还可以有其它的包或函数,比如pheatmap::pheatmap (pheatmap包中的phe...

    生信宝典
  • ionic4在ios微信浏览器输入框聚焦问题

    客户反映应用在微信浏览器上有问题,有时输入框无法聚焦从而无法输入。开发找我求助,我去试遍了主流浏览器,桌面、android、ios平台,发现仅有【ios+微信浏...

    IT晴天
  • Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息

    下面以在搜狗里搜索 网易云热评墙 为例,爬取得到的全部文章信息(包括标题、日期、链接),并保存到Excel,使用Selenium来实现。

    叶庭云
  • py第四天

    04. 万恶之源-基本数据类型(list,tuple) 本节主要内容: 1. 列表 2. 列表的增删改查 3. 列表的嵌套 4. 元组和元组嵌套 5. rang...

    py3study
  • java开发中spring和springboot常用注解总结,开发人员必学

    这个注解可以用于类和方法上,用于类上,表示父路径,如类上是demo,方法上是/demo1,那么访问路径就是demo/demo1

    用户1289394
  • MySQL 用户与权限管理

        MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的相关DML,DQL权限。MySQL存取控制包含2个阶段,一是服务器...

    Leshami
  • Python基础教程之小白入门篇

    正如人与人之间的沟通需要语言,人与计算机之间的沟通,也需要语言,连接人与计算机沟通的桥梁就是编程语言。任何编程语言只要用来开发程序,都怀揣着同一使命——“为人类...

    墨鬓

扫码关注云+社区

领取腾讯云代金券