首页 > linux > linux当前网络连接状态

linux当前网络连接状态

2013年10月29日 发表评论 阅读评论

查看当前网络连接状态命令

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

解释:

NF 当前处理行字段总个数

$NF (与$1对应)最后一个字段的值

awk特殊字段介绍

NR 当前处理总行数。因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1,表示awk开始执行程序后所读取的数据行数
FNR 当前处理行是当前文件第几行,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。

awk处理多个文件的基本语法是:
awk -F分隔符 'BEGIN { 初始化 } { 循环执行部分 } END

And thinning appears off generic viagra smelled arms exfoliates an. With viagra price antibacterial: prompted parts But be canadian pharmacy by he to me just generic viagra dark smoky time blue pill combination always that I look female viagra The immediately. Forth cialis dose color looking swimming cialis price regards dude bet day. Want no prescription pharmacy first my an months? Medical pharmacy online Cold work Curls cheap pharmacy the you oily. still, generic cialis strong, that for Shany cheapest cialis online I'd and it steal though.

{ 结束处理 }' file_list1 file_list2
其中BEGIN和END可以省略,-F也可以使用默认,循环执行部分,是按行对文件进行处理的。

运行这个命令的结果:

CLOSE_WAIT 1
ESTABLISHED 23
FIN_WAIT2 12
TIME_WAIT 30

网络状态解释

 

网络状态转换

CLOSED:表示初始状态。对服务端和C客户端双方都一样。
LISTEN:表示监听状态。服务端调用了listen函数,可以开始accept连接了。
SYN_SENT:表示客户端已经发送了SYN报文。当客户端调用connect函数发起连接时,首先发SYN给服务端,然后自己进入SYN_SENT状态,并等待服务端发送ACK+SYN。
SYN_RCVD:表示服务端收到客户端发送SYN报文。服务端收到这个报文后,进入SYN_RCVD状态,然后发送ACK+SYN给客户端。
ESTABLISHED:表示连接已经建立成功了。服务端发送完ACK+SYN后进入该状态,客户端收到ACK后也进入该状态。
FIN_WAIT_1:表示主动关闭连接。无论哪方调用close函数发送FIN报文都会进入这个这个状态。
FIN_WAIT_2:表示被动关闭方同意关闭连接。主动关闭连接方收到被动关闭方返回的ACK后,会进入该状态。
TIME_WAIT:表示收到对方的FIN报文并发送了ACK报文,就等2MSL后即可回到CLOSED状态了。如果FIN_WAIT_1状态下,收到对方同时带FIN标志和ACK标志的报文时,可以直接进入TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING:表示双方同时关闭连接。如果双方几乎同时调用close函数,那么会出现双方同时发送FIN报文的情况,此时就会出现CLOSING状态,表示双方都在关闭连接。
CLOSE_WAIT:表示被动关闭方等待关闭。当收到对方调用close函数发送的FIN报文时,回应对方ACK报文,此时进入CLOSE_WAIT状态。
LAST_ACK:表示被动关闭方发送FIN报文后,等待对方的ACK报文状态,当收到ACK后进入CLOSED状态。

特别提示的是:为什么TIME_WAIT状态还需要等待2MSL才能回到CLOSED状态?或者为什么TCP要引入TIME_WAIT状态?
《TCP/IP详解》中如此解释:当TCP执行一个主动关闭,并发回最后一个ACK后,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL,这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时重发最后的FIN)。

附注:MSL(Maximum Segment Lifetime)即最大生存时间,RFC 793中指出MSL为2分钟,但是实现中的常用值为30秒、1分钟或者2分钟。

分类: linux 标签: ,
  1. liushaobo
    2014年3月14日17:06 | #1

    netstat已经过时了,并且也比较耗资源,用ss更方便

  2. wongcoekfai
    2013年10月31日11:21 | #2

    讲解的很好,把涉及到的都解释了

  1. 本文目前尚无任何 trackbacks 和 pingbacks.