zoukankan      html  css  js  c++  java
  • TCP状态

    TCP状态

    TCP连接中包含不同的状态,如何通过状态来判断程序问题尤为重要。

    三次握手

    图中的connection部分为三次握手。

    四次握手

    图中的close部分为四次握手。

    CLOSE_WAIT

    服务器接受到FIN关闭请求后为CLOSE_WAIT状态。
    默认情况下,CLOSE_WAIT状态会至少维持2小时的状态。
    由于CLOSE_WAIT状态后应该发送ACK请求,状态会变为LAST_ACK,但如果由太多的CLOSE_WAIT状态,则服务器出现错误。

    TIME_WAIT

    客户端在接受到服务器的FIN关闭请求后为TIME_WAIT状态,最后会自动切换到CLOSE状态。
    当服务器主动关闭链接时形成TIME_WAIT状态,会持续2个MSL(Max Segment Lifetime),默认为4分钟。

    TIME_WAIT状态下的socket不能被回收使用,具体现象是对于一个处理大量短连接的服务器,如果由于服务器主动关闭客户端的连接,将导致服务器产生大量处于TIME_WAIT状态的socket,严重影响服务器的处理能力。

    AWK和NETSTAT命令

    # -n表示-net
    netstat -n 
    
    # -v用于定义参数
     netstat  -net | awk -v i=0,j=0 '{if ($6=="ESTABLISHED") {i++}; if ($6 == "CLOSE_WAIT") {j++}; print i, j, prit $6}'
    
    # 最佳用法如下:
    # 1. 使用正则/xxx/来匹配行
    # 2. $NF代表最后一列的数据,命令中定义了一个字典,最后一列数据作为key
    # 3. 每次匹配都会让value递增
    # 4. END表示结束
    # 5. 最后的{}用来打印key,value
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'
    

    那么,如何对结果进行排序呢?

    # 利用管道
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a] | "sort -r -n -k2"}'
    
    # 其中,sort为外部命令,-r代表从大到小(倒序),-n代表按照数字排序,-k2代表按照第2行排序。
    

    此外,也可以使用asort来实现结果排序。

  • 相关阅读:
    在线教育02
    HashMap如何解决取Value值为Null
    Java+selenium 如何定位下拉框select
    Java+selenium 如何下拉移动滚动条【实战】
    Python创建第一个django应用
    如何在Pycharm中配置Python和Django(环境搭建篇)
    selenium+iframe 如何定位元素(实战)
    Java+Selenium 如何参数化验证Table表格数据
    如何实现一个字符的反转 (Java)
    Feature如何解决参数数量不匹配
  • 原文地址:https://www.cnblogs.com/coder2012/p/5199333.html
Copyright © 2011-2022 走看看