博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于time_wait状态的理解
阅读量:5105 次
发布时间:2019-06-13

本文共 926 字,大约阅读时间需要 3 分钟。

TIME_WAIT状态之所以存在,是为了保证网络的可靠性

有以下原因:

1.为实现TCP全双工连接的可靠释放

    当服务器先关闭连接,如果不在一定时间内维护一个这样的TIME_WAIT状态,那么当被动关闭的一方的FIN到达时,服务器的TCP传输层会用RST包响应对方,这样被对方认为是有错误发生,事实上这只是正常的关闭连接工程,并没有异常

2.为使过期的数据包在网络因过期而消失

   在这条连接上,客户端发送了数据给服务器,但是在服务器没有收到数据的时候服务器就断开了连接
现在数据到了,服务器无法识别这是新连接还是上一条连接要传输的数据,一个处理不当就会导致诡异的情况发生

下面讲讲大量的TIME_WAIT产生需要的条件:

1.高并发

2.服务器主动关闭连接

如果服务器不主动关闭连接,那么TIME_WAIT就是客户端的事情了

问题1:如果服务器端确实存在大量的TIME_WAIT,那么会导致什么问题呢?

问题2: 首先先明确TIME_WAIT状态占用的到底是什么?

被占用的是一个五元组(协议,本地IP,本地端口,远程IP,远程端口)

对于Web服务器,协议是TCP,本地ip也只有一个,端口一般是80或者433或8080(固定的),只剩下远程IP和远程端口可用了,如果远程IP相同的话,就只有远程端口可用了,远程端口只有几万个,所以当同一客户端向服务器建立了大量连接的话,可用的五元组会耗尽导致问题

现在我们知道了大量的TIME_WAIT会占用大量的五元组

那么五元组什么时候会耗尽呢?

当客户端通过应用层的负载均衡代理到服务器导致进入服务器的ip地址只有几个的话,可能会导致五元组耗尽!

  

产生大量TIME_WAIT状态的解决办法:

解决方法1:服务器不主动关闭连接,那么这个问题就是客户端应该解决的了~(TIME_WAIT将不会产生)

解决方法2:增加客户端IP(一般客户端IP少都是通过应用层的负载均衡到达服务器的)(五元组将不会耗尽)

解决方法3:设置允许地址重用,这样每次bind的时候,如果五元组正在使用,bind就会把五元组抢过来(不安全

转载于:https://www.cnblogs.com/yinbiao/p/10945836.html

你可能感兴趣的文章
C语言课程学习的总结
查看>>
BZOJ 1304: [CQOI2009]叶子的染色
查看>>
POJ 2914 Minimum Cut
查看>>
数据库设计的三大范式
查看>>
数组元素的填充与替换、排序和复制
查看>>
gdb中信号的处理[转]
查看>>
学习Javascript闭包(Closure)
查看>>
LeetCode【709. 转换成小写字母】
查看>>
toString()和toLocaleString()有什么区别
查看>>
【mybatis】学习笔记之conf.xml与mapper.xml配置
查看>>
Python基础学习Day3 数据类型的转换、int、str、bool、字符串的常用方法、for循环...
查看>>
Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked...
查看>>
Android中在布局中写ViewPager无法渲染出来的问题
查看>>
简单shellcode编写
查看>>
centos7配置yum源
查看>>
反射实例化不同类型的实例
查看>>
servletConfig和ServletContext 以及servletContextListener介绍
查看>>
20175236 2018-2019-2 《Java程序设计》第六周学习总结
查看>>
小数据池.深浅拷贝.集合
查看>>
??,int?
查看>>