tcp十种状态

注意:

  • 当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送
  • 发送FIN通常是应用层对socket进行关闭的结果
  • 关于tcp中time_wait状态的4个问题

time_wait是个常问的问题。tcp网络编程中最不easy理解的也是它的time_wait状态,这也说明了tcp/ip四次挥手中time_wait状态的重要性。
以下通过4个问题来描写叙述它


问题

1.time_wait状态是什么

2.为什么会有time_wait状态

3.哪一方会有time_wait状态

4.怎样避免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地址。

5. time_wait状态到底持续多长时间?

首先要知道一个名词:MSL 

MSL 为一个数据包在网络中存活的最长时间,一般1-2分钟的样子;RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

 

tcp的2MSL问题说明

2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,

当TCP的一端发起主动关闭,在发出最后一个ACK包后,

即第3次握 手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,

必须在此状态上停留两倍的MSL时间,

等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,

那么对方在超时后将重发第三次握手的FIN包,

主动关闭端接到重发的FIN包后可以再发一个ACK应答包。

在TIME_WAIT状态 时两端的端口不能使用,要等到2MSL时间结束才可继续使用。

当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

不过在实际应用中可以通过设置 SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

tcp十种状态;关于tcp中time_wait状态(2MSL问题)的更多相关文章

  1. TCP/IP详解--TCP连接中TIME_WAIT状态过多

    TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的.仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT.服务器在处理客户端请 ...

  2. 关于tcp中time_wait状态的4个问题

    time_wait是个常问的问题.tcp网络编程中最不easy理解的也是它的time_wait状态,这也说明了tcp/ip四次挥手中time_wait状态的重要性. 以下通过4个问题来描写叙述它 问题 ...

  3. 服务器TCP连接中 TIME_WAIT 状态过多

    今天查看服务器的TCP连接数,发现其中 TIME_WAIT 状态的太多了: # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a ...

  4. 第三篇:关于TIME_WAIT状态

    前言 为何TCP ”四次分手“ 的过程中会有一个TIME_WAIT状态?这个状态有什么意义呢?这是网络中的一个经典问题,本文将给出精简的回答. 什么是TIME_WAIT状态 这是TCP通信协议中出现的 ...

  5. 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态

    23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态 摘自:https://blog.csdn.net/qq_35733751/article/details/80146161 2018 ...

  6. 网络--TIME_WAIT状态

    MSL时间 MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 .MSL在RFC 1122 ...

  7. 关于TIME_WAIT状态

    前言 为何TCP ”四次分手“ 的过程中会有一个TIME_WAIT状态?这个状态有什么意义呢?这是网络中的一个经典问题,本文将给出精简的回答. 什么是TIME_WAIT状态 这是TCP通信协议中出现的 ...

  8. TCP协议(包括TCP的连接过程,数据分段,TCP有关服务器优化)

    Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议 TCP/IP是一个Protocol Stack(协议栈),包括TCP.IP ...

  9. 在系统启动时,Windows Vista 中、 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TIME_WAIT 状态的所有 TCP/IP 端口

    在系统启动时,Windows Vista 中. 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TI ...

随机推荐

  1. Stream流的使用

    创建流 创建流的方式很多,从jdk8起,很多类中添加了一些方法来创建相应的流,比如:BufferedReader类的lines()方法:Pattern类的splitAsStream方法.但是开发中使用 ...

  2. NOIOL #2 爆零记

    没有假是真的爆零了,原因:万恶的文操.不管怎样写份题解吧. T1: 做题经历:看了下题发现:不是 edu 的原题吗?兴奋地拿出赛中写的程序搞上去. 大约比赛开始 30min 后开始发现 \(k\) 可 ...

  3. Atcoder Regular Contest 096 D - Sweet Alchemy(贪心+多重背包)

    洛谷题面传送门 & Atcoder 题面传送门 由于再过 1h 就是 NOI 笔试了所以题解写得会略有点简略. 考虑差分,记 \(b_i=c_i-c_{fa_i}\),那么根据题意有 \(b_ ...

  4. Atcoder Grand Contest 054 题解

    那天晚上由于毕业晚会与同学吃饭喝酒没打 AGC,第二天稍微补了下题,目前补到了 E,显然 AGC 的 F 对于我来说都是不可做题就没补了(bushi A 简单题,不难发现如果我们通过三次及以上的操作将 ...

  5. 如何反向推断基因型文件中的参考碱基(REF/ALT)?

    目录 需求 解决 方法一 方法二 需求 客户随手丢来一个基因型文件,类似于hapmap格式,只是少了中间多余的那几列,像这种类hapmap格式文件,往往是芯片数据. 这样的数据因为缺乏等位基因:参考碱 ...

  6. 通用的js异步ajax文件上传函数

    无需表单,直接加点击事件即可, caseimg为input表单,image为图片显示 function upimage() { $('#form-upload').remove(); $('body' ...

  7. 23-Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  8. 9 — springboot整合jdbc、druid、druid实现日志监控 — 更新完毕

    1.整合jdbc.druid 1).导入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...

  9. linux RPM/YUM包管理

    linux RPM/YUM包管理 目录 linux RPM/YUM包管理 RPM RPM包管理 查询rpm包 卸载rpm包 安装rpm包 YUM 查看yum服务器是否有需要安装的软件 下载安装指定的y ...

  10. A Child's History of England.13

    Then came the boy-king, Edgar, called the Peaceful, fifteen years old. Dunstan, being still the real ...