网络实验

82 阅读1分钟

TIME_WAIT

多发生在主动连接的一方

nc连接一个已监听的端口 python3 -m http.server 9999

netstat -anp|grep 9999   可以看出已经监听了

nc -zv localhost 9999
这个时候,nc 进城已经退出了,再用netstat -anp|grep 9999
可以看到多了一个
tcp        0      0 127.0.0.1:45146         127.0.0.1:9999          TIME_WAIT   -   
这个输出的解释是
nc 主动关闭连接,会立即进入TIME_WAIT状态,不会立即CLOSED,因为,最后发送的ACK包可能没有传到服务端,这个时候服务端会再发送FIN包,目的是为了维系整个状态。
#改系統默认的TIMEOUT时间\
net.ipv4.tcp_fin_timeout=2

#启重用,允许将TIME_WAIT sockets重新用于新的TCP连接 默认为0表示关闭\
net.ipv4.tcp_tw_reuse=1

#开启TCP连接中TIME_WAIT sockets的快速回收 默认为0 表示关闭\
net.ipv4.tcp_tw_recycle=1

CLOSE_WAIT

多发生在服务器端

client  ----发送关闭请求FIN---->  
                                服务端收到FIN状态立即变为CLOSE_WAIT, 并发送ACK包
                                但是应用里并未使用close(被动关闭),导致一直在CLOSE_WAIT状态