当 FIN_WAIT2 时间用完且最后一个 FIN 不是来自另一端时,活动更接近的下一个状态是什么?TIME-WAIT
还是CLOSED
?
我们知道在linux系统中,FIN-WAIT-2可以在文件/proc/sys/net/ipv4/tcp_fin_timeout中设置:man tcp(7)
tcp_fin_timeout (integer; default: 60; since Linux 2.2)
这指定在强制关闭套接字之前等待最终 FIN 数据包的秒数。这严格违反了 TCP 规范,但需要防止拒绝服务攻击。在 Linux 2.2 中,默认值为 180。
TCP_LINGER2(从 Linux 2.4 开始)
孤立的 FIN_WAIT2 状态套接字的生命周期。此选项可用于覆盖文件 /proc/sys/net/ipv4/tcp_fin_timeout 中此套接字的系统范围设置。不要与 socket(7) 级别的选项 SO_LINGER 混淆。此选项不应在旨在可移植的代码中使用。
我不太确定这个 TCP 套接字在FIN_WAIT2
时间用完后会进入的状态,被强制关闭,转移到CLOSED
?还是直接跳入TIME-WAIT
状态?
我做了一个测试:
1:回声 3 > /proc/sys/net/ipv4/tcp_fin_timeout
2 : 对 linux 上运行的 tomcat 进行基准测试
原来很多TIME-WAIT
出现在netstat
堆积中,是不是说FIN_WAIT2
时间用完后,socket就跳进了TIME-WAIT
?
还有一个问题:我改变了这个:
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
正如其他人所说:“重用套接字”,并保留tcp_fin_timeout:3
。但什么都没有改变, TIME-WAIT
只是在积累。与状态中的套接字tcp_tw_reuse
无关,套接字不能重复使用吗?TIME-WAIT
TIME-WAIT
似乎echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
可以减少TIME-WAIT
计数,并将其保持在较低水平,而不必理会负载平衡问题。