本文目录导读:

net.ipv4.tcp_fin_timeout 这个参数控制的是 TCP 连接在 FIN-WAIT-2 状态下的超时时间。
要理解它的超时机制,必须先搞清楚它在 TCP 四次挥手过程中的具体位置和逻辑:
核心角色:FIN-WAIT-2 状态
当客户端(主动关闭方)发送 FIN 并收到服务端(被动关闭方)的 ACK 确认后,客户端进入 FIN-WAIT-2 状态。
- 此时的状态:客户端已经不再发送数据,但理论上仍可以接收来自服务端的剩余数据(半关闭状态)。
tcp_fin_timeout的作用:它规定了客户端在这个FIN-WAIT-2状态下最多能等待多长时间,如果超时,内核会自动关闭这个连接。
具体的超时机制(分两种情况)
tcp_fin_timeout 并不是所有场景下都会触发,它的行为取决于服务端(被动关闭方)的后续动作:
服务端正常发送 FIN(正常关闭)
- 客户端发送
FIN-> 进入FIN-WAIT-1。 - 服务端回复
ACK-> 客户端进入FIN-WAIT-2,此时计时器开始计时(时长 =tcp_fin_timeout的值)。 - 服务端处理完剩余数据后,发送自己的
FIN。 - 客户端收到
FIN并回复ACK-> 进入TIME-WAIT状态。- 在这种情况下,
tcp_fin_timeout的计时器会被正常终止,连接不会因为该参数超时。它并未发挥作用。
- 在这种情况下,
服务端不发送 FIN(连接半开/挂起/异常)
- 客户端发送
FIN-> 进入FIN-WAIT-1。 - 服务端回复
ACK-> 客户端进入FIN-WAIT-2,计时器开始计时。 - 服务端因为以下原因一直不发送它的
FIN:- 程序 Bug,未正确关闭 socket。
- 客户端和服务端之间的网络中断(如网线拔了),但未触发 RST。
- 服务端进程挂死(如死循环、OOM Kill 前未关闭连接)。
- 客户端等待
tcp_fin_timeout秒(默认通常为 60 秒)后,内核判断超时,会直接丢弃这个连接,资源被回收。tcp_fin_timeout发挥了作用 —— 避免了客户端永远卡在FIN-WAIT-2状态。
关键点与副作用
- 默认值:通常是 60 秒(不同内核版本可能为 60 或 0,Linux 2.4 后默认 60)。
- 调小风险:如果你将
tcp_fin_timeout设置得很小(5 秒),- 如果服务端只是网络暂时抖动或处理慢了一点点,客户端就会强行关闭连接。
- 后果:连接被意外截断,服务端可能还在发送数据或等待客户端 ACK,造成数据丢失或服务端
LAST-ACK状态堆积。
- 调大风险:设置得很大(300 秒):
- 如果一个服务端进程崩溃后,大量被其持有的连接会卡在
FIN-WAIT-2状态。 - 后果:客户端上会积累大量半开连接,耗尽文件描述符和内存资源。
- 如果一个服务端进程崩溃后,大量被其持有的连接会卡在
与 TIME-WAIT 的区别
很多人会混淆这两个参数:
| 参数 | 控制的状态 | 持续时间 | 谁在等 | 为啥要等 |
|---|---|---|---|---|
tcp_fin_timeout |
FIN-WAIT-2 | 可配置(默认 60s) | 主动关闭方 | 等待被动关闭方发送它的 FIN |
tcp_tw_reuse / tcp_tw_recycle(已废弃) |
TIME-WAIT | 固定 2*MSL(约 60s) | 主动关闭方 | 确保老的数据包在网络中消失 |
- 一句话总结:
FIN-WAIT-2超时 = 你(客户端)在等对方(服务端)主动说再见。TIME-WAIT超时 = 你(客户端)在等网络上的旧包彻底消失。
如何检查和设置
# 查看当前值 sysctl net.ipv4.tcp_fin_timeout # 临时修改(例如改为 30 秒) sysctl -w net.ipv4.tcp_fin_timeout=30 # 永久修改(在 /etc/sysctl.conf 或 /etc/sysctl.d/ 下添加) echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf sysctl -p
它怎样超时?
net.ipv4.tcp_fin_timeout 的超时行为是:当客户端主动关闭连接后,进入 FIN-WAIT-2 状态,若对方(服务端)没有在规定时间内发送它的 FIN 包,内核会在超时后将此连接强制销毁(关闭),释放系统资源。 这是一个兜底保护机制,防止因对端异常导致的连接无限挂起。
标签: tcp_fin_timeout 超时机制
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播