1.time_wait状态是什么

简单来说:time_wait状态是四次挥手中服务器向客户端发送FIN终止连接后进入的状态。

下图为tcp四次挥手过程

可以看到time_wait状态存在于客户端收到服务器Fin并返回ack包时的状态
当处于time_wait状态时,我们无法创建新的连接,因为端口被占用。

2.为什么会有time_wait状态

time_wait存在的原因有两点
1.可靠的终止TCP连接。
2.保证让迟来的TCP报文段有足够的时间被识别并丢弃。

1.可靠的终止TCP连接,若处于time_wait的客户端发送给服务器确认报文段丢失的话,服务器将在此重新发送FIN报文段,那么客户端必须处于一个可接收的状态就是time_wait而不是close状态。
2.保证迟来的TCP报文段有足够的时间被识别并丢弃,linux 中一个TCP端口不能打开两次或两次以上,当客户端处于time_wait状态时我们将无法使用此端口建立新连接,如果不存在time_wait状态,新连接可能会收到旧连接的数据。time_wait持续的时间是2MSL,保证旧的数据可以丢弃,因为网络中的数据最大存在MSL(maxinum segment lifetime)

3.哪一方会有time_wait状态

time_wait状态是一般有客户端的状态。而且会占用端口
有时产生在服务器端,因为服务器主动断开连接或者发生异常

4.如何避免time_wait状态占用资源

如果是客户端,我们一般不用担心,因为客户端一般选用临时端口,再次创建连接会新分配一个端口。除非指定客户端使用某端口,不过一般不需要这么做。

如果是服务器主动关闭连接后异常终止,则因为它总是使用用一个知名服务器端口号,所以连接的time_wait状态将导致它不能重启,不过我们可以通过socket的选项SO_REUSEADDR来强制进程立即使用处于time_wait状态的连接占用的端口。
通过socksetopt设置后,即使sock处于time_wait状态,与之绑定的socket地址也可以立即被重用。

此外也可以通过修改内核参数/proc/sys/net/ipv4/tcp_tw/recycle来快速回收被关闭的socket,从而是tcp连接根本不进入time_wait状态,进而允许应用程序立即重用本地的socket地址。

5.TIME_WAIT状态为什么必须等待2MSL时间

我们假设我的主动关闭方发送的ACK报文是在生命的最后一刻到达对端(即MSL),而就在这个ACK到达之前的一瞬间我们的对端又重发了一个FIN+ACK报文,那么最坏情况下这个报文会在其声明周期的最后一刻到达我们的主动关闭方,即又经过了MSL,所以经过2MSL所有的老的重复分解能够在网络中消失

TIME_WAIT详解相关推荐

  1. TCP四次挥手 2MSL TIME_WAIT详解

    TCP四次挥手 & 2MSL & TIME_WAIT详解 TCP四次挥手流程 各状态解析 2MSL(2倍最大报文段生成时间) 2MSL (Maximum Segment Lifetim ...

  2. TCP TIME_WAIT 详解

    先放上TCP状态转换图 再放上三次握手 然后放上四次挥手 OK,我们发现在四次挥手中出现了TIME_WAIT 状态 1.time_wait状态是什么 简单来说:time_wait状态是四次挥手中ser ...

  3. TCP TIME_WAIT详解

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

  4. TCP三次握手、四次挥手以及TIME_WAIT详解

    前提概述 TCP网络编程中常用的api函数有: socket.bind.listen.accept.recv.send.close.connect 其中socket函数返回一个文件描述符fd,这个fd ...

  5. 网络编程之TIME_WAIT详解

    我们了解了 TCP 四次挥手,在四次挥手的过程中,发起连接断开的一方会有一段时间处于 TIME_WAIT 的状态,你知道 TIME_WAIT 是用来做什么的么?今天我们来详细的介绍一下. TIME_W ...

  6. TCP端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

    参考文章:端口状态 LISTENING.ESTABLISHED.TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

  7. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  8. linux apache两种工作模式详解

    apache两种工作模式详解 刚接触这两个配置时很迷糊,全部开启或全部注释没有几多变化.今天搜索到这么一篇讲得还不错的文章,看了几篇,还是不能完全记住,做一个收藏. 空闲子进程:是指没有正在处理请求的 ...

  9. 一篇文章带你详解 TCP/IP 协议(上)

    本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别 ...

最新文章

  1. 【PCL】基于法线的差异来分割点云
  2. 二叉树镜像,交换左右子树
  3. 2011年 软件所信息安全国家重点实验室复试回忆
  4. 公告牌为什么有些是纸质,有些是电子的
  5. ext的window如何隐藏水平滚动条
  6. php的Apa红灯_macos – 使用自制软件更新php和mysql后的apa...
  7. Openstack概论
  8. Hyper-V上Linux的鼠标驱动
  9. 只需8招,搞定Pandas数据筛选与查询
  10. 微信小程序Demo详解
  11. 在Microsoft Office 2007中检测和修复应用程序
  12. 揭开智慧校园的神秘面纱
  13. Java根据模版生成word文档_java+根据word模板生成word+文档
  14. Android开发自定义短视频系统源码全局悬浮按钮
  15. 生活-痘痘告诉你,身体哪里生病了
  16. Hbase篇(7)-Region的分裂
  17. 怎么设置系统消息免打扰,看这里就够了,WIN10系统如何设置系统消息免打扰
  18. Matlab中的persistent变量
  19. 中国式家长——旅行者困境
  20. pdf怎么压缩到又小又清晰?

热门文章

  1. sqlserver2008 服务 连接失败 -服务器名称如何写!!
  2. 向上累积频数怎么算_累计频数怎么求(怎样计算频数和频率)
  3. 【第5篇】人工智能(AI)语音测试原理和实践
  4. DETR与Deformable DETR小结
  5. caffe ssd 测试demo,检测单张图片
  6. 弘辽科技:拼多多活动布局三大招!
  7. 深度学习-人工神经网络网络
  8. EXP4恶意代码分析 20154306 刘宇轩
  9. Git 之二 架构、工作流程、.git 目录文件
  10. 软件测试——linux操作(目录管理、文档编辑)