方法一:利用netstat命令

统计 TIME_WAIT/CLOSE_WAIT/ESTABLISHED/LISTEN 等TCP状态的连接数

netstat -tan |grep ^tcp |awk '{++a[$6]} END{for (i in a) print i, a[i]}'

方法二:利用ss命令

ss -s
Total: 541 (kernel 0)
TCP: 77 (estab 27, closed 45, orphaned 0, synrecv 0, timewait 45/0), ports 0 Transport Total IP IPv6
* 0 - -
RAW 0 0 0
UDP 8 5 3
TCP 32 31 1
INET 40 36 4
FRAG 0 0 0

TCP连接状态回顾

  • CLOSED:初始状态,表示没有任何连接。
  • LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求。
  • SYN_SENT:发送连接请求后等待确认信息。当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入SYN_SENT状态,然后等待Server端发送三次握手中的第2个包。
  • SYN_RECEIVED:收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。通常是建立TCP连接的三次握手过程中的一个中间状态,表示Server端的Socket接收到来自Client的SYN包,并作出回应。
  • ESTABLISHED:表示连接已经建立,可以进行数据传输。
  • FIN_WAIT_1:主动关闭连接的一方等待对方返回ACK包。若Socket在ESTABLISHED状态下主动关闭连接并向对方发送FIN包(表示己方不再有数据需要发送),则进入FIN_WAIT_1状态,等待对方返回ACK包,此后还能读取数据,但不能发送数据。在正常情况下,无论对方处于何种状态,都应该马上返回ACK包,所以FIN_WAIT_1状态一般很难见到。
  • FIN_WAIT_2:主动关闭连接的一方收到对方返回的ACK包后,等待对方发送FIN包。处于FIN_WAIT_1状态下的Socket收到了对方返回的ACK包后,便进入FIN_WAIT_2状态。由于FIN_WAIT_2状态下的Socket需要等待对方发送的FIN包,所有常常可以看到。若在FIN_WAIT_1状态下收到对方发送的同时带有FIN和ACK的包时,则直接进入TIME_WAIT状态,无须经过FIN_WAIT_2状态。
  • TIME_WAIT:主动关闭连接的一方收到对方发送的FIN包后返回ACK包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间(2MSL)以确保对方接收到ACK包(考虑到丢失ACK包的可能和迷路重复数据包的影响),最后回到CLOSED状态,释放网络资源。
  • CLOSE_WAIT:表示被动关闭连接的一方在等待关闭连接。当收到对方发送的FIN包后(表示对方不再有数据需要发送),相应的返回ACK包,然后进入CLOSE_WAIT状态。在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
  • LAST_ACK:被动关闭连接的一方在CLOSE_WAIT状态下完成数据的发送后便可向对方发送FIN包(表示己方不再有数据需要发送),然后等待对方返回ACK包。收到ACK包后便回到CLOSED状态,释放网络资源。
  • CLOSING:比较罕见的例外状态。正常情况下,发送FIN包后应该先收到(或同时收到)对方的ACK包,再收到对方的FIN包,而CLOSING状态表示发送FIN包后并没有收到对方的ACK包,却已收到了对方的FIN包。有两种情况可能导致这种状态:其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送FIN包的情况;其二,如果ACK包丢失而对方的FIN包很快发出,也会出现FIN先于ACK到达。

【参考】

http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html

最新文章

  1. appium踩过的坑(1):NoClassDefFoundError
  2. PAT 1025. 反转链表 (25)
  3. java练习题:解一元二次方程、判断闰年、判断标准身材、三个数取最大值
  4. COJ983 WZJ的数据结构(负十七)
  5. Java文件读写
  6. windows phone 操作 http异步返回结果
  7. sed线上经典案例之-同时替换多个字符串
  8. R学习日记——分解时间序列(非季节性数据)
  9. 京东笔试---通过考试(DP)
  10. arrow functions 箭头函数
  11. set 容器的用法
  12. HTTP rfc是什么及其工作过程
  13. Eclipse 个人使用配置
  14. Redis入门第一课
  15. django系列5.1--ORM对数据库的操作
  16. 779D. String Game 二分 水
  17. 20145328 《Java程序设计》第8周学习总结
  18. CentOS expr和let
  19. MyISAM引擎表出现“Error 'Incorrect key file for table”
  20. 【SHOI2015】脑洞治疗仪(恶心的线段树,区间最大子段和)

热门文章

  1. Oracle VM VirtualBox虚拟机安装Ubuntu Server
  2. Java并发编程-Thread类的使用
  3. Docker,win10
  4. Linux下安装MATLAB
  5. Android 获取图片转bitmap
  6. js动态加载数据到文本框指定的位置
  7. outlook更改邮件存储路径
  8. [leetcode]253. Meeting Rooms II 会议室II
  9. 解题报告-603. Consecutive Available Seats
  10. Linux查看用户及分组