socket 状态中time_wait 介绍

在连接撤销过程中,有如下四个过程:        
                          
1.          HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
2.          HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
3.          一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
4.          HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态.

为什么需要time_wait?
1.        因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.
       如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方HOST2的FIN消息了.
2.        TIME_WAIT为连接中”离群的段”提供从网络中消失的时间.
         考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。

 

转自:http://blog.csdn.net/lllxy/archive/2007/09/07/1776243.aspx

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TIME_WAITTCP协议的一种状态,当一端关闭了连接后,它会进入TIME_WAIT状态,并在一段时间内保持这个状态。在这个状态下,该端口在连接释放之后仍然不能被其他新连接使用,因为它需要等待足够长的时间来确保之前的连接已经完全关闭。 引用提到了通过设置SO_LINGER标志来避免socket进入TIME_WAIT状态。这种方法可以通过发送RST包来代替正常的TCP四次握手来终止连接。然而,这并不是一个推荐的做法,因为TIME_WAIT状态对于我们来说通常是有利的。 引用指出,CLOSE_WAIT状态是由于某一方没有正确关闭连接导致的。这种状态发生在一方网络连接断开后,并未执行closesocket操作,导致连接状态停留在CLOSE_WAIT状态。与CLOSE_WAIT相对应的是TIME_WAIT状态。 引用提到了解决大量TIME_WAIT状态连接的方法之一是通过调整内核参数。在/etc/sysctl.***的快速回收。 综上所述,TIME_WAITTCP协议用于确保连接完全关闭的一种状态。虽然有一些方法可以避免进入TIME_WAIT状态,但通常来说,TIME_WAIT对于连接的正常关闭是有利的。调整内核参数也可以解决大量TIME_WAIT状态连接的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [TCP/IP的time_wait状态详解](https://blog.csdn.net/tianmo2010/article/details/7436157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [关于面试经常被问到的socketTIME_WAIT状态的原因及解决办法和避免的办法](https://blog.csdn.net/wu936754331/article/details/49104497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值