tcp的一些状态和netstat

最近才开始认识看《TCP/IP入门经典》,发现很多基础的东西都是精髓的东西,类似tcp/ip协议的设计从系统的角度看就是一种很精良的设计。它的分层,它协议制定中的容错处理,都很值得借鉴。恰好今天在用netstat,就一起总结下。

语法 netstat [option]
比较常见的参数:
-a:显示所有监听和不监听的socket
-n:数值化外部请求的地址,而不是名称
-l:只统计在监听的socket
-p:显示程序的PID和名称
-t:显示tcp的连接,不会统计在listen状态的socket,只统计依据建立连接的情况
-u:显示udp的连接,统计原理同tcp
展示参数
Proto:协议,例如tcp,udp
Recv-Q:
Send-Q:
Local Address:本地地址
Foreign Address:远程地址
State:状态

  • ESTABLISHED:连接状态
  • FIN_WAIT1:关闭连接操作 — 客户端状态 — 客户端发起关闭请求
  • FIN_WAIT2:关闭连接操作 — 客户端状态 — 等待关闭请求
  • TIME_WAIT:关闭连接操作 — 客户端状态 — 等待服务端关闭
  • CLOSE_WAIT:关闭连接操作 — 服务端状态 — 接到关闭请求
  • LAST_ACK:关闭连接操作 — 服务端状态 — 确认关闭请求
  • CLOSE:关闭连接操作 — 服务端状态 — 关闭请求
  • SYN_SENT:建立连接操作 — 客户端状态 — 客户端发起建立连接
  • SYN_RECV:建立连接操作 — 服务端状态 — 服务端接到到建立请求
  • LISTEN:监听状态
  • ESTABLISHED:建立连接状态

其中比较关键的是:
ESTABLISHED:是否已经超过系统能够承受的最大连接数
CLOSE_WAIT:一般问题都是处在服务端,这个数据很大,说明系统已经无法调度去是否连接了,这里可能是CPU问题,也可能是网络带宽问题。

一个完整的示意图
1

几个栗子:
显示服务器的名称:
[zhaoming.xue@activity-service01 ~]$ netstat | head
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 activity-servi:zabbix-agent 10.1.6.39:38528 TIME_WAIT
tcp 0 0 activity-service01.nh:23202 activity-service01:webcache TIME_WAIT
tcp 0 0 activity-servi:zabbix-agent 10.1.6.39:55579 TIME_WAIT
tcp 0 0 activity-service01.nh:18476 192.168.8.171:ldap ESTABLISHED
tcp 0 0 activity-servi:zabbix-agent 10.1.6.39:54863 TIME_WAIT
tcp 0 0 activity-service01.nh:23211 activity-service01:webcache TIME_WAIT
tcp 0 0 activity-service01.nh:23188 activity-service01:webcache TIME_WAIT
tcp 0 0 activity-service01.nh:58422 192.168.8.171:50510 ESTABLISHED
—————————————————————————————-

显示服务器的IP:
[zhaoming.xue@activity-service01 ~]$ netstat -n | head
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.1.8.16:10050 10.1.6.39:35427 TIME_WAIT
tcp 0 0 127.0.0.1:23202 127.0.0.1:8080 TIME_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:48001 TIME_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:55579 TIME_WAIT
tcp 1 0 10.1.8.16:18476 192.168.8.171:389 CLOSE_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:54863 TIME_WAIT
tcp 0 0 127.0.0.1:23211 127.0.0.1:8080 TIME_WAIT
tcp 0 0 10.1.8.16:58422 192.168.8.171:50510 ESTABLISHED
—————————————————————————————-

显示在监听的socket:
[zhaoming.xue@activity-service01 ~]$ netstat -l | head
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 activity-service01.nh:smux *:* LISTEN
tcp 0 0 *:ircu-2 *:* LISTEN
tcp 0 0 *:8139 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:58422 *:* LISTEN
tcp 0 0 *:51234 *:* LISTEN
tcp 0 0 *:zabbix-agent *:* LISTEN
—————————————————————————————-

显示所有的socket,包含监听和不监听:
[zhaoming.xue@activity-service01 ~]$ netstat -a | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 activity-service01.nh:smux *:* LISTEN
tcp 0 0 *:ircu-2 *:* LISTEN
tcp 0 0 *:8139 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:58422 *:* LISTEN
tcp 0 0 *:51234 *:* LISTEN
tcp 0 0 *:zabbix-agent *:* LISTEN
—————————————————————————————-

显示已经建立连接的socket:
[zhaoming.xue@activity-service01 ~]$ netstat -tn | head
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 1 0 10.1.8.16:18519 192.168.8.171:389 CLOSE_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:54931 TIME_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:46355 TIME_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:40648 TIME_WAIT
tcp 0 0 127.0.0.1:23433 127.0.0.1:8080 TIME_WAIT
tcp 1 0 10.1.8.16:18476 192.168.8.171:389 CLOSE_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:45871 TIME_WAIT
tcp 0 0 10.1.8.16:10050 10.1.6.39:44254 TIME_WAIT

查看各个不同状态的数目:
[zhaoming.xue@activity-service01 ~]$ netstat -a | awk ‘/^tcp/ {++s[$NF]}END{for (i in s) print i,s[i]}’
TIME_WAIT 37
CLOSE_WAIT 5
SYN_SENT 2
ESTABLISHED 306
LAST_ACK 2
LISTEN 19

作者: inter12

在这苦短的人生中,追求点自己的简单快乐

发表评论

电子邮件地址不会被公开。 必填项已用*标注