Linux下用 netstat 查看TCP连接状态并发数,命令解释 发表于 2019-10-22 | 分类于 Linux | 暂无评论 ## 1.数组 abc[1]= “xiaohong" abc : 为数组名称 [1] : 为数组元素下标,可以理解为数组的第1个元素 xiaohong : 元素内容 ## 2.命令 ```shell # netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 248 192.168.1.2:22 192.168.2.3:59343 ESTABLISHED # netstat -an|awk '/^tcp /{++S[$NF]} END {for(a in S) print a,S[a]}' LISTEN 5 ESTABLISHED 1 ``` (1)Awk在读取第一行的时候,会读取这个数组,此时的数组是这样的:S[LISTEN]++ (2)此时S[LISTEN]的值是未定义的。 但是由于有运算符号++ Awk会将数字0自动赋值给 S[LISTEN] 然后在做++运算 (3)此时S[LISTEN] 做++ ,默认值是0,++后是1 (4)那么在读第二个 LISTEN 时,此时S[LISTEN]的值已经经过上次运算为1.此时在做一次运算。也就是1+1 现在S[LISTEN]的值为2。 (5)总结,最后的值是多少,也就意味着,LISTEN运算了多少次,也意味着S[LISTEN]出现了多少次。 ## 3.TCP连接状态详解 CLOSED: 无连接是活动的或正在进行 LISTEN: 服务器在等待进入呼叫 SYN_RECV: 一个连接请求已经到达,等待确认 SYN_SENT: 应用已经开始,打开一个连接 ESTABLISHED: 正常数据传输状态 FIN_WAIT1: 应用说它已经完成 FIN_WAIT2: 另一边已同意释放 ITMED_WAIT: 等待所有分组死掉 CLOSING: 两边同时尝试关闭 TIME_WAIT: 另一边已初始化一个释放 LAST_ACK: 等待所有分组死掉