四次挥手

  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状态时可以重用端口。

关于timewait状态相关推荐

  1. Linux TCP Finwait2/Timewait状态要义浅析

    我讨厌TCP.但是我的工作中总是要接触TCP! 近期三四个礼拜,接连碰到三三两两TCP的问题,这些都无关拥塞控制,这些都是状态机方面的问题,但无论怎样,我是非常讨厌的,以至于恶心,我释放大量的感情色彩 ...

  2. TIMEWAIT状态

    目录 TIMEWAIT是`友好的` `大量`TIMEWAIT在某些场景中导致的`令人头疼的业务问题` 可行而且必须存在,但是`不符合原则的解决方式` 如何`尽量并合理地处理`TIMEWAIT过多    ...

  3. 为什么TIME-WAIT状态必须等待2MSL的时间

    为什么A在TIME-WAIT状态必须等待2MSL的时间呢? 这有两个理由. 第一,为了保证A发送的最后一个ACK报文段能够到达B.这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对 ...

  4. Time-wait状态(2MSL)一些理解

    2019独角兽企业重金招聘Python工程师标准>>> 1. 编写TCP/SOCK 服务时,SO_REUSEADDR到底是什么意思? 这个套接字选项通知内核,如果端口忙,但TCP状态 ...

  5. TCP TimeWait状态详解(比较全)

    转载自:http://blog.chinaunix.net/uid-20384806-id-1954363.html TIME_WAIT状态 TCP要保证在所有可能的情况下使得所有的数据都能够正确被投 ...

  6. Time-wait状态(2MSL)

    本文转自:https://blog.csdn.net/overstack/article/details/8833894,尊重原创 三次握手四次挥手图: time_wait之后会等2msl. 什么是2 ...

  7. Linux 查看tcp 请求 中 的各个 状态 数据 ,如timewait

    netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' ...

  8. 为什么TCP的TIME_WAIT状态要保持2MSL?

    TIMEWAIT状态也称为 2MSL等待状态. 每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime). 它是任何报文段被丢弃前在网络内的最长时间. ...

  9. TCP连接状态详解及TIME_WAIT过多的解决方法

    TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. TCP建立连接的三次握手过程,以及关闭连接的四次握手过程. 1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务 ...

最新文章

  1. 在Oracle Linux 7上通过官方Repo在线安装SQL Server 2017
  2. oracle时间类型转化成java对象_Oracle数据库date类型与Java中Date的联系与转化
  3. eclipse软件有时会退出弹出一串错误弹框_修复iPhone上的iOS 13软件更新失败错误...
  4. lambda 函数式编程_Java 8 Lambda表达式的函数式编程– Monads
  5. 主板电源开关接口图解_组装电脑时主板跳线如何接?DIY装机主板接线教程
  6. poj 1986 Distance Queries LCA
  7. PAIP.FLEX与JAVA数据对应关系.txt
  8. C语言开发环境搭建及调试
  9. zipf定律 齐普夫定律
  10. Mac 下载破译版本 secureFX 和 secureCRT
  11. Golang环境windows 设置 GOROOT 和 GOPATH
  12. Next.js中通过容联云通讯实现手机验证码收发
  13. Python爬取天堂网图片
  14. IDEA报错:Error:java: JDK isn‘t specified for module ‘work-flow‘
  15. 阿里云天池《“AI Earth”人工智能创新挑战赛》萌新体验
  16. lcd调色板工作原理详解
  17. Linux里解压zip报错和安装jdk遇到的问题,安装步骤
  18. 基于go语言的史上最流弊的学生成绩管理系统
  19. 一年200多天不上网 看远望7号船员怎么玩抖音
  20. 微信小程序云开发教程-互联网软件产品开发流程和团队分工

热门文章

  1. 原生js自动完成 [转]
  2. pci串口驱动安装失败_TSC TTP-243E Pluse装LTP并口驱动无法安装
  3. 二叉树线索化示意图_103-线索化二叉树思路图解
  4. 4模型导出_项目模型规范总结 游戏模型制作的注意事项
  5. ensp删除静态路由命令_eNSP配置静态路由
  6. java web 调用hadoop_Java及Web程序调用hadoop2.6
  7. 页面自动获取焦点影响页面切换效果_ReactIndex - 让文件夹index页面变得更有实用性 (替换传统Web服务器index页)...
  8. php5.3.28安装,安装php-5.3.28 时问题
  9. axure按钮切换颜色_如何用Axure画出Web产品的列表组件:基础画法
  10. oracle java rmi 漏洞,Oracle Java SE Java运行时环境RMI子组件远程漏洞(CVE-2011-3556)