首页 > 编程知识 正文

端口状态time wait,linux服务器timewait

时间:2023-05-04 08:23:53 阅读:60220 作者:103

1. TIME_WAIT产生的理由1.1挥手

假设主动关闭连接的一侧为a,被动关闭连接的一侧为BA,调用close (。 协议层发送FIN分组b在接收到FIN分组后返回ACK,进入CLOSE_WAIT状态,a等待对方关闭,进入FIN_WAIT_2状态,此时,a是b的APP应用将关闭操作b 此时,协议层向a发送FIN分组,等待对方的ACK进入LAST_ACK状态; a接受FIN数据包,回复ACK,进入TIME_WAIT状态; 收到确认后,进入关闭状态; 等待33558www.Sina.com/2msl的时间,主动关闭者,退出TIME_WAIT,进入关闭状态; 3358 www.Sina.com/http://www.Sina.com/(maximumsegmentlifetime,“消息最大生存时间”)表示网络上存在任何消息的最长时间超过此时间3358www.Sina.com/(timetolive,“生存时间”)存储ip数据报可以通过的最大路由数,每次处理都会减少一个路由器的值,如果该值为0,则会丢弃数据报,导致

在RFC 793中,MSL规定为2分钟,在linux中默认为如果B没有受到ACK,那么将再次发送FIN包给A,确保连接关闭的可靠性秒。

1.2 TIME_WAIT有什么用? 如果没有TIME_WAIT状态,则活动端关闭直接连接时。 在这两种情况下,处理都有问题。

如果a和b再次建立链接,此时b在上次连接中未收到a的ack,并且重新发送的fin已到来,这将影响新连接。 由于AB之间没有新连接,且b未收到a的ack,因此重新发送的fin可能会到来,从而导致a向b发送RST分组,影响b的其他服务连接。 2. TIME_WAIT危害2.1释放资源的套接字会消耗内存、CPU、文件描述符的数量等。 此外,除非一个连接处于关闭状态,否则此连接不可重用。 除非设置了端口重用。

3 .解决方案3.1更改内核参数net.ipv4.tcp_tw_reuse=1将打开重用。 允许将时间等待套接字重用到新的TCP连接。 默认值为0,处于关闭状态。 net.ipv4.tcp_tw_recycle=1表示打开TCP连接的时间等待套接字的快速回收,默认值为0,表示关闭。 如果启用了net.ipv4.tcp_tw_reuse,则可以主动关闭连接端,并在再次向对方发出连接请求时复用处于TIME_WAIT状态的连接。 系统根据时间戳判断是否是延迟的数据,如果是,则丢弃。

如果启用了net.ipv4.tcp_tw_recycle,则回收时间为RTO (重传时间),而不是2msl,远远小于2msl

3.2不主动关闭插座。 不积极关闭插座,就不会进入TIME_WAIT状态

3.3增加短链路长度的连接从根本上减少了连接关闭的次数,减少了TIME_WAIT状态的发生次数,在高并发系统中非常有效

参照:

[1] TCPIP详细信息卷1 :协议

[2] https://blog.csdn.net/weixin _ 39590058/article/details/105681569

[3] https://blog.csdn.net/fanren 224/article/details/89849276

[4] https://www.Jian Shu.com/p/CD 801 d1b 3147

[5] 《unix网络编程》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。