1、生产服务器netstat tcp链接状态................................................................................ 2nginx
1.1生产服务器某个业务LVS负载均衡上链接状态数量............................................... 2web
1.2生产服务器某个业务web上链接状态数量............................................................ 3服务器
1.3 生产服务器某个业务db上链接状态数量.............................................................. 3网络
2、tcp链接状态的描述说明(netstat输出)........................................................................ 4并发
2.1 执行netstat -n查看输出结果共6列..................................................................... 4负载均衡
2.2 经过man netstat查看netstat输出结果信息......................................................... 4less
2.3netstat第六列State的状态信息......................................................................... 5socket
2.4netstat第六列State状态信息转换图表.............................................................. 6tcp
2.4.1 状态参考图一................................................................................................... 7this
2.4.2 状态参考图二................................................................................................... 9
2.4.3 状态参考图三................................................................................................. 10
2.4.4 客户端的状态变化描述............................................................................ 10
2.4.5 服务器的状态变化描述............................................................................ 10
2.4.6 其余的状态变化描述总结......................................................................... 11
更多目录见博文结尾。
[oldboy@LVS-1-1 ~]$ netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 9137
CLOSE_WAIT 207
FIN_WAIT1 547
ESTABLISHED 597
FIN_WAIT2 74
SYN_RECV 70
CLOSING 55
LAST_ACK 8
[root@lvs_nginx~]#netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 422
CLOSE_WAIT 590
FIN_WAIT1 56
FIN_WAIT2 28
ESTABLISHED 1731
[root@web1 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 418
FIN_WAIT1 7
FIN_WAIT2 3
ESTABLISHED 1097
LAST_ACK 2
[root@web2 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 250
FIN_WAIT1 2
FIN_WAIT2 3
ESTABLISHED 1032
LAST_ACK 2
[root@old_web ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 342
CLOSE_WAIT 618
FIN_WAIT1 37
FIN_WAIT2 3
ESTABLISHED 1681
SYN_RECV 1
[root@K32_50718 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 4146
FIN_WAIT1 352
FIN_WAIT2 1112
ESTABLISHED 8451
SYN_RECV 186
CLOSING 9
LAST_ACK 102
[root@web_slave ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 263
FIN_WAIT1 1
FIN_WAIT2 48
ESTABLISHED 918
[root@OLDBOY ~]# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local AddressForeign AddressState
tcp00 10.0.0.183:5058410.0.0.181:22ESTABLISHED
[root@oldboy ~]# man netstat
OUTPUT
Active Internet connections (TCP, UDP, raw)
Proto
The protocol (tcp, udp, raw) used by the socket.
第一列为socket使用的协议。
Recv-Q
The count of bytes not copied by the user program connected to this socket.
第二列为接到的可是还没处理的字节数。
Send-Q
The count of bytes not acknowledged by the remote host.
第三列为已经发送的可是没有被远程主机确认收到的字节数。
Local Address
Address and port number of the local end of the socket.Unless the --numeric(-n)
optionisspecified,thesocketaddress is resolved to its canonical host name
(FQDN), and the port number is translated into the corresponding service name.
第四列为 本地的地址及端口。
Foreign Address
Address and port number of the remote endofthesocket.Analogousto"Local Address."
第五列为外部的地址及端口。
State
Thestateofthesocket.Sincethere are no states in raw mode and usually no
states used in UDP, this column may be left blank. Normally this can be one of sev-
eral values:
第六列为socket的状态,一般仅仅有tcp的状态,状态值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_WAIT等,详见下文。其中,最重要的是第六列。
若是咱们执行man netstat能够找到以下的帮助信息
State
Thestateofthesocket.Sincethere are no states in raw mode and usually no
states used in UDP, this column may be left blank. Normally this can be one of sev-
eral values:
第六列为socket的状态,一般仅仅有tcp的状态,状态值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_WAIT等,详见下文。其中,最重要的是第六列。
ESTABLISHED
The socket has an established connection.
socket已经创建链接,表示处于链接的状态,通常认为有一个ESTABLISHED认为是一个服务的并发链接。这个链接状态在生产场景很重要,要重点关注。
SYN_SENT
The socket is actively attempting to establish a connection.
socket正在积极尝试创建一个链接,即处于发送后链接前的一个等待但未匹配进入链接的状态。
SYN_RECV
A connection request has been received from the network.
已经从网络上收到一个链接请求。
FIN_WAIT1
The socket is closed, and the connection is shutting down.
socket已关闭,链接正在或正要关闭。
FIN_WAIT2
Connectionisclosed,andthesocket is waiting for a shutdown from the remote end.
链接已关闭,而且socket正在等待远端结束。
TIME_WAIT
The socket is waiting after close to handle packets still in the network.
socket正在等待关闭处理仍在网络上的数据包,这个链接状态在生产场景很重要,要重点关注。
CLOSED The socket is not being used.| socket不在被占用了。
CLOSE_WAIT
The remote end has shutdown, waiting for the socket to close.
远端已经结束,等待socket关闭。
LAST_ACK
The remote end has shut down, and the socket is closed. Waiting for acknowl-edgement.|
远端已经结束,而且socket也已关闭,等待acknowl-edgement。
LISTEN Thesocketislisteningforincoming connections.Such sockets are not
included in the output unless you specify the --listening (-l) or --all (-a)
option.
socket正在监听链接请求。
CLOSING
Both sockets are shut down but we still don’t have all our data sent.
sockets关闭,可是咱们仍旧没有发送数据。
UNKNOWN
The state of the socket is unknown
未知的状态。
TCP的状态图,这是一个看起来比较复杂的状态迁移图,由于它包含了两个部分---服务器的状态迁移和客户端的状态迁移,若是从某一个角度出发来看这个图,就会清晰许多,这里面的服务器和客户端都不是绝对的,发送数据的就是客户端,接受数据的就是服务器。
经过状态参考图三,客户端的状态能够用以下的流程来表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
以上流程是在程序正常的状况下应该有的流程,在创建链接时,当客户端收到SYN报文的ACK之后,客户端就打开了数据交互地链接。而结束链接则一般是客户端主动结束的,客户端结束应用程序之后,须要经历FIN_WAIT_1,FIN_WAIT_2等状态,这些状态的迁移就是前面提到的结束链接的四次握手。
经过状态参考图三,服务器的状态能够用以下的流程来表示:
CLOSED->LISTEN->SYN_RECVD->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
在创建链接的时候,服务器端是在第三次握手以后才进入数据交互状态,而关闭链接则是在关闭链接的第二次握手之后(注意不是第四次)。而关闭之后还要等待客户端给出最后的ACK包才能进入初始的状态。
针对服务器和客户端两方面的总结以下
1)LISTEN->SYN_SENT,对于这个解释就很简单了,服务器有时候也要打开链接的嘛。
2)SYN_SENT->SYN_RECVD,服务器和客户端在SYN_SENT状态下若是收到SYN数据报,则都会发送SYN的ACK数据报并把自身状态调整到SYN_RECVD,准备进入ESTABLISHED
3)SYN_SENT->CLOSED,在发送超时的状况下,会返回到CLOSED状态。
4)SYN_RECVD->LISTEN,若是受到RST包,会返回到LISTEN状态。
5)SYN_RECVD->FIN_WAIT_1,这个迁移是说,能够不用到ESTABLISHED状态,而能够直接跳转到FIN_WAIT_1状态并等待关闭。