TIME_WAIT状态

2023-05-16

在Tcp关闭连接过程中,主动关闭的一段会进入TIME_WAIT状态,且在该状态持续两倍最长分节生命期MSL的时间。Tcp实现中必须选择一个MSL(maximum segment lifetime)值,MSL是Ip数据包在互联网中生存的最长时间。

分组在路由异常时经常”迷途“。某个路由器崩溃或两个路由器间的链路断开时,路由协议需花费数秒或数分钟才能稳定找到另一条同路,在这段时间内可能产生路由循环(路由器A把分组发送给路由器B,而B再把分组发送给A),此时分组可能陷入这样的循环。在此期间,假设迷途的分组是一个tcp分节,发送方tcp超时重传该分组,而重传的分组最终选择另一条路径到达目的地。但是,不久(自从迷途的分组开始其旅途起最多MSL秒内)路由循环修复,迷失在该循环中的分组最终到达目的地。这个原来的分组称为迷途的重复分组(lost duplicate)或漫游的重复分组(wandering duplicate),与之相对的重复分组就是超时重传分组。Tcp必须正确处理这类重复分组。

存在TIME_WAIT状态的两个理由:

1、实现终止tcp全双工的可靠性。

2、允许老的重复分节在网络中消逝。

第一个理由:假设tcp连接终止过程中最终的ACK丢失,且客户为主动终止端,服务器被动终止,服务器将重发最终的FIN,因此客户必须维护状态信息以允许它重发最终ACK。如果不维护状态信息, 它将响应以RST,而服务器则把该分节解释成一个错误。如果TCP打算执行所有必要的工作以彻底终止某一个连接上两个方向(全双工关闭)的数据流,那么就必须正确处理终止连接中四个分节中任何一个分节的丢失情况。进入TIMW_WAIT状态,是因为主动端肯呢个不得不重新发送最终的ACK。

第二理由:假设终端A和B之间已建立一个tcp连接。当关闭该连接后,在以后某个时候又建立相同IP、端口之间的tcp连接。后一个连接称为前一个连接的化身,因为他们的端口号和ip地址都相同。tcp必须预防来自某个连接的老重复分组在连接钟之后再出现,从而被误解成属于同一连接的数据。因此,tcp不能给处于TIME_WAIT状态的连接启动新的化身。既然TIME_WAIT状态的持续时间2MLS,这就足够让某一个方向上的分组最多存活MSL秒即被丢弃,另一个方向上的应答最多存货MSL秒也被丢弃。以此保证成功建立一个tcp连接时,来自该链接先前化身的老重复数据都已在网络中消逝。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TIME_WAIT状态 的相关文章

  • 如何在 C# WPF 中让主窗口等待新打开的窗口关闭?

    我是 WPF 和 C 的新手 请耐心等待 我有一个主窗口 它打开一个新窗口 现在这个新窗口是一个提示是否覆盖文件的提示 主窗口访问新窗口中的一个公共变量来检查提示的结果 但我无法让主窗口处理等到新窗口关闭 Window1 Win new W
  • 长时间运行进程的超时和 Windows 服务 (Python)

    我有一个使用 python 创建的简单 Windows 服务 我的问题是 我不知道该服务需要多长时间才能完成 可能需要 15 秒 也可能需要 4 个多小时 具体取决于需要对数据执行的操作 4个多小时的情况很少见 但我也遇到过这种情况 以下是
  • Unix 时间戳到 FAT 时间戳

    我正在尝试将时间结构转换为 FAT 时间戳 我的代码如下所示 unsigned long Fat tm struct pTime unsigned long FatTime 0 FatTime pTime seconds 2 gt gt 1
  • 在 Julia 中,有没有办法让“现在”(至少)达到毫秒精度?

    通常 要了解代码中发生的情况 您需要高精度时间来分析您的应用程序或出于其他原因 显然 现在 https stackoverflow com questions 32407509 how to get the milliseconds fro
  • 如何降级旧版 Android 中的 java.time 代码?

    我有这个简洁的代码 它生成两个日期之间的天数列表 然后是当天的日期 以及它在列表中的位置 最重要的是 所有日期都采用相同的格式 这使得很容易比较它们 Create list of days String s 2018 08 28 Strin
  • 验证 hh:mm:ss

    我是 C net 的新手 我想要验证仅采用 hh mm ss 格式的文本框 下面是我的代码及其工作原理 它给出的输出为 true 23 45 45 仅作为示例 对于 23 45 45 也为 true 仅作为示例 现在我想要验证 23 45
  • 比较ios中的两个时间值? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我想检查当前时间是在变量中保存的时间之前还是之后 就像我的时间1一样time1 08 15 12 我的时间2是time2 18 12 8 所以我想比较 time1 和 time2 目前这些变量是
  • 将正在运行的计数显示计时器添加到 iOS 应用程序中,例如时钟秒表?

    我正在使用一个应用程序 该应用程序可以处理设备运动事件并以 5 秒的增量更新界面 我想向应用程序添加一个指示器 以显示应用程序运行的总时间 看起来像秒表的计数器 例如本机 iOS 时钟应用程序 是计算应用程序运行时间并将其显示给用户的合理方
  • C++:如何通过时间和本地时间获取实际时间?

    我正在寻找一种在 C 中以 HH MM SS 方式节省时间的方法 我在这里看到它们有很多解决方案 经过一番研究后我选择了time and localtime 然而 似乎localtime函数有点棘手 因为它says http rabbit
  • 如何通过使用内置的 Date 类来节省时间?

    这个问题的目的是使用内置的 Date 类收集日期 时间计算的解决方案 而不是编写冗长的复杂函数 我会自己写一些答案 如果有人想出一些非常聪明的东西 我会接受答案 但这主要是作为解决方案的集合 因为我经常看到处理日期的代码过于复杂 请记住这是
  • Bash:从给定时间减去 10 分钟

    在 bash 脚本中 如果我有一个代表时间的数字 格式为 hhmmss 或 hmmss 那么减去 10 分钟的最佳方法是什么 即 90000 gt 85000 这有点棘手 日期可以进行一般操作 即您可以执行以下操作 date date 10
  • 找出某个日期时间自unix纪元以来的时间?

    我想找出 2009 年 10 月 1 日 9 00 BST 的 UNIX 时间 即自 Unix 纪元以来的秒数 我如何在 Linux 命令行上执行此操作 我知道你可以使用date UNIXTIME someformat 但是unix时间是我
  • 仅以 int 形式显示和保存小时数

    如何仅显示小时并使用 int 变量 我的意思是打印时间 例如 20 30 44 PM 我只想存储小时 即 int 变量中的 20 小时 怎么做 有谁知道的话可以告诉我密码吗 谢谢 尝试使用日历get http docs oracle com
  • “马来半岛标准时间”的时区问题

    我有一个在 C 上运行以下代码的程序 TimeZoneInfo localZone TimeZoneInfo Local string timeZone TimeZoneInfo FindSystemTimeZoneById localZo
  • 从 varchar(100) 类型获取时间(HH:MM AM/PM)格式

    如何将字符串 RD OT 07 30 转换为时间 我只知道如何将 07 30 AM 转换为时间 下面的代码给了我一个空白数据 id strtoupper POST id query mysql query SELECT STR TO DAT
  • Android L,使用 joda.time 库的异常

    该应用程序适用于所有设备 包括 nexus 5 和 nexus 7 在 Android L 预览版上运行相同的应用程序时 应用程序崩溃了 我一直在调试 并且调用 DateTime 构造函数发现了异常 public static String
  • 请求完成时间大于 ActiveRecord 和 View 时间之和

    以下是一些示例请求完成时间 Completed 200 OK in 1054ms Views 10 8ms ActiveRecord 455 6ms Completed 200 OK in 1410ms Views 11 6ms Activ
  • Php 转换 GMT 格式的时间

    我有这个字符串2012 06 27 16 17 06我想将其转换为 GMT 格式 我怎样才能做到这一点 多谢 Use gmdate http php net manual en function gmdate php 使用以下命令将当前日期
  • 如何向 Time.now 添加两周?

    如何在 Ruby 中向当前 Time now 添加两周 我有一个使用 DataMapper 的小型 Sinatra 项目 在保存之前 我有一个字段填充了当前时间加上两周 但未按需要工作 任何帮助是极大的赞赏 我收到以下错误 NoMethod
  • 计算轮班工作时间并检测

    我有个问题 我的英语很差 我需要用PHP做一个加班计算 已经有一个代码可以实现这一点 但当工作时间超过2天时 计算就会出错 工作开始 2018 09 09 13 43 工作结束 2018 09 11 07 13 结果 07 18 04 00

随机推荐

  • java 之产生死锁的必要条件

    1 死锁 怎么去打破 1 死锁发生的原因 是多个进程并发请求 争夺系统资源而产生的相互等待情况 2 本质问题 xff1a 1 系统资源有限 2 进程推进顺序不合理 3 死锁产生的4个必要条件 xff1a 3 1 进程互斥 资源分配给进程之后
  • MAC 安装tree : fatal error: 'stdlib.h' file not found

    MAC 安装tree fatal error 39 stdlib h 39 file not found 未安装 Command Line Tools命令行工具 xff0c 安装步骤如下 xff1a 在终端中输入 xcode select
  • blog记录

    blog记录 blog整理linux内核redis云 43 负载均衡算法git blog整理 linux内核 https blog csdn net gatieme article category 9265324 Linux内核剖析 xf
  • Git撤销&回滚操作(git reset 和 get revert)

    git 工作流 xff1a 工作区 xff1a 即自己当前分支所修改的代码 xff0c git add xx 之前的 xff01 不包括 git add xx 和 git commit xxx 之后的 暂存区 xff1a 已经 git ad
  • 51单片机——计数器与定时器的区别

    定时器和计数器是同一器件 计数器 其共同的特点是都有一个计数脉冲输入端 每输入一个脉冲 计数器就进行加1或减1计数 若计数器件的计数脉冲的频率固定 则可利用计数实现定时 这就是定时器 若计数器件的作用仅仅是记录输入脉冲的多少 则称为计数器
  • git学习笔记

    本地仓 lt gt 暂存区 lt gt 版本库 撤销 xff1a 已修改的文件test c xff0c 撤销 git checkout test c 必须要 xff0c 不然就会切换分支已修改的文件并使用 git add 添加到暂存区 gi
  • github提交代码-简介

    使用步骤 在 github 上 fork 一个项目到自己的仓库 需要先fork xff0c 因为原始项目没有权限git clone https github com name repos git 从自己的仓下 clone代码到本地修改本地代
  • linux时间相关结构体和函数整理

    一 时间类型 Linux下常用的时间类型有4个 xff1a time t xff0c struct timeb struct timeval xff0c struct timespec xff0c clock t struct tm 1 t
  • xargs 命令

    xargs xargs 命令 用途 构造参数列表并运行命令 大多数 Linux 命令都会产生输出 xff1a 文件列表 字符串列表等 但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办 xff1f 例如 xff0c file 命令
  • fedora20安装putty No package ‘gtk+-2.0′ found

    这里转载一下 我在编译安装emacs23的时候提示No package gtk 43 2 0 found centos的开发环境 网上搜了一下 xff0c 发现安装gtk 43 2 0不是一件容易的事 xff0c 后来无意发现一个帖子挺不错
  • Reverse Words in a String

    Given an input string reverse the string word by word For example Given s 61 34 the sky is blue 34 return 34 blue is sky
  • Linked List Cycle

    Given a linked list determine if it has a cycle in it Follow up can you solve it without using extra space 最初代码 xff0c 错误
  • Linked List Cycle II

    Given a linked list return the node where the cycle begins If there is no cycle return null Follow up Can you solve it w
  • Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation Valid operators are 43 Each operand may be an
  • Insertion Sort List

    Sort a linked list using insertion sort 对一个线性链表排序 xff0c 维护两对指针即可 ListNode insertionSortList ListNode head if head return
  • mac上忘记mysql密码完美解决方案

    最近项目用到mysql xff0c 之前装过一个 xff0c 可是忘记了当时设置的密码 xff0c 然后走上了修改密码的坎坷道路 在百度 xff0c Google了一堆资料之后还是 xff0c 发现处处是给程序员埋的坑 于是下决心 xff0
  • Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 网络编程概述

    今天开始正式学习网络编程这一块 xff0c 特做此笔记记录学习过程 要编写通过计算机网络通信的程序 xff0c 首先要确定这些程序相互通信所用的protocol 在深入设计一个协议的细节之前 xff0c 应该从高层次决断通信由哪个程序发起以
  • unix网络编程(二)Tcp:传输控制协议

    1 TCP xff08 Transmission Control Protocol xff0c 传输控制协议 xff09 xff0c 其提供一下服务 xff1a 一 xff09 TCP提供客户与服务器的链接 xff0c 一个客户建立与一个给
  • TIME_WAIT状态

    在Tcp关闭连接过程中 xff0c 主动关闭的一段会进入TIME WAIT状态 xff0c 且在该状态持续两倍最长分节生命期MSL的时间 Tcp实现中必须选择一个MSL xff08 maximum segment lifetime xff0