netstat
前面我们学习了网络的有关基础知识,今天我们来介绍一个Linux下面的关于网络的一个重要指令——netstat.
功能说明
netstat是基于Netstat这个命令行工具的指令,它可以用来查询系统上的网络套接字连接情况,包括tcp,udp以及Unix套接字;另外它还能列出路由表,接口状态和多播成员等信息。
主要选项
关于netstat命令的选项有很多,这里我们只介绍常见选项,关于选项和选项的作用如下图:
netstat 统计字段
[root@sdw3 ~]# netstat -anp
Active Internet connections (servers and established)
#协议 本地地址 外部地址 状态 pik/程序名
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.16.10.235:28268 0.0.0.0:* LISTEN 65278/postgres
tcp 0 0 0.0.0.0:6188 0.0.0.0:* LISTEN 20345/java
tcp 0 0 172.16.10.235:40269 0.0.0.0:* LISTEN 64910/postgres
tcp 0 0 0.0.0.0:37455 0.0.0.0:* LISTEN 2835/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2706/rpcbind
tcp 0 0 172.16.10.235:13872 0.0.0.0:* LISTEN 65166/postgres
tcp 0 0 172.16.10.235:34000 0.0.0.0:* LISTEN 27257/postgres
tcp 0 0 172.16.10.235:17809 0.0.0.0:* LISTEN 65288/postgres
tcp 0 0 172.16.10.235:18449 0.0.0.0:* LISTEN 65272/postgres
tcp 0 0 172.16.10.235:34001 0.0.0.0:* LISTEN 27251/postgres
tcp 0 0 172.16.10.235:16275 0.0.0.0:* LISTEN 65268/postgres
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3042/sshd
tcp 0 0 172.16.10.235:26327 0.0.0.0:* LISTEN 65274/postgres
(1) 协议(TCP或UDP)
(2) 本地地址:在本地计算机和正在使用的端口号的 IP 地址。 如果不指定-n参数显示在本地计算机的 IP 地址相对应的名称和端口的名称。如果端口尚未建立,端口号显示为星号。
(3) 外部地址:套接字连接到远程计算机的 IP 地址和端口号。 如果不指定-n参数显示对应的 IP 地址和端口的名称。 如果端口尚未建立,端口号显示为星号。
(4) 状态:表示一个TCP连接的状态,可能的状态如下所示:
LISTENING:(Listening for a connection.) 侦听来自远方的TCP端口的连接请求
SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.) 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.) 再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:(Connection established.) 代表一个打开的连接
FIN-WAIT-1:(Closed; sent FIN.) 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.) 从远程TCP等待连接中断请求
CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.) 等待从本地用户发来的连接中断请求
CLOSING:(Closed; exchanged FIN; waiting for FIN.) 等待远程TCP对连接中断的确认
LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.) 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. ) 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:(Connection is closed.) 没有任何连接状态
有关TCP 连接的状态的详细信息,请参阅 RFC 793
(5) recv-Q 表示网络接收队列,Q是Queue的缩写
表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
(6) send-Q 表示网路发送队列
对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
实例演示
查看所有端口
netstat -a
这条命令会列出所有的端口,包括监听的和未监听的。
查看tcp协议
netstat -t
列出所有的tcp协议的端口,结果如下:
[root@sdw3 ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:6188 *:* LISTEN
tcp 0 0 sdw3:19598 *:* LISTEN
tcp 0 0 *:37455 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 sdw3:34000 *:* LISTEN
tcp 0 0 sdw3:34001 *:* LISTEN
tcp 0 0 sdw3:31474 *:* LISTEN
tcp 0 0 sdw3:14773 *:* LISTEN
tcp 0 0 sdw3:netmap_lm *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
查看udp协议
netstat -ua
同样,这条命令表示列出所有的UDP协议的端口。
查看程序运行的pid
netstat -ap | grep '程序名'
例如:
[root@sdw3 ~]# netstat -nap | grep 'rsyslog'
udp 0 0 0.0.0.0:514 0.0.0.0:* 2624/rsyslogd
udp 0 0 :::514 :::* 2624/rsyslogd
禁止域名解析
这个主要netstat中的-n选项有关,我们先来看看不带n时所输出的结果。
[root@sdw3 ~]# netstat -ap | grep 'rsyslog'
udp 0 0 *:syslog *:* 2624/rsyslogd
udp 0 0 *:syslog *:* 2624/rsyslogd
unix 12 [ ] DGRAM 15429 2624/rsyslogd /dev/log
下面我们再来看看加上n 选项后的输入结果。
[root@sdw3 ~]# netstat -nap | grep 'rsyslog'
udp 0 0 0.0.0.0:514 0.0.0.0:* 2624/rsyslogd
udp 0 0 :::514 :::* 2624/rsyslogd
我们发现在local address 即主机地址这一栏中,如果没有带n选项,会将套接字所对应的域名解析出来,如果加上n选项,那么就不会显示,即禁止域名解析的功能,这样做有助于提高查询速度,因为减少了对主机域名的查询。
持续输出netstat信息
这个没有什么好说的,大家自己试一试指令即可。
netstat -c
显示路由表的信息
netstat -r
这条指令相当于route指令,会输出核心路由信息。
[root@sdw3 ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
172.16.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth4
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth4
0.0.0.0 172.16.10.1 0.0.0.0 UG 0 0 0 eth4
显示接口信息
netstat -i
分类统计各个协议的相关信息
netstat -sa