当前位置: 首页 > news >正文

4.14 tcp_tw_reuse 为什么默认是关闭的?

开启 tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接时,相当于缩短了 TIME_WAIT 状态的持续时间。

tcp_tw_reuse 是什么?

TIME_WAIT 状态的持续时间是 60 秒,这意味着这 60 秒内,客户端一直会占用着这个端口。端口资源是有限的,一般可以开启的端口为32768-61000。

如果客户端(主动关闭连接方)的TIME_WAIT状态过多,占满了所有端口的资源,那么就无法对「目的 IP+ 目的 PORT」都一样的服务器发起连接了。

Linux 操作系统提供了两个可以系统参数来快速回收处于 TIME_WAIT 状态的连接,这两个参数都是默认关闭的:

为什么 tcp_tw_reuse 默认是关闭的?

  • 快速复用 TIME_WAIT 状态的端口,导致新连接可能被回绕序列号的 RST 报文断开了,而如果不跳过 TIME_WAIT 状态,而是停留 2MSL 时长,那么这个 RST 报文就不会出现下一个新的连接
  • 开启 tcp_tw_reuse 来快速复用 TIME_WAIT 状态的连接,如果第四次挥手的 ACK 报文丢失了,服务端会触发超时重传,重传第三次挥手报文,处于 syn_sent 状态的客户端收到服务端重传第三次挥手报文,则会回 RST 给服务端。

tcp_tw_reuse 的作用是让客户端快速复用处于 TIME_WAIT 状态的端口,相当于跳过了 TIME_WAIT 状态,这可能会出现这样的两个问题:

  • 历史 RST 报文可能会终止后面相同四元组的连接,因为 PAWS 检查到即使 RST 是过期的,也不会丢弃。
  • 如果第四次挥手的 ACK 报文丢失了,有可能被动关闭连接的一方不能被正常的关闭;

虽然 TIME_WAIT 状态持续的时间是有一点长,显得很不友好,但是它被设计来就是用来避免发生乱七八糟的事情。

http://www.lryc.cn/news/140356.html

相关文章:

  • Python数据分析和爬虫:解析数据的强大工具
  • 机器学习之SGD(Stochastic Gradient Descent,随机梯度下降)
  • leetcode做题笔记100. 相同的树
  • 【Hadoop】Hadoop入门概念简介
  • 前端监控之异常监控(一)
  • sql server 、mysql CTE 公用表表达式
  • Oracle dataguard 和Oracle rac的区别和联系
  • JUC工具类-LockSupport概述
  • 大数据:AI大模型对数据分析领域的颠覆(文末送书)
  • CEdit 选中文字实时更新到另一个控件中
  • Word导出创建Adobe PDF其中emf图片公式马赛克化及文字缺失
  • [matlab]matlab配置mingw64编译器
  • 华为OD-非严格递增连续数字序列
  • css滚动条样式这样修改下很漂亮
  • 转置卷积的应用
  • 常见的移动端布局
  • Typore 亲测有效(懂得都懂哈)
  • Kyligence Copilot 登陆海外,斩获 Product Hunt 日榜 TOP 2
  • 【Docker】Docker 的基本概念和优势,基本命令及使用例子
  • 高并发内存池(回收)[4]
  • 分布式事务篇-2.4 Spring-Boot整合Seata
  • 718. 最长重复子数组
  • Mysql join加多条件与where的区别
  • div滚动条自动滚动到底部
  • 【深度学习】实验02 鸢尾花数据集分析
  • AI大模型潮水中,医疗数字化加速「求解」
  • 【安卓】自定义View实现画板涂鸦等功能
  • 面试题. 搜索旋转数组
  • 前端需要理解的数据治理与异常监控知识
  • ip_vs 原理解析 (四)hook 后的开始 一