先放上TCP状态转换图

再放上三次握手

然后放上四次挥手

OK,我们发现在四次挥手中出现了TIME_WAIT 状态

1.time_wait状态是什么
简单来说:time_wait状态是四次挥手中server向client发送FIN终止连接后进入的状态。

上面图为tcp四次挥手过程
这里写图片描写叙述
能够看到time_wait状态存在于client收到serverFin并返回ack包时的状态
当处于time_wait状态时,我们无法创建新的连接,由于port被占用。

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

1.可靠的终止TCP连接,若处于time_wait的client发送给server确认报文段丢失的话,server将在此又一次发送FIN报文段,那么client必须处于一个可接收的状态就是time_wait而不是close状态。
2.保证迟来的TCP报文段有足够的时间被识别并丢弃,linux 中一个TCPport不能打开两次或两次以上。当client处于time_wait状态时我们将无法使用此port建立新连接,假设不存在time_wait状态,新连接可能会收到旧连接的数据。

time_wait持续的时间是2MSL,保证旧的数据能够丢弃。由于网络中的数据最大存在MSL(maxinum segment lifetime)

3.哪一方会有time_wait状态
time_wait状态是一般有client的状态。

并且会占用port
有时产生在server端,由于server主动断开连接或者发生异常

4.怎样避免time_wait状态占用资源
假设是client,我们一般不用操心,由于client一般选用暂时port。再次创建连接会新分配一个port。

除非指定client使用某port,只是一般不须要这么做。

假设是server主动关闭连接后异常终止。则由于它总是使用用一个知名serverport号,所以连接的time_wait状态将导致它不能重新启动。只是我们能够通过socket的选项SO_REUSEADDR来强制进程马上使用处于time_wait状态的连接占用的port。
通过socksetopt设置后,即使sock处于time_wait状态,与之绑定的socket地址也能够马上被重用。

此外也能够通过改动内核參数/proc/sys/net/ipv4/tcp_tw/recycle来高速回收被关闭的socket,从而是tcp连接根本不进入time_wait状态,进而同意应用程序马上重用本地的socket地址。
TCP 状态迁移过程
LISTEN:服务端已经启动一个socket,其状态处于监听状态,等待客户发起请求连接。
ESTABLISHED:客户端和服务端经过三次握手建立,两个方向上连接状态都建立,状态置为ESTABLISHED
客户端状态变迁:(主动端)
FIN_WAIT_1: 发送FIN给服务端口。
FIN_WAIT_2:收到服务端的ACK报文
TIME_WAIT :收到服务端发过来的FIN报文,发送ACK报文给服务端口。主动关闭连接端,接收到服务(TIME_WAIT是主动端关闭)之后进入2MSL时间的等待
CLOSE:2MSl过后,关闭进入初始化状态。
服务端状态变迁:(服务端)
CLOSE_WAIT:收到客户端FIN报文,给客户端发送ACK状态后,表示知道客户端要关闭连接请求,服务端可能数据还没有传送完,所以处于等待关闭状态。(CLOSE_WAIT是被动端关闭)
LAST_ACK:服务端数据传输完毕,发送FIN报文给客户端,同时等待客户端发ACK报文状态
CLOSE:收到客户端ACK报文后,进入初始化状态

转载于:https://blog.51cto.com/superhakce/2091872

TCP TIME_WAIT 详解相关推荐

  1. TCP TIME_WAIT详解

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

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

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

  3. TCP/IP详解学习笔记-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  4. 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了

    TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.as ...

  5. Linux网络-UDP/TCP协议详解

    Linux网络-UDP/TCP协议详解 零.前言 一.UDP协议 二.TCP协议 1.应答机制 2.序号机制 3.超时重传机制 4.连接管理机制 三次握手 四次挥手 5.理解CLOSE_WAIT状态 ...

  6. TCP/IP详解 第十二章(10) TCP Socket 编程

    前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想小林当年校招时常因 TCP 面试题被刷, ...

  7. TCP/IP详解学习笔记(1)-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  8. TCP/IP详解学习笔记 这位仁兄写得太好了.

    http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样 ...

  9. TCP/IP详解 第十二章(9) TCP断开连接

    前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想小林当年校招时常因 TCP 面试题被刷, ...

最新文章

  1. 两个程序员的泰国普吉岛之行
  2. 话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
  3. mysql中迅速插入百万条测试数据的方法
  4. Keras在mnist上的CNN实践,并且自定义loss函数曲线图
  5. 第九章:Java_枚举类和注解
  6. Git分支命令学习使用
  7. Vim引申以及Linux下彩色进度条实现
  8. C#3.0 为我们带来什么(3) —— 初始化器
  9. maven工程打包老是报错_Maven 项目打包及启动时的报错解决
  10. 忍者神龟java_忍者神龟-邪恶重生
  11. arcgis api for js 下载(各版本最全面的地址)
  12. A-古代汉语知识点整理大全
  13. 计算机并行配置,windows10无法启动应用程序提示并行配置不正确解决方法
  14. 2022-10-10更新步数接口和快捷指令
  15. python蓝牙连接测试_基于python实现蓝牙通信代码实例
  16. 自学云计算进度(2)-Linux基础命令
  17. 黑苹果相关(说好的不折腾)
  18. RabbitMQ的消息补偿机制
  19. Verilog专题(二十四)Lemmings3
  20. 计算机导论题目2020,计算机网络论文题目_

热门文章

  1. 数学概念——J - 数论,质因数分解
  2. 成为中国最好的Magento开发公司
  3. Android图片转换类 1. Bitmap去色,转换为黑白的灰度图, 2. Bitmap图片加圆角效果
  4. 计算机组成实验微程序控制器实验,计算机组成原理实验报告3++微程序控制器实验.doc...
  5. ege限制鼠标移动的函数_浅谈函数节流和函数防抖
  6. kettle连接mysql教程_kettle 连接 mysql8
  7. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
  8. python 保存图片代码_最简单的selenium+Python自动右键保存图片
  9. java制作图形界面数据库_java图形界面以及链接数据库
  10. linux录制远程麦克风声音,在Linux上录制麦克风到wav或mp3文件?