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

统计当前TCP连接各种状态下的数量.

TIME_WAIT 205

ESTABLISHED 8474

遇到这种复杂的组合Shell脚本,基本方法是把它切分,一步步来观察,这样便于理解。

第一步:netstat -n ,这个我们可以单独在命令行下去执行的看下,得到的是一个列表, -n 表示以数字形式显示端口号

第二步:netstat -n|awk ‘/^tcp/ {print $NF}’ , 这个去执行的看下,得到的是一个列表, 是把所有上一个列表包含tcp的过滤出来,同时打印出了$NF这个字段,然后可能我们不懂$NF 是什么,你去查下呀,就知道了,这是当前记录里域个数,比方说我们用

netstat -n|awk ‘/^tcp/ {print $1}’ 就能打印出所有的第一列‘tcp’ ,netstat -n|awk ‘/^tcp/ {print $4}’ 我们就能得到IP的这一列,$NF就是最后一列,在这里相当于 netstat -n|awk ‘/^tcp/ {print $6}’

第三步:++S[$NF] 这个是什么意思呢,在上一步里面,执行的结果里面,我们看到$NF可能的数据有:TIME_WAIT、ESTABLISHED…等,那这里的意思就是定义了一个关联数组S ,++S[‘TIME_WAIT’]就是说每次碰到TIME_WAIT相同的键就计数增加,目的就是为了统计这各种可能数据出现的次数而已

第四步:for(a in S) print a,S[a] , 到这里就好理解了,上一步骤把所有出现的数据进行了统计,这里就是遍历这个数组S,然后打印出所有的数据和他们对应出现的次数了,这个for类似PHP里面的foreach.

注:TCP各种状态

CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。

LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

SYN_RCVD :表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。

SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。

ESTABLISHED :表示TCP连接已经成功建立。

FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到。

FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。

TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)

CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。

LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。

时间:2018-3-26 分类:练习

linux命令看进程的tcp链接,Linux下查看TCP连接的状态的shell命令相关推荐

  1. centos下查看调优apache状态的相关命令

    1.查看apache连接数 ps aux | grep httpd | wc -l 2.实时监控apache连接数 watch -n 1 -d "pgrep httpd|wc -l" ...

  2. window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001

    window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001 netstat -an netstat -anb

  3. Windows系统下pycharm运行.sh文件,执行shell命令

    (6条消息) Windows系统下pycharm运行.sh文件,执行shell命令_扑哧丶的博客-CSDN博客_pycharm运行shell脚本

  4. linux atop日志查看,A - atop - 监控Linux系统资源与进程的工具 - 《Linux命令大全搜索工具(旧版)》 - 书栈网 · BookStack...

    atop 监控Linux系统资源与进程的工具 补充说明 [非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU.内存.磁盘和网络)使用情况和进程运行情况,并能以日志 ...

  5. linux拒绝tcp链接,Linux 内核 TCP SACK 拒绝服务问题

    上次更新时间:太平洋夏令时 2019 年 6 月 18 日上午 11:45 CVE 标识符:CVE-2019-11477.CVE-2019-11478.CVE-2019-11479 这是此问题的更新信 ...

  6. linux命令看cpu使用率,怎么使用Linux命令查看CPU使用率

    本教程分享有关cpu使用图文教程内容,希望对您有用 在Linux系统操作中,有时需要查看cpu的使用率,这就需要用到Linux命令了,Linux查看cpu使用率的命令主要有4个,即top.vmstat ...

  7. linux dd看不到安装盘,Linux dd 命令 command not found dd 命令详解 dd 命令未找到 dd 命令安装 - CommandNotFound ⚡️ 坑否...

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil dd 命令根据指定的操作复制文件,并转换 ...

  8. linux杀死指定进程中的线程,linux查看进程和线程的命令

    1.任务:获得进程信息 :ps命令,或者top命令,它能显示当前运行中进程的相关信息,包括进程的PID. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以使用top命令. 2.任务:获得 ...

  9. linux 不小心删掉网卡配置文件的mac地址 如何恢复,linux/Centos下查看和修改网卡Mac地址(ifconfig命令)...

    本文转载自http://www.169it.com/article/14360294838474691537.html eth0 Link encap:Ethernet HWaddr 00:e4:56 ...

  10. Linux下查看文件或文件夹大小的命令df 、du、ls

    转自:http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的 ...

最新文章

  1. 【FPGA】ROM/EPROM的设计(使用加载文件的方式初始化)
  2. 十三、深入Python字典和集合
  3. 【实用】C#测试web服务是否可用
  4. Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示...
  5. 485. 最大连续1的个数 golang
  6. go 自定义error怎么判断是否相等_「GCTT 出品」Go 系列教程——30. 错误处理
  7. @@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
  8. python 自动打开登陆应用编码_Python+tkinter模拟“记住我”自动登录实例代码
  9. 2021MathorCup高校数学建模挑战赛——大数据竞赛的一些想法总结
  10. javaweb网上人才招聘系统的设计与实现
  11. 数学建模论文写作方法大总结
  12. ASP模式“救星降临”?(转)
  13. matlab 默认颜色顺序,MATLAB:设置行的颜色和样式顺序并行应用
  14. 0x752940B2(KernelBase.dll)(xxx.exe中有未经处理的异常:0xE0000008)
  15. [arc075f]Mirrored
  16. 经纬度相关公式及实现
  17. 定时任务二:No thread-bound request found
  18. 图像沿列方向降维的AVX2实现讨论
  19. 相关搜索------搜索引擎研究之三
  20. 苏宁如何通过“818”电商节重构电商秩序?

热门文章

  1. 二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W
  2. [计算机网络】【网络设备】虚拟局域网
  3. Java | PTA练习:伪随机数题解
  4. Mac Mysql5.7.6+免安装版教程
  5. [SV]SystemVerilog Structured Procedures --- always_comb、always_ff、always_latch
  6. 微信小程序上传图片(预览 删除 限制图片大小、张数)
  7. 花间一壶酒之杂文杂谈
  8. Java实现 LeetCode 365 水壶问题
  9. [论文速览]A Neural Attention Model for Sentence Summarization
  10. Parameterize Method(令函数携带参数)