当FIN_WAIT2时间用完而最后一个FIN不是来自另一方时,活动近距离的下一个状态是什么? TIME-WAIT
或CLOSED
?
我们知道在linux系统中,可以在文件/ proc / sys / net / ipv4 / tcp_fin_timeout中设置FIN-WAIT-2:man tcp(7)
tcp_fin_timeout(整数;默认值:60;自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
时间用完之后会出现的状态, 强行关闭 ,转移到{{1 }}?或者只是跳进CLOSED
州?
我做了一个测试:
1:echo 3>的/ proc / SYS /净/的IPv4 / tcp_fin_timeout
2:基准测试tomcat在linux上运行
事实证明TIME-WAIT
中出现了很多TIME-WAIT
并且正在积累,这意味着在netstat
时间用完后,套接字跳入FIN_WAIT2
?< / p>
还有一个问题:
我改变了这个:
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
计数,并将其保持在低水平,只留下负载平衡问题。
答案 0 :(得分:0)
如果您查看TCP/IP state diagram,FIN_WAIT_2
转换为TIME_WAIT
。因此,我认为当FIN_WAIT_2
未到达FIN
时,Linux只会在{{1}}超时时转换。