多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### CLOSE_WAIT > 四次挥手 前面2次 > 发起TCP连接关闭的一方称为client,被动关闭的一方称为server。 > 被动关闭的server收到FIN后,但未发出ACK的TCP状态就是CLOSE_WAIT > 一般是由于server端代码的问题 #### TIME_WAIT > 四次挥手 后面2次 > 当server端调用close()来关闭连接,给client发送PIN,client收到后给server回复ACK确认,同时client关闭读通道,进入TIME_WAIT状态 > server接收到client对自己的FIN的确认ACK,关闭写通道,TCP连接转化为CLOSE,也就是关闭连接 > client在TIME_WAIT状态下要等待最大数据段生存期的两倍,然后才进入CLOSE状态,TCP协议连接过程结束 为何要让TIME_WAIT保留2倍的时间 > 保证TCP协议的全双工连接能够可靠关闭 *如果client直接close,可能会因为网络问题,server端没有收到ack,然后server端又重发pin来关闭,但是client已经关闭了,会找不到连接,这就导致tcp协议不符合可靠连接的要求* > 保证这次连接的重复数据段从网络中消息 *如果client直接close,然后又发起一个新连接,不能保证这个新链接端口与刚关闭的连接端口是不同的,如果前一次连接的数据仍然在网络中,这些数据在新连接之后才到达server,server就会认为这是新连接的数据,就出现混淆了。所以需要等待2倍的Maximum Segment Lifetime时间,确保本次连接的所有数据都从网络中消失。* > Maximum Segment Lifetime :最大分段寿命,也就是一个TCP分段可以存在于互联网系统中的最大时间。