linux-command-02 netstat
概念解析
Netstat
在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
如果你的计算机有时候接收到的数据包导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据包。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。
netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知有哪些网络连接正在运作。使用时如果不带参数,netstat显示活动的 TCP 连接。
注意
(1)netstat命令是net-tools工具集中的一员
(2)ss命令是iproute工具集中的一员
所以要使用netstat命令的话,需要先安装net-tools
1 | [root@node4 ~]# netstat -tanl |
总结
Linux netstat命令用于显示网络状态。
利用netstat指令可让你得知整个Linux系统的网络情况。
一般用netstat -an 来显示所有连接的端口并用数字表示。
语法
1 | netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip] |
参数说明
1 | [root@node4 ~]# netstat ? |
1 | -a或--all 显示所有连线中的Socket。 |
常用选项
netstat -a
本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
netstat -b
该参数可显示在创建网络连接和侦听端口时所涉及的可执行程序。
netstat -s
本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
netstat -e
本选项用于显示关于以太网的统计数据,它列出的项目包括传送数据报的总字节数、错误数、删除数,包括发送和接收量(如发送和接收的字节数、数据包数 [1] ),或有广播的数量。可以用来统计一些基本的网络流量。
netstat -r
本选项可以显示关于路由表的信息,类似于后面所讲使用routeprint命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。
netstat -n
显示所有已建立的有效连接。
netstat -p
显示协议名查看某协议使用情况
常见状态
即连接状态。在原模式中没有状态,在用户数据报协议中也经常没有状态,于是状态列可以空出来。若有状态,通常取值为:
LISTEN
侦听来自远方的TCP端口的连接请求
SYN-SENT
在发送连接请求后等待匹配的连接请求
SYN-RECEIVED
在收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED
代表一个打开的连接
FIN-WAIT-1
等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2
从远程TCP等待连接中断请求
CLOSE-WAIT
等待从本地用户发来的连接中断请求
CLOSING
等待远程TCP对连接中断的确认
LAST-ACK
等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT
等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED
没有任何连接状态
实例解析
1.显示详细的网络状况
1 | [root@node4 ~]# netstat -a |
2.显示当前UDP连接状况,下图中可以看到一个UDP连接也没有
1 | [root@node4 ~]# netstat -nu |
3.显示UDP端口号的使用情况
1 | [root@node4 ~]# netstat -apu |
4.显示TCP端口号的使用情况,加不加参数n的对比。可以看到在local字段,没加n之前显示的是主机名和服务名称,加了n之后显示的是IP地址和端口号。
1 | [root@node4 ~]# netstat -apt |
常用命令
netstat查看当前服务和监听端口
加p的话,会多显示一个字段:PID/Program name,表示进程号和进程名
注意:使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。
1 | [root@node4 ~]# netstat -atun |
只查看监听(LISTEN)中的连接
1 | [root@node4 ~]# netstat -ntl |
如下图,和-ant参数对比呢,-ntl显示的连接只有LISTEN状态的连接。
注意:如果只查看监听(LISTEN)中的连接,就不要使用 -a 选项,否则 netstat 会列出所有连接,而不仅仅是监听端口。
获取进程名、进程号以及用户 ID
查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个栗子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。
这里需要使用 -p 选项查看进程信息。
注意:使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。
1 | [root@node4 ~]# netstat -nplt |
如下图,和不加p时候对比,加了p一目了然地看到了sshd服务连接也是监听状态。
三条命令的对比如下,使用 -ep 选项可以同时查看进程名和用户名。
1 | [root@node4 ~]# netstat -nplt |
打印统计数据
netstat 可以打印出网络统计数据,包括某个协议下的收发包数量。
下面列出所有网络包的统计情况:
这里如果想只打印出 TCP 或 UDP 协议的统计数据,只要加上对应的选项(-t 和 -u)即可
1 | [root@node4 ~]# netstat -s |
显示内核路由信息
使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 -n 选项禁止域名解析。
1 | [root@node4 ~]# netstat -nr |
打印网络接口(网卡)
使用-i参数打印网络接口信息,配合-e参数就像ip add命令一样
netstat 持续输出
加个-c参数即可持续输出,按ctrl+c打断
1 | [root@node4 ~]# netstat -iec |
netstat配合grep使用
1 | [root@node4 ~]# netstat -antp | grep ESTABLISHED |