FIN_WAIT_2 tcp状态多原因剖析和解决
2016-03-14 20:54
676 查看
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
服务器端主动关闭连接, 产生的TIME_WAIT状态为什么会占用服务端大量端口?
程序非健壮下例子:服务端端口号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
相关文章推荐
- static_cast < type-id > ( expression ) http://blog.csdn.net/moruihong/article/details/7712260
- HTTP multipart/form-data格式之文件上传
- Volley源码学习(二):网络请求处理,HurlStack类,BasicNetwork类,ByteArrayPool,PoolingByteArrayOutputStream
- 网络编程_TCP_Socket通信_聊天室_私聊_构思_实现JAVA193-194
- 关于Eclipse使用OkHttp
- HTTP协议状态码详解
- 深入分析 Java 中的中文编码问题 (文章来自网络)
- 网络编程TCP总结及实践-C语言
- tcp简单传输过程分析
- C#成魔之路<14> 网络编程技术(2 )System.Net.Sockets命名空间
- HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 使用Reachability网络监测
- 0915-多线程 网络开始
- 黑马程序员-Java网络编程
- Linux常用网络命令
- com.android.volley 里面网络请求的使用
- Android统计网络流量
- 网络编程之僵尸进程
- okhttp 的使用
- HttpClient的get请求