TIME_WAIT状态的小总结

TCP建立连接和关闭的状态图
TIME_WAIT状态存在的原因:
1、保证TCP连接可靠的终止
如果用于确认报文段6的报文段7丢失,那么服务器将重发结束报文段,因此客户端要停留在某个状态来处理重复收到的结束报文段,否则,客户端以复位报文段来回应服务器,服务器则将认为这是一个错误,因为它期望的是报文段7那样的报文段
2、保证让迟来的TCP报文段有足够的时间被识别并丢弃
(1)一个TCP端口不能被重复打开多次,如果不存在TIME_WAIT的状态,应用程序能创建一个与刚结束的连接相似的连接(相似是指IP,端口都相同),新的连接可能接收到原来连接的携带原应用程序数据迟到的报文段,这显然是不应该发生的
(2)TCP报文端最大的生存时间是MSL,所以TIME_WAIT坚持的时间是2MSL,能够保证两端连接上尚未收到的、迟到的报文段都已经消失
如何避免TIME_WAIT状态:
首先服务器可以设置SO_REUSEADDR套接字选项来通知内核,如果端口忙,但TCP连接位于TIME_WAIT状态时可以重用端口。在一个非常有用的场景就是,如果你的服务器程序停止后想立即重启,而新的套接字依旧希望使用同一端口,此时SO_REUSEADDR选项就可以避免TIME_WAIT状态。

猜你喜欢

转载自blog.csdn.net/wjh814/article/details/80957282