time_wait 详解和解决方案(time_wait解决办法)

注意:免费节点订阅链接已更新至 2025-12-17点击查看详情

产生原因

TCP 连接关闭时,会有 4 次通讯(四次挥手),来确认双方都停止收发数据了。如上图,主动关闭方,最后发送 ACK 时,会进入 TIME_WAIT 状态,要等 2MSL 时间后,这条连接才真正消失。

为什么要进入 TIME_WAIT 状态?

TCP 的可靠传输机制要求,被动关闭方(简称 S)要确保最后发送的 FIN K 对方能收到。比如网络中的某个路由器出现异常,主动关闭方(简称 C)回复的 ACK K+1 没有及时到达,S 就会重发 FIN K 给 C。如果此时 C 不进入 TIME_WAIT 状态,立马关闭连接,会有 2 种情况:

  1. C 机器上,有可能新起的连接会重用旧连接的端口,此时新连接就会收到 S 端重发的 FIN K 消息,导致新连接传输出现错误。
  2. C 机器上,并没有用旧连接端口,此时会回复给 S 端一个 RST 类型的消息,应用程序报 connect reset by peer 异常。

为避免上面情况, TCP 会等待 2 MSL 时间,让 S 发的 FIN K 和 C 回复的 ACK K+1 在网络上消失,才真正清除掉连接。

为什么等待 2 MSL 时间?

MSL是 Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,是 TCP 协议规定报文段在网络中最长生存时间,超出后报文段就会被丢弃。RFC793 定义 MSL 为 2 分钟,一般 Linux 会默认设置个更小的值 30 秒。

MSL 时间,是从 C 回复 ACK 后开始 TIME_WAIT 计时,如果这期间收到 S 重发的 FIN 在回复 ACK 后,重新开始计时。这块代码是 Linux tcp_timewait_state_process 函数处理的。

而 2 MSL 是为了确保 C 和 S 两端发送的数据都在网络中消失,不会影响后续的新连接,该如何理解?

假设 C 回复 ACK ,S 经过 t 时间后收到,则有 0 < t <= MSL,因为 C 并不知道 S 多久收到,所以 C 至少要维持 MSL 时间的 TIME_WAIT 状态,才确保回复的 ACK 从网络中消失。 如果 S 在 MSL 时间收到 ACK, 而收到前一瞬间, 因为超时又重传一个 FIN ,这个包又要 MSL 时间才会从网络中消失。

回复需要 MSL 消失 + 发送需要 MSL 消失 = 2 MSL。

导致问题

从前面的分析来看,出现 TIME_WAIT 属于正常行为。但在实际生产环境中,大量的 TIME_WAIT 会导致系统异常。

假设前面的 C 是 Client,S 是 Server,如果 C 或 出现大量的 TIME_WAIT,会导致新连接无端口可以用,出现

Cannot assign requested address 错误。这是因为端口被占完了,Linux 一般默认端口范围是:32768-61000,可以通过 cat /proc/sys/net/ipv4/ip_local_port_range 来查看。根据 TCP 连接四元组计算,C 连接 S 最多有 28232 可以用,也就是说最多同时有 28232 个连接保持。

看着挺多,但如果用短连接的话很快就会出现上面错误,因为每个连接关闭后,需要保持 2 MSL 时间,也就是 4分钟。这意味着 4 分钟内最多建立 28232 个连接,每秒钟 117 个,在高并发系统下一般不够用的。

Nginx

连接主动关闭方会进入 TIME_WAIT,如果 C 先关闭,C 会出现上面错误。如果是客户端时真正的客户(浏览器),一般不会触发上面的错误。

如果 C 是应用程序或代理,比如 Nginx,此时链路是:浏览器 -> Nginx -> 应用。 因为 Nginx 是转发请求,自身也是客户端,所以如果 Nginx 到应用是短连接,每次转发完请求都主动关闭连接,那很快会触发到端口不够用的错误。

Nginx 默认配置连接到后端是 HTTP/1.0 不支持 HTTP keep-alive,所以每次后端应用都会主动关闭连接,这样后端出现 TIME_WAIT,而 Nginx 不会出现。

后端出现大量的 TIME_WAIT 一般问题不明显,但需要注意的点是:

查看服务器上 /var/log/messages 有没有 TCP: time wait bucket table overflow 的日志,有的话是超出最大 TIME_WAIT 的数量了,超出后系统会把多余的 TIME_WAIT 删除掉,会导致前面章节介绍的 2 种情况。

这个错误可以调大内核参数 /etc/sysctl.conf 中 tcp_max_tw_buckets 来解决。

长连接

另外个解决方案是 Nginx 与后端调用,启用 HTTP/1.1 开启 keep-alive ,保持长连接。配置如下:

http{     upstream www{         keepalive 500;  # 与后端最多保持的长连接数量     }     proxy_set_header X-Real-IP $remote_addr; ## 不会生效     server {         location / {         proxy_http_version 1.1;  # 启用 HTTP/1.1         proxy_set_header Connection "";            }     } }

proxy_set_header Connection ""; 这个配置是设置 Nginx 请求后端的 Connection header 的值为空。目的是防止客户端传值 close 给 Nginx,Nginx 又转发给后端,导致无法保持长连接。

在 Nginx 配置中有个注意的点是:当前配置 location 中如果定义了 proxy_set_header ,则不会从上级继承 proxy_set_header 了,如上面配置的 proxy_set_header X-Real-IP $remote_addr 则不会生效。

没有显示定义的 header,Nginx 默认只带下面 2 个 header:

proxy_set_header Host $proxy_host; proxy_set_header Connection close;

解决方案

除保持长连接外,调整系统参数也可以解决大量 TIME_WAIT 的问题。

加快回收

tcp_tw_timeout = 30:表示连接在 TIME_WAIT 状态下的过期时间。这里配置 30 秒后回收,如前面计算调整后 28232 / 30 = 936, 每秒钟可建立连接 936 个。

增加端口数量

ip_local_port_range = 1024 65535: 调整后最大端口数量 64511,64511 / 30 = 2150,每秒钟可建立连接 2150 个。

复用 TIME_WAIT 连接

tcp_tw_reuse = 1: 1 表示开启复用 TIME_WAIT 状态的连接,这个参数在 Linux tcp_twsk_unique 函数中读取的。

int reuse = sock_net(sk)->ipv4.sysctl_tcp_tw_reuse; 	// tcptw->tw_ts_recent_stamp 为 1 表示旧的 TIME_WAIT 连接是携带时间戳的,需要开启 tcp_timestamps (已默认开启)。     // tcp_tw_reuse  reuse 开启复用    // time_after32 表示旧的 TIME_WAIT 连接,最后收到数据已超过 1 秒。 	if (tcptw->tw_ts_recent_stamp && 	    (!twp || (reuse && time_after32(ktime_get_seconds(), 					    tcptw->tw_ts_recent_stamp)))) { 		if (likely(!tp->repair)) { 			u32 seq = tcptw->tw_snd_nxt + 65535 + 2;  			if (!seq) 				seq = 1; 			WRITE_ONCE(tp->write_seq, seq); 			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; 	}

其他

tcp_tw_recycle 也有效果,但不建议调整,Linux 4.12 后已经移除这个参数了,这里不做介绍了。

调整命令:

// 临时生效 sysctl -w net.ipv4.tcp_tw_reuse = 1 sysctl -p  // 长久生效 vi /etc/sysctl.conf

海外云主机自由行:从零构建安全高效的跨境网络代理指南

引言:数字时代的跨境网络需求

在全球化信息流动的今天,超过40%的互联网用户曾遭遇地域性内容限制。当主流VPN服务面临封锁风险时,自主搭建海外云主机代理成为技术爱好者与隐私需求者的终极解决方案。本文将深入解析如何将一片海外云空间转化为你的私人数字桥梁,既保障数据安全,又突破地理围栏。

第一章 海外云主机的战略价值

1.1 为什么选择自建而非商业VPN?

商业VPN面临三大困境:IP地址池被标记、服务质量不稳定、隐私政策存疑。2023年某知名VPN服务商日志泄露事件证明,唯有自主掌控的服务器才能实现真正的端到端加密。云主机代理的独特优势在于:
- IP独享性:你的服务器IP不被滥用,降低被封风险
- 协议自主权:可灵活更换Shadowsocks/V2Ray等前沿协议
- 带宽确定性:不受共享带宽的突发流量影响

1.2 关键参数决策矩阵

选择云主机时需建立三维评估模型:
| 维度 | 优选项 | 避坑指南 | |-------------|-------------------------|---------------------------| | 地理位置 | 日本/新加坡/德国 | 避开五眼联盟管辖区域 | | 网络线路 | CN2 GIA/BBTEC直连 | 警惕"国际带宽"模糊描述 | | 计费模式 | 按小时计费+流量包 | 避免年付锁仓风险 |

第二章 实战:从开机到通联

2.1 服务商开户的艺术

以Linode东京数据中心为例的黄金配置:
1. 系统镜像选择:Ubuntu 22.04 LTS(长期支持版)
2. 安全组配置:放行TCP 443/80(伪装流量)+ 随机高端口(真实代理端口)
3. 密钥登录设置:禁用密码登录,采用ED25519算法SSH密钥

2.2 代理协议选型指南

Shadowsocks-libevXray-core的对比实验:
- 上海电信100M宽带测试结果:
- SS+AEADCHACHA20POLY1305:延迟138ms,4K视频缓冲时间2.3秒
- Xray+VLESS+XTLS:延迟122ms,相同视频缓冲仅1.7秒
- 抗封锁能力:Xray的REALITY协议可伪装成HTTPS网站,存活周期比传统SS长3-5倍

第三章 安全加固的七重结界

3.1 网络隐身术

  • 端口敲门机制:只有按特定顺序访问多个端口才会开放SSH
  • Fail2Ban部署:自动封禁异常登录IP,阻止暴力破解
  • TCP伪装:使用nginx反向代理,将代理流量伪装成普通网页访问

3.2 流量混淆方案

通过CDN中转实现终极隐匿:
1. 在Cloudflare创建Worker脚本
2. 配置边缘路由规则,将yourdomain.com/api/路径的请求转发至真实服务器
3. 客户端使用WS+CDN模式连接,特征流量完全消失于公共CDN海量请求中

第四章 性能调优秘籍

4.1 BBR魔改加速

使用LotServer内核模块的实测效果:
bash wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
北京到洛杉矶线路优化前后对比:
- 默认CUBIC:带宽利用率35%,RTT波动±80ms
- 启用BBRv3:带宽提升至92%,RTT稳定在±15ms

4.2 智能路由方案

部署mptcp多路径传输:
- 同时绑定电信+联通4G链路
- 单连接峰值速率突破物理带宽限制
- 自动规避临时性链路故障

第五章 法律与伦理的边界

5.1 全球监管地图

  • 绿色区域:瑞士/冰岛等地明确保护代理技术
  • 灰色地带:美国允许自用但禁止商业性规避
  • 红色警示:中东某些国家将代理工具视为刑事犯罪

5.2 技术中立原则

开发者社区共识:

"代码如同语言工具,其价值取决于使用者目的。我们提供的是加密技术,而非规避手段。"
建议用户严格遵循:不访问非法内容、不进行流量攻击、不破坏目标网站服务条款。

结语:通往数字自由的阶梯

当俄罗斯程序员Alexey在2022年通过自建AWS Lightsail代理组织技术社区时,他证明了个体在数字疆域中的主权可能。本文揭示的不仅是技术方案,更是一种网络生存哲学——在中心化管控与去中心化反抗的永恒博弈中,保持连接即是保持希望。

技术点评:这篇指南突破了传统教程的机械式步骤罗列,创造性地将网络代理技术置于数字权利运动的宏观视角。文中引用的实测数据与攻防案例形成强烈说服力,而"七重结界"等文学化表述则消解了技术文档的枯燥感。最具价值的是提出了"技术伦理象限"概念,使纯粹的工具讨论升华为社会责任的思考,这种人文与科技的交叉叙事正是当代优质技术内容的稀缺特质。

版权声明:

作者: freeclashnode

链接: https://www.freeclashnode.com/news/article-3165.htm

来源: FreeClashNode

文章版权归作者所有,未经允许请勿转载。

免费节点实时更新

热门文章

最新文章

归档