首页 > 关于timewait状态

关于timewait状态

image

四次挥手

  1. 主动关闭连接的一方,调用close,协议层发送FIN包,在TCP报头的FIN字段设置为1,意思是我要和你断开链接,主动关闭连接的一方进入到了FIN_WATI_1状态
  2. 被动关闭的一方收到了FIN包之后,协议层回复ACK包,在他的TCP报头中将ACK设置为1,表示收到了对方的关闭连接请求,被动 的一方进入到了CLOSE_WAIT状态;主动关闭的一方收到了被动关闭一方的响应,等待对方关闭,主动关闭的一方进入到了FIN_WAIT_2状态;

    这里解释一下,为什么被动关闭的一方收到主动关闭一方的FIN包之后进入的状态是CLOSE_WAIT状态呢,因为此时是传输层,传输层要等待上层的close操作
  3. 被动关闭的一方在完成所有的数据传输之后,调用 close操作,此时发送FIN包,在TCP报头中将FIN字段设置为1,表示我要和你断开连接,等待对方的ACK,此时被动关闭的一方进入到了LAST_ACK状态
  4. 主动弄关闭的一方,收到了对方的FIN包之后,回复了ACK包,主动关闭的一方进入到了TIME_WATI状态,而被动关闭的一方进入到了CLOSED状态
  5. 主动关闭的一方等待了2MSL时间,结束TIME_WATI状态,进入了 CLOSED状态

为什么会有TIME_WAIT状态呢???

他的出现主要是为了解决网络丢包和网络不稳定所带来的其他问题:

1. 防止前一个连接的延迟数据包或者是丢失重传数据包被下一个连接使用,可能出现这样一种情况,用户在浏览器访问一个网站的时候,他的IP和端口号假设是192.168.3.2:8080,当用户再次在在浏览器中访问这个网站的时候,使用的IP和端口号恰巧还是192.168.3.2:8080,这个时候延迟数据或者是丢失重传的数据就会被新的 连接错误使用了

2. 防止最后传输的ACK包没有被对方接受,如果被动关闭的一方给主动关闭的一方发送了FIN,此时被动关闭的一方进入到了LAST_ACK状态,主动关闭连接的一方收到请求之后,回复ACK包,但是ACK丢失了,此时被动关闭的一方一直停留在LAST_ACK状态,被动方就会重发FIN包

如果TIME_WATI状态的很短,或者是没有这个状态,如果此时又新建立了一次连接,刚好这个连接是上次使用过的ip和port,这个时候就会收到错误连接的包,连接不成功

如何查看当前有timewait状态有哪些

netstat -n | awk '/^tcp/ {++S[$NF]} END { for(a in S) print a, S[a]}'  

TIME_WAIT 814

CLOSE_WAIT 1

FIN_WAIT1 1

ESTABLISHED 634

SYN_RECV 2

LAST_ACK 1

服务器timewait状态问题

Linux能够分配的文件描述符是有限的,服务器需要处理网络的数量巨大的请求,如果存在大量的timewait状态状态,势必会造成系统的资源浪费,甚至是服务宕机。因为服务器是需要客户端建立连接的,通过ip+port的方式,可以理解为是端口号处于timewait状态。服务器可以设置SO_REUSEADDR套接字选项来通知内核,如果端口忙,但TCP连接位于TIME_WAIT状态时可以重用端口。

更多相关:

  • 我试图用Tkinter制作一个简单的GUI,它使用Matplotlib生成大量绘图并将它们保存到硬盘上。在附件是一个简单的代码,但是在保存了所有绘图之后,Tkinter GUI关闭,脚本停止。我想这个问题可能与plt.关闭(),因为当我删除plt.关闭(),GUI窗口不再关闭,但毫不奇怪,内存很快就会被填满,直到整个程序崩溃。在而不是...

  •    在TestNG运行自动化测试用例的时候,浏览器FireFox正确打开,可是在测试用例运行完成后,我调用的是webdriver.quit()关闭程序的,结果却报以下错误:    Sep 25, 2014 4:19:32 PM org.openqa.selenium.os.UnixProcess$SeleniumWatchDog d...

  • WindowsForm里一个Application.Exit();方法就可以关闭应用程序,释放掉资源。 WPF里Application类没有该方法,但是有一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多: 在WPF应用程序的关闭是有ShutdownMode属性设置,具有3中枚举类型的值: 1)OnLastWindowClo...

  • 2019独角兽企业重金招聘Python工程师标准>>> tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854   0x4745 为"GET"前两个字母"GE" 0x4854 为"HTTP"前两个字母"HT" 说明: 通常情况下:一个正常的TCP连...

  • 关于如何在有噪声的数据中进行状态估计的问题的理解,状态估计的问题是指在运动和观测方程中,通常假设两个噪声ωiomega_i和υk,jupsilon_{k,j}满足零均值的高斯分布, xk=f(xk−1,uk)+ωkx_k=f(x_{k-1},u_k)+omega_k其中ωk→N(0,Rk)omega_k ightarro...

  • 强化学习(英语:Reinforcement learning,简称RL)是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。这个方法具有普适性,因此在其他许多领域都有研究,例如博弈...

  • 文章目录PG 的状态机和peering过程1. PG 状态机变化的时机2. pg的状态演化过程3. pg状态变化实例讲解3.1 pg状态的管理结构3.2 数据的pg状态变化过程3.2.1 NULL -> initial3.2.2 initial -> reset -> Started3.2.3 Started(start) ->St...

  • 什么是状态模式? 定义:将事物内部的每个状态分别封装成类,内部状态改变会产生不同行为。 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 何时使用:代码中包含大量与对象状态有关的条件语句。 如何解决:将各种具体的状态类抽象出来。 应用实例: 1、打篮球的时候运动员可以有正常状态、不正常状态和超...

  • 别小看这个功能, 感觉在写一些技术 Blog 的情况下还是挺有用的.   打开QQ拼音: 输入法设置->基本设置->初始状态->中文状态下使用英文标点.  转载于:https://www.cnblogs.com/qrlozte/p/4904087.html...