在TCP关闭连接的4次握手中,主动关闭的一方在发送最后一个ack后,发起关闭的一方就会进入TIMEWAIT状态,这里要注意一点,不仅客户端能发起关闭,服务器端也能发起关闭请求。当服务器上出现TIMEWAIT的话,就说明是服务器端先发起了关闭连接的请求。
TIME_WAIT存在的原因: 当主动发起关闭请求的一方在发送完最后的ack后给被动关闭一方后,不能保证这个ack能够被被动一方接收,所以如果在ack发送失败的情况下,被动一方将再重新发一次fin给主动一方,如果主动一方直接进入CLOSED状态的话,就不能接收这个重发的fin包了,导致连接不能正常关闭.就会有一个飘着的没有关闭的数据连接,而等待了2msl后,这些没有正常关闭的数据连接都会丢弃掉
TIME_WAIT的时间是2MSL,缺省为240秒(4分钟)
查看端口状态命令:
netstat -antp
tcp状态解释:
1 2 3 4 5 6 7 8 9 10 11 |
LISTEN:监听端口并接收新连接,例如监听80端口 SYN-SENT:再发送连接请求后等待匹配的连接请求,例如客户端发送了一个syn-sent给服务器端,等待服务端响应 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认,例如服务端收到了客户端的syn-sent数据包,同时自己发送了一个syn包给客户端,等待客户端的响应 ESTABLISHED:代表一个打开的连接,例如客户端已经和服务端连接成功且已经开始传输数据 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认,例如发起主动关闭的一方在发送完fin数据包后,会进入FIN-WAIT-1状态 FIN- WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对 连接中断的确认 LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT:等待足够的时间以确保远程TCP接 收到连接中断请求的确认 CLOSED:没有任何连接状态 |
