通过netstat -anp可以查看机器的当前连接状态:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 00.0.0.0:8139 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 00.0.0.0:26837 0.0.0.0:* LISTEN -
tcp 0 00.0.0.0:1046 0.0.0.0:* LISTEN -
tcp 0 0127.0.0.1:25 0.0.0.0:* LISTEN -
tcp6 0 910 10.100.83.145:57142 10.100.83.140:80 ESTABLISHED 7072/java
tcp6 0 010.100.83.145:57114 10.100.83.140:80 ESTABLISHED 7072/java
tcp6 0 914 10.100.83.145:57117 10.100.83.140:80 ESTABLISHED 7072/java
tcp6 0 910 10.100.83.145:57126 10.100.83.140:80 ESTABLISHED 7072/java
tcp6 0 010.100.83.145:57159 10.100.83.140:80 ESTABLISHED 7072/java
tcp6 0 010.100.83.145:57128 10.100.83.140:80 ESTABLISHED 7072/java
一个较详细的解释是:
WhatIt Means
"Proto"is short for protocol, which is either TCP or UDP. "Recv-Q" and"Send-Q" mean receiving queue and sending queue. These should alwaysbe zero; if they're not you might have a problem. Packets should not be pilingup in either queue, except briefly, as this example shows:
tcp 0593 192.168.1.5:34321 venus.euao.com:smtp ESTABLISHED
Thathappened when I hit the "check mail" button in KMail; a brief queuingof outgoing packets is normal behavior. If the receiving queue is consistentlyjamming up, you might be experiencing a denial-of-service attack. If thesending queue does not clear quickly, you might have an application that issending them out too fast, or the receiver cannot accept them quicklyenough.
"Localaddress" is either your IP and port number, or IP and the name of aservice. "Foreign address" is the hostname and service you areconnected to. The asterisk is a placeholder for IP addresses, which of coursecannot be known until a remote host connects. "State" is the currentstatus of the connection. Any TCP state can be displayed here, but these threeare the ones you want to see.
大致的意思是:
Recv-Q Send-Q分别表示网络接收队列,发送队列。Q是Queue的缩写。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。如文中的示例,短暂的Send-Q队列发送packets非0是正常状态。
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Recv-Q:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走。
Send-Q:对方没有收到的数据或者说没有Ack的,还是本地缓冲区。
通过netstat的这两个值就可以简单判断程序收不到包到底是包没到还是包没有被进程接收。