精华内容
下载资源
问答
  • 什么是TIME_WAIT

    千次阅读 2016-09-27 14:52:44
    TIME_WAIT是怎样产生的? 因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都...什么是MSL? MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。 关于MSL的大小

    TIME_WAIT是怎样产生的?

    因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;
    后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。

    什么是MSL?

    MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。 关于MSL的大小,RFC
    793协议中给出的建议是两分钟,不过实际上不同的操作系统可能有不同的设置,
    以Linux为例,通常是半分钟,两倍的MSL就是一分钟,也就是60秒,并且这个数值是硬编码在内核中的,
    也就是说除非你重新编译内核,否则没法修改它:

    #define TCP_TIMEWAIT_LEN (60*HZ)

    linux系统下怎样修改TIME_WAIT时间?

    cat /etc/sysctl.conf

    参数说明:

    net.ipv4.tcp_syncookies = 1 表示开启SYN
    Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT
    sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1
    表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭; net.ipv4.tcp_fin_timeout
    修改系统默认的 TIMEOUT 时间。

    查看端口占用方法:

    1.netstat查询

    netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
    netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

    2.使用SS查询

    ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'

    参考

    链接:http://huoding.com/2013/12/31/316

    展开全文
  • TIME_WAIT在 TCP 的状态流程图中是一个很容易被误解的状态。它是表示socket可以进入和留存相当长一段时间的状态,如果你的系统中有很多 socket 处于TIME_WAIT状态,那么当你需要创建新的 socket 连接的时候可能...
    TIME_WAIT 在 TCP 的状态流程图中是一个很容易被误解的状态。它是表示socket可以进入和留存相当长一段时间的状态,如果你的系统中有很多 socket 处于TIME_WAIT状态,那么当你需要创建新的 socket 连接的时候可能会受到影响,这也会影响到你的程序的扩展性。
    1、TIME_WAIT状态原理

           通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。

    客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。

    下图是以客户端主动关闭连接为例,说明这一过程的。

    2、TIME_WAIT状态存在的理由
    TCP/IP协议就是这样设计的,是不可避免的。主要有两个原因:

    1)可靠地实现TCP全双工连接的终止

           TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK。如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么A端将响应RST分节,B端收到后将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。

    因而,要实现TCP全双工连接的正常终止,必须处理终止过程中四个分节任何一个分节的丢失情况,主动关闭连接的A端必须维持TIME_WAIT状态 。
    2)允许老的重复分节在网络中消逝 
            TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。
    3、MSL时间
           MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。

    TIME_WAIT状态维持时间:

         TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟。Windows操作系统就是4分钟。

    展开全文
  • 什么是 close_wait:关闭 TCP 连接过程中,第 2、3 次挥手时,服务器发送了 ACK 报文段、FIN 报文段之后,服务器会进入 close_wait 状态。(具体是第 2 次挥手还是第 3 次挥手时,是发送了 ACK 报文段还是 FIN 报...

    出现过多的close_wait可能是什么原因?

    (首先需要注意的是,客户机、服务器均可以发起对 TCP 连接的关闭,以下以客户机发起关闭为例。)

    什么是 close_wait:关闭 TCP 连接过程中,第 1 次挥手服务器接收客户端的 FIN 报文段,第 2 次挥手时,服务器发送了 ACK 报文段之后,服务器会进入 close_wait 状态。
    (具体是第 2 次挥手还是第 3 次挥手时,是发送了 ACK 报文段还是 FIN 报文段之后,尚待考证)
    (已经确定了是第 2 次挥手,详见 计算机网络(自顶向下)P173图示)

    过多的close_wait可能是什么原因:

    1. 程序问题:说的具体一点,服务器端的代码,没有写 close 函数关闭 socket 连接,也就不会发出 FIN 报文段;或者出现死循环,服务器端的代码永远执行不到 close。
    2. 客户机响应太慢或者 timeout 设置过小:。。。(这里我不太理解)

    在这里插入图片描述

    参考文献:
    3. 《1 计算机网络之探赜索隐》 - 哈工大 - 网易慕课 - 15.314 TCP连接管理 - 09分12秒;
    4. 《计算机网络 - 自顶向下》 - 3.5.6 TCP连接管理 - P169——P174;
    6. 浅谈CLOSE_WAIT
    7. 又见CLOSE_WAIT
    8. 一次服务端大量CLOSE_WAIT问题的解决
    9. TCP CLOSE_WAIT 过多解决方案

    展开全文
  • sleep() 和 wait() 有什么区别

    万次阅读 2019-05-15 10:19:31
    sleep() 和 wait() 有什么区别? sleep() 是 Thread 类的静态本地方法;wait() 是Object类的成员本地方法 sleep() 方法可以在任何地方使用;wait() 方法则只能在同步方法或同步代码块中使用,否则抛出异常...

    sleep() 和 wait() 有什么区别?

    • sleep() 是 Thread 类的静态本地方法;wait() 是Object类的成员本地方法
    • sleep() 方法可以在任何地方使用;wait() 方法则只能在同步方法或同步代码块中使用,否则抛出异常Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
    • sleep() 会休眠当前线程指定时间,释放 CPU 资源,不释放对象锁,休眠时间到自动苏醒继续执行;wait() 方法放弃持有的对象锁,进入等待队列,当该对象被调用 notify() / notifyAll() 方法后才有机会竞争获取对象锁,进入运行状态
    • JDK1.8 sleep() wait() 均需要捕获 InterruptedException 异常

    测试代码

    public class TestWaitSleep {
    
    	private static Object obj = new Object();
    	
    	public static void main(String[] args) {
    		
    		//测试sleep()
    		//测试 RunnableImpl1 wait(); RunnableImpl2 notify()
    		Thread t1 = new Thread(new RunnableImpl1(obj));
    		Thread t2 = new Thread(new RunnableImpl2(obj));
    		t1.start();
    		t2.start();
    		
    		//测试RunnableImpl3 wait(long timeout)方法
    		Thread t3 = new Thread(new RunnableImpl3(obj));
    		t3.start();
    	}
    
    	
    }
    
    class RunnableImpl1 implements Runnable {
    
    	private Object obj;
    	
    	public RunnableImpl1(Object obj) {
    		this.obj = obj;
    	}
    	
    	public void run() {
    		System.out.println("run on RunnableImpl1");
    		synchronized (obj) {
    			System.out.println("obj to wait on RunnableImpl1");
    			try {
    				obj.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			System.out.println("obj continue to run on RunnableImpl1");
    		}
    	}
    }
    
    class RunnableImpl2 implements Runnable {
    
    	private Object obj;
    	
    	public RunnableImpl2(Object obj) {
    		this.obj = obj;
    	}
    	
    	public void run() {
    		System.out.println("run on RunnableImpl2");
    		System.out.println("睡眠3秒...");
    		try {
    			Thread.sleep(3000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		synchronized (obj) {
    			System.out.println("notify obj on RunnableImpl2");
    			obj.notify();
    		}
    	}
    }
    
    class RunnableImpl3 implements Runnable {
    
    	private Object obj;
    	
    	public RunnableImpl3(Object obj) {
    		this.obj = obj;
    	}
    	
    	public void run() {
    		System.out.println("run on RunnableImpl3");
    		synchronized (obj) {
    			System.out.println("obj to wait on RunnableImpl3");
    			try {
    				obj.wait(1000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			System.out.println("obj continue to run on RunnableImpl3");
    		}
    	}
    }

    打印结果

    run on RunnableImpl2
    睡眠3秒...
    run on RunnableImpl1
    obj to wait on RunnableImpl1
    run on RunnableImpl3
    obj to wait on RunnableImpl3
    obj continue to run on RunnableImpl3
    notify obj on RunnableImpl2
    obj continue to run on RunnableImpl1
    

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 什么意思 5 jjzhou91 | 浏览 3167 次 我有更好的答案 推荐于2016-03-10 02:06:53 最佳答案 这是JQuery。$('#wait_pls'):查找出id值为wait_pls的对象show()是将查找出的对象显示出来...
  • TIME_WAIT什么

    万次阅读 2009-03-04 17:10:00
     如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达 时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不 是有序...
  • 1、 什么是time_wait?如何产生的?

    万次阅读 2019-04-24 11:19:46
    1、 什么是time_wait?如何产生的? 上状态图: 从图中可以看到,tcp连接后,在四次握手之后,先发FIN标志位的一端就会进入time_wait状态。 2、 time_wait的类型有哪些? Time_wait分为两类:主动型time_...
  • wait命令

    2020-01-02 22:17:56
    wait命令: 概念:阻塞当前进程的执行,直到指定的子进程结束后,当前线程才会继续执行。 格式:wait [进程号] 常用:wait 在shell中直接使用wait: 等待所有的子进程结束后,当前进程才继续往下走。 在...
  • 文章目录什么是线程通讯wait和sleep 区别?(面试题)sleep(0) vs wait(0)有什么区别?为什么wait会释放锁?而sleep不会释放锁?为什么wait是 0bject的方法,而sleep是Thread 的方法? 什么是线程通讯 线程通讯就是一个...
  • Guarded Wait VS Busy Wait

    2009-03-01 12:29:00
    Guarded Wait VS Busy WaitGuarded Wait 意思是“被阻挡而等待”,大致上是线程使用wait等待,等到被notify或者被notifyAll后再次执行测试条件的测试方法。使用wait等待的时间,其实是停止在等待区间里停止执行,...
  • I2C_Wait_ACK中 超时计数 为什么是250

    千次阅读 2020-02-14 16:41:16
    最近在研究单片机驱动, 开发板用的神州王;...TCS34725_I2C_Wait_ACK()超时计数 为什么是250? uint8_t TCS34725_I2C_Wait_ACK() { uint8_t timeOut = 0; TCS_SDA_DIR_IN();//SDA设置为输入 ...
  • CLOSE_WAIT和TIME_WAIT

    2019-03-24 22:46:19
    在服务器的日常维护过程中,会经常用到下面的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for...TIME_WAIT 814 CLOSE_WAIT 1 FIN_WAIT1 1 ESTABLISHED 634 SYN_RECV 2 LAST_ACK 1 常用的三个状态是:ESTABLIS...
  • 遇到了如下问题: Error: Can't wait without a fiber? 啥意思啊?
  • wait线程阻塞

    千次阅读 2018-09-16 19:12:40
    介绍 线程阻塞通常是指一个线程在执行过程中由于某种原因从运行状态转为暂停状态的过程,线程阻塞会...首先我们先看wait方法,wait方法总共有三个重载方法,分别是 wait() wait(long timeout) wait(long timeout...
  • wait方法

    千次阅读 2019-03-24 10:33:14
    一.概念、原理、区别 Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,等待,等待超时,死亡。抢占式机制指的是有多个线程处于可运行状态,... Object的方法:wait...
  • java.lang.Process.waitFor()方法将导致当前的线程等待,如果必要的话,直到由该Process对象表示的进程已经终止。此方法将立即返回,如果子进程已经终止。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。...
  • 关于 time wait

    千次阅读 2018-07-17 12:43:31
    网上有很多关于 time wait 的问题和修改方案,究竟什么是 time wait?作用是什么?会造成什么问题?如何解决?我们接下来一点一点看一下。 一,time wait 是什么? timewait 状态是 TCP 链接的主动关闭方会有的...
  • C语言 wait

    千次阅读 2019-04-24 21:31:53
    孤儿进程:父进程死,子进程被init领养 子进程被领养后,ctrl+c不能停止,因为该bash已经没有子进程了,只能通过kill杀死 #include <...sys/wait.h> int main(void) { pid_t pid; pid = fork(); ...
  • Thread.sleep(0)是线程的重新一次竞争,wait(0)为什么不是,wait也让出了cpu资源啊
  • wait4

    2014-03-24 18:57:41
    wait4会挂起当前进程,等待指定的子进程状态改变,并且会返回关于子进程使用资源的信息。所谓的状态的改变包括终止,挂起所有的进程状态的改变。另外,在linux中进程终止后不会释放其资源,它会进入一种僵死的状态,...
  • 来自:http://hi.baidu.com/guessa/blog/item/e3a9584334e2121b9313c6c9.html ...wait是Object对象里面的方法; 第二: 当一个synchorized成员sleep的时候并不会释放掉synchorized;
  • TCP关闭连接(为什么会能 Time_wait,Close_wait ) ? 作者:胡文斌 Tcp 关闭连接问题及注意   最近一段时间一直在学习阅读mina和nio的源码,也发现了一些问题无法解决,然后重读了一下tcp协议,收获颇多。...
  • Wait函数详解

    千次阅读 2019-04-07 12:11:02
    博客搬家,原地址:https://langzi989.github.io/2017/05/04/Wait函数详解/ kill 头文件 sys/types.h signal.h 函数功能 注意此函数的功能是向指定进程发送信号。而不是杀死某个进程.名字为kill的原因是早期的Unix...
  • sleep和wait的区别

    万次阅读 多人点赞 2019-05-08 23:24:46
    wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会...
  • 今天有位同学过来问我下面代码中那个super.wait()是什么意思? public synchronized void waitAvailable() { try { if (num == "wait") super.wait(); } catch (InterruptedException ex) { } } 那...
  • Linux TCP Finwait2/Timewait状态要义浅析

    千次阅读 2018-08-11 08:37:17
    就比如说,什么情况下可以让一个处于timewait状态的TCP连接不在那个状态待60秒( 已经是一个违反原则的优化后的值了 ),而是可以马上释放。 用什么可以check?答案是PAWS!具体详见我在很久以前写的一篇文章,必须...
  • TIME_WAIT状态是什么? TIME_WAIT状态是主动关闭TCP连接的一方(即先发起FIN包的一方),在发送完最后一个ACK包后进入的状态。系统需要在TIME_WAIT状态下等待2MSL(maximum segment lifetime )后才能释放连接...
  • 12-TCP 协议(TIME_WAIT 状态)

    千次阅读 2017-04-08 17:56:37
    如果你仔细研究了 TCP 四次挥手,你会发现主动关闭一方最后的状态是 TIME_WAIT,这个 TIME_WAIT 状态是什么意思呢? 图1 仔细观察主动关闭一方最后的状态 1. TIME_WAIT 状态TIME_WAIT 状态,又称为 2MSL 等待...
  • wait函数详解

    万次阅读 多人点赞 2018-02-26 23:55:13
    进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一...
  • java wait用法详解

    万次阅读 多人点赞 2017-02-27 22:48:14
    一、wait(), notify(), notifyAll()等方法介绍 1.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,562
精华内容 40,624
关键字:

wait意思是什么