高并发中负载均衡器临时端口耗尽问题
https://www.maideliang.com/index.php/archives/48/
1. 对于tcp请求来说,tcp的客户端服务端概念和http的不同,请求双方,哪边关闭请求,哪边就是tcp客户端,另一边就为服务端。
2、tcp的一个链接由4个值确定,源ip、源端口、目标ip、目标地址。
tcp状态图中有一个TIME_WAIT状态,也叫2MSL状态,该状态是为了保证在tcp客户端发给tcp服务端最后一个ACK能顺利到达的一个等待状态。若没有TIME_WAIT状态,tcp客户端将直接进入CLOSED 状态,但有时由于网络原因,ACK 响应丢失,tcp服务端收不到 ACK,将重发FIN,CLOSED 状态的tcp客户端将返回RST ,而不是ACK。将导致tcp服务器异常。
也就是为了这个原因,tcp的客户端将会把连接保留在2MSL状态一段较长的时间。在这段时间里等待重发的FIN。这里需要注意的是,在2MSL状态的连接是不可以被重新使用。
那么什么是2MSL状态呢?
请看下图,这是关于TCP关闭连接时的握手序列:
上边TCP状态图中有一个TIME_WAIT状态,就是所谓的2MSL状态。
MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。
参考
https://www.cnblogs.com/jimoliunian/p/13896263.html
使用 HAProxy 负载均衡300k并发tcp连接
https://www.sundayle.com/haproxy-optimization
haproxy TCP源端口耗尽问题
http://blog.sina.com.cn/s/blog_704836f40101jv9h.html
HAProxy, High MySQL Request Rate and TCP Source Port Exhaustion
https://www.haproxy.com/blog/haproxy-high-mysql-request-rate-and-tcp-source-port-exhaustion
新浪微博开放平台链接耗尽的情况分析
https://www.iteye.com/blog/go12345-1798119