前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以讹传讹的“tcp_tw_reuse”

以讹传讹的“tcp_tw_reuse”

作者头像
glinuxer
发布2019-04-10 15:07:37
8.5K3
发布2019-04-10 15:07:37
举报
文章被收录于专栏:专注网络研发

因为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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LinuxerPub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档