转 FIN_WAIT_2 tcp状态多原因剖析和解决

 父文章 通过异常流程深入了解 tcp,状态_个人渣记录仅为自己搜索用的博客-CSDN博客

a.客户端状态迁移 CLOSED->SYN_SENT->ESTABLISHED (ps:主动结束连接)->FIN_WAIT_1->FIN_WAIT_2 (如果另一方程序健壮,会发送fin过来 )->TIME_WAIT->CLOSED

b.  服务器状态迁移CLOSED->LISTEN->SYN收到 ->ESTABLISHED->CLOSE_WAIT(如果本程序健壮,会发送fin给另一方 )->LAST_ACK->CLOSED

注意:该状态流转取决于程序健壮,不会忽略关闭连接。

time_wait的状态 2msl解释 什么是2MSL http://blog.csdn.net/xiaofei0859/article/details/6044694

程序非健壮下例子:

   服务端端口号9090

服务端关闭但客户端不关闭连接:

➜  ~ netstat -an | grep 127.0.0.1

tcp4       0      0  127.0.0.1.9090         127.0.0.1.63264        FIN_WAIT_2

tcp4       0      0  127.0.0.1.63264        127.0.0.1.9090         CLOSE_WAIT

客户端先关闭,服务端不关闭:

tcp4       0      0  127.0.0.1.9090         127.0.0.1.63697        CLOSE_WAIT
tcp4       0      0  127.0.0.1.63697        127.0.0.1.9090         FIN_WAIT_2

FIN_WAIT_2状态很多的case:

     服务端关闭,但客户端没有关闭。

解决:

    1.服务端程序读到 -1时,应该关闭连接,这样服务端就会发起fin 指令。

          进程关闭也会自动发fin 指令。

    2. tcp协议里没有针对这个状态设置超时时间,但linux服务器实现了超时回收,

         tcp_fin_timeout ,默认是60秒, 可通过 /sbin/sysctl -a | grep timeout 查看

网络超时:socket本身有 重连控制,网络拥塞控制。

会重发。

    tcp发送数据 tcp packet,会等待ack,如果等不到,会重复发数据。连续发送多遍。这个重试不需要上层业务去关心。

默认是15次,

From Linux's  tcp.7 man page:

   tcp_retries2 (integer; default: 15; since Linux 2.2)
          The maximum number of times a TCP packet is retransmitted in
          established state before giving up.  The default value is 15, which
          corresponds to a duration of approximately between 13 to 30 minutes,
          depending on the retransmission timeout.  The RFC 1122 specified
          minimum limit of 100 seconds is typically deemed too short.

  参考文章:   http://kimnote.com/2013/07/linux-default-socket-timeout/

                    http://blog.csdn.net/mei922/article/details/4801858   TCP连接状态详解

                    http://blog.chinaunix.net/uid-23849526-id-287997.html

                 https://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/tcpvariables.html

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值