zoukankan      html  css  js  c++  java
  • 谈谈TCP的四次挥手

    “挥手”是为了终止连接,TCP四次挥手的流程图如下:

    (在socket编程中,可以由客户端或服务端进行close操作来进行)

    下面的图是由客户端主动关闭连接

    MSL是什么?最长报文段寿命

    ------》

    if793 定义了MSL是2分钟

    linux 的MSL 是30s

    问题:为什么TIME-WAIT会有这个状态呢?为什么不直接FIN-WAIT-2之后马上就closed呢?

    -----》1、确保有足够的时间让对方收到ACK包(如果被动端没有收到ACK的话,就会触发重发FIN包,一来一去正好2个MSL)

    2、避免新旧连接混淆(有足够的时间,让这个连接不会和后面的连接混淆在一去,因为有些路由器会缓存IP数据包,如果连接被重用了,那么这些延迟收到的包,就有可能会跟新连接混在一去

        

    为什么需要四次挥手才能断开连接呢?

    ------》

    因为TCP是全双工,发送方和接受方都需要FIN报文和ACK报文。换句话说,发送方和接受方各只需2次挥手就可以断开连接。只不过有一方的被动的,所以看起来就是4次挥手

    问题;服务器出现大量CLOSE_WAIT状态的原因?

    -----》

    1、对方关闭socket连接,我方忙于读或写,没有及时关闭连接 (这种情况,检查代码,特别是释放资源的代码)

    2、检查配置,特别是处理请求的线程配置(特别是配置线程池的线程数不合理)

    我们怎样在服务器上查到处于close-wait状态的下连接数呢?通过什么命令可以统计出来呢?这个处于close-wait状态的数量太多的话,会导致什么问题呢?

    -------》命令   netstat - n | awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'

    ------->会导致,Tomcat,nginx,appach崩溃掉

  • 相关阅读:
    SQL 强化练习 (七)
    SQL 强化练习 (六)
    SQL 强化练习 (五)
    SQL 强化练习 (四)
    典型相关分析 CCA
    SQL 强化练习(三)
    双向 和 多重 RNN
    SQL 强化练习 (二)
    SQL 强化练习 (一)
    SQL 查询强化
  • 原文地址:https://www.cnblogs.com/vingLiu/p/10733615.html
Copyright © 2011-2022 走看看