欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是网络协议方面的经验知识教程:TCP IP之TIME,下面是详细的分享!
TCP IP之TIME
TCP IP之TIME_WAIT状态原因简析
前段时间碰到一个服务器挂死问题,原因是由于服务器上的TCP连接数过多导致程序无法新建SOCKET连接,最后该问题解决了。中间在定位问题的时候查看但是操作系统上的TCP连接数,有几百个连接处于TIME_WAIT状态,这个TIME_WAIT到底是表示什么意思呢?
于是重新查看了下TCP协议,终于理清了,这里记录一下。下面的是TCP IP的状态变迁图:

从中可以看得出,TCP在建议一个连接后到处于TIME_WAIT状态有三种情况,但无论是那种情况一定是发起了主动关闭,并且已经收到了对方的FIN,这时候进入了TIME_WAIT 状态。TIME_WAIT状态的时间是2倍的MSL(最大生存时间),在TIME_WAIT状态TCP连接实际上已经断掉,但是该插口又不能被新的连接实例使用。这种情况一般都是程序中建立了大量的短连接,而操作系统中可以使用端口使用做了限制,那么非常容易出现连接数占满的异常(比如java中的java.net.SocketException No buffer space available (maximum connections reached?异常)。可以通过修改TcpTimedWaitDelay的值缩短TIME_WAIT状态时间。
那么为什么需要TIME_WAIT状态呢?一个重要的原因就是防止回给对方FIN的ACK丢失。由于服务端并不会对该ACK做确认,因此只能等待一段时间寄希望于服务端收到,如果服务端没有收到对其FIN的确认会继续发一个FIN,这样客户端还有机会继续回一个ACK。另外一个原因是防止上一次连接中迟到的数据包影响新的连接,而在TIME_WAIT状态中这些包会被丢弃。
以上就是关于TCP IP之TIME的网络协议知识分享,更多电脑教程请移步到>>电脑教程。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
