No buffer space available
今天碰到一个登录接口异常的问题,远程服务器发现日志报错No buffer space available,今天来分析下问题原因
理解这个问题原因我们必须知道tcp协议4次挥手的原理
tcp协议4次挥手的步骤
释放一个TCP连接,需要客户端和服务器总共发送4个包。客户端和服务器端均可主动发起挥手动作。在socket编程中,任何一方执行close()操作即可产生挥手操作。 这里以服务端首次挥手举例
- 第一次挥手
服务端发送FIN=1和seq(序号)=x到客户端告诉客户端我要断开链接了,自己没有数据发送了,但是仍然可以接受数据
进入FIN-WAIT-1状态 - 第二次挥手(ACK=1,ack=x+1,seq=v)
客户端确定了服务端的FIN包,发送一个确认包,表明自己接受到了服务端关闭链接的请求,但还没有准备好关闭连接
发送完毕后进入CLOSE_WAIT状态,服务端受到这个确定包之后进入FIN_WAIT_2状态,等待服务端关闭连接 - 第三次挥手(FIN=1 seq=y)
客户端准备好关闭连接时,向服务端发送结束连接请求,FIN置为1
发送完毕后,客户端进入LAST_ACK状态,服务端接受到这个确认包之后进入FIN_WAIT状态,等待服务端关闭连接 - 第四次挥手(ACK=1,ack&