1

当 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-WAITTIME-WAIT

似乎echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle可以减少TIME-WAIT计数,并将其保持在较低水平,而不必理会负载平衡问题。

4

1 回答 1

0

如果您查看TCP/IP 状态图,则FIN_WAIT_2转换为TIME_WAIT. 所以我想当没有到达时,Linux 只是在FIN_WAIT_2超时时转换。FIN

于 2014-09-02T17:17:20.190 回答