主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。
    TIME_WAIT状态存在的理由:
1)可靠地实现TCP全双工连接的终止
    在进行关闭连接四路握手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN,因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭的客户端必须维持状态信息进入TIME_WAIT状态。

2)允许老的重复分节在网络中消逝  
    TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个原来的迷途分节就称为lost duplicate。在关闭一个TCP连接后,马上又重新建立起一个相同的IP地址和端口之间的TCP连接,后一个连接被称为前一个连接的化身(incarnation),那么有可能出现这种情况,前一个连接的迷途重复分组在前一个连接终止后出现,从而被误解成从属于新的化身。为了避免这个情况,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复分组已经在网络中消逝。

新的SCTP协议通过在消息头部添加验证标志避免了TIME_WAIT状态。

转载于:https://www.cnblogs.com/wangfengju/p/6172396.html

TCP的TIME_WAIT状态相关推荐

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

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

  2. TCP的TIME_WAIT状态为什么要等待2MSL的时长

    TCP四次挥手的第四次挥手后为什么要经过TIME_WAIT状态? TIME_WAIT状态为什么是2MSL的时长?为什么不是等待其他时长? TCP第四次挥手后为什么要经过TIME_WAIT状态? 第四次 ...

  3. TCP/IP / TIME_WAIT 状态的作用 / MSL、TTL、RTT

    目录 作用 解释 拓展 作用 可靠地实现TCPIP全双工的终止,即:允许老的重复的TCP数据包在网络中终止,保证老的数据包不会干扰到新的连接. 解释 针对"可靠的实现TCPIP全双工的终止& ...

  4. TCP/IP TIME_WAIT状态原理

    TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个 ...

  5. 网络编程释疑之:TCP的TIME_WAIT状态在服务器开发中的影响?

    在进行TCP高并发服务器开发时,有些规则仿佛是约定俗成的,很多朋友会依据这些规则去做,比如高并发TCP服务器中进行主动关闭的一方最好是客户端.服务器端程序最好启用SO_REUSEADDR选项,但是很多 ...

  6. 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态

    转载地址:https://blog.csdn.net/jiange_zh/article/details/50637549 上一节我们已经开发了一个简单的echo服务器,在这里我们先不急着继续下去,先 ...

  7. 为什么tcp的TIME_WAIT状态要维持2MSL

    本文主要分析为什么TIME_WAIT状态的持续时间是2MSL而不是1MSL,3MSL或其它的时长,而不会详细描述为什么需要TIME_WAIT状态. 阅读本文需要的预备知识: 了解TCP协议的状态变迁: ...

  8. 计算机网络之TCP中TIME_WAIT状态意义详解

    文章目录 为什么需要TIME_WAIT 一.何为TIME_WAIT? 二.为什么需要TIME_WAIT 原因一:防止被动关闭方的延迟数据被人窃取 原因二:防止被动关闭方没有收到最后的ACK 为什么需要 ...

  9. 面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 几个方面: 问题描述:什么现象?什么影响? 问题分析 解决 ...

最新文章

  1. 我的Blog页面设计
  2. [crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
  3. 视觉盛宴 HTML5 3D动画应用赏析
  4. 音视频技术开发周刊 | 176
  5. 计算机网络资料篇(二)——快速理解网络协议
  6. leetcode111. 二叉树的最小深度(队列)
  7. python进程通信方式有几种_python全栈开发基础【第二十一篇】互斥锁以及进程之间的三种通信方式(IPC)以及生产者个消费者模型...
  8. 【端午送福】13000 人正在学习的数据分析实战课,抽奖送送送!
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_12_练习_文件复制...
  10. 关于KERNEL_SECURITY_CHECK_FAILURE蓝屏(BSOD)0x00000139错误解决思路
  11. simulink 调整系统采样时间 示波器显示时间
  12. GCD深入学习之GCD的初识
  13. aspack脱壳脚本的编写
  14. 5.4 微程序控制器
  15. string大小写转换
  16. Design Compiler is not enabled Synopsys License制作
  17. SQuirrel  一直连接不上问题
  18. Qt模型视图框架:QListView
  19. 赛博朋克之后的科幻建筑是什么样的?
  20. 2022-3-29 Leetcode 面试题01.插入

热门文章

  1. APP技巧:手机该不该每天关机一次?看完才恍然大悟!
  2. 这十个好习惯助你摆脱消极的态度
  3. bs架构的系统能连接mysql吗_HTTP、BS架构
  4. android rxbus 一个页面监听,Android RxBus的使用
  5. iofd:文件描述符_文字很重要:谈论设计时18个有意义的描述符
  6. 管理沟通中移情的应用_移情在设计中的重要性
  7. GitHub 支持上传视频文件啦!
  8. 复习.net/c#时的小文章之万年草稿版 (全是基础概念,请懂的人绕行)
  9. 基于React和SpringBoot的快速开发模板QuickAdmin
  10. MySQL数据库服务器优化详细