首先来了解下端口的作用,在互联网中,如果IP地址是IP服务器在互联网中唯一的地址标识,那么可以想象下如果我有一台服务器,它有固定的公网IP地址,通过IP地址可以找到我的服务器。但是我的服务器中既启动了网页服务,又启动了文件传输服务,那么你的客户端访问我的服务器,到底该如何确定访问的是哪一个服务呢?
端口就是用于网络通信的接口,是数据从传输层向上传递到应用层的数据通道。我们可以简单地理解为每个常规服务都有一个默认端口(默认端口可以修改),这个端口是所有人都知道的,客户端可以通过固定的端口访问指定的服务。而我们通过在服务器中查看已经开启的端口号,就可以判断服务器中开启了那些服务。
netstat是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。使用 netstat 的目的就是清楚的了解到系统的哪些端口被哪些程序占用,这样在配置复杂的集群配置的时候开了哪些服务占用了哪些端口就一目了然了,不然很容易造成端口冲突问题。
netstat命令的基本信息如下:
.命令名称:netstat
.所在路径:/bin/netstat
.执行权限:所有用户
.功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
命令格式如下:
netstat [选项]
选项:
-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;
常用命令的使用:
1.查看本机开启的端口。
这是本机最常用的方式,使用选项"-tuln",因为使用了"-I"选项,所以只能看到监听状态的连接,而不能看到已经连接状态的连接
各输出项的介绍:
1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。
2) Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
3) Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。
4) Local Address:本机的 IP 地址和端口号。
5) Foreign Address:远程主机的 IP 地址和端口号。
6) State:状态。常见的状态主要有以下几种。
-LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
-ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
-SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
-SYN_RECV:接收到主动连接的数据包。
-FIN_WAIT1:正在中断的连接。
-FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
-TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
-CLOSED:套接字没有被使用。
在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。
2.查看本机有哪些程序开启的端口。
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。
比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口。
3.查看所有连接。
使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke 程序连接等。因为连接较多,所以输出的内容有很多。
我们可以在"-an"选项的输出中看到各种网络连接状态,而之前的"-tuln"选项则只能看到监听状态。
4.查看路由表
5.查看网络统计数据,netstat -s展示各协议的统计信息