问题场景
某日线上登录出现故障,排查日志发现HttpClient请求时随机分配到的端口被占用,导致第三方登录拉取信息时无法拉取成功,错误如下:
java.net.BindException: Address...,导致多余的请求还在队列里就被对方关闭了。...对于四次挥手过程中,当主动方接收到被动放的关闭确认信号FIN后,主动方会回复一个ACK信号,然后会进入TIME_WAIT状态,此时会等待2MLS,在Linux中也就是60s,因此相对上述2000多个活跃...然后为什么TCP主动方关闭后需要等待2MLS?...因为TCP是可靠的通信,在主动方回复ACK时如果由于网络问题该包发送失败,那么被动方就会进行FIN重传,此时重传会遇到两个场景:
主动方已关闭,旧的TCP连接已经消失,那么系统只能回复RST包.