Linux主机服务信道状态查询
所谓的服务信道,就是指port,也叫通信端口、端口,是主机中应用程序对外的通道。通道的范围从0-65535,其中,0-1023保留给系统服务器专用,而且只有root权限执行者,才能使用此段范围,称为特权通道,而1024-65535则为非特权通道。
非特权通道主要有两种用途:开放给系统中其它应用服务程序使用,比如mysql默认占用3306端口,X11占用6000;另外,当使用client端程序,比如ssh,连接到其它server主机的服务时,比如连接到SSH2 server,系统会在1024-65535的端口池里,随机挑选一个未被使用的端口指定给client连接端,来当做client端这边的通信端口,此时,client端的IP、端口和服务器端的IP、端口,四者进程连接时唯一的连接识别,当双方完成连接所需的淘通时,可称为:client端和服务器端的连接已经建立(ESTABLISHED),可称这四者为一组socket pair。
服务通道可分为TCP port和UDP port。
如果查询通信状态呢?由前可知,socket pair的建立,代表主机和外界之间的通信情形,也可以自已连自已,这种信信状态,大部分指的是TCP协议的连接状态,有以下几种情况:
ESTABLISHEC:已建立连接
SYN_SENT:刚要发起连接
SYN_RECV:已收到连接要求
FIN_WAIT1:连接已关闭,正在进行中断
FIN_WAIT2:连接已关闭,正在等待远程中断
TIME_WAIT:中断连接后,仍在等待尚未处理的封包
CLOSE:此通信未使用
CLOSE_WAIT:远程已中断,等待通信关闭
LAST_ACK:远程已中断,等待通信关闭,正等待确认
LISTEN:监听中、等待接受连接
COLSING:套接字双方已关闭,但仍有数据未全传完
UNKNOWN:未知状态
如果想知道通信状态,可以使用netstat查看,用法如下:
- 查看所有的连接状态
netstat -a -n
-a表示所有接受连接和非接受连接的socket都列出来。-n表示全部以数字表示,不对主机名、端口、用户等信息。
- 查看所有TCP连接状态,包含已连接和未连接(仍在监听中)
netstat -ta -n
-t表示TCP协议的连接
- 查看所有UDP连接状态,包含已连接和未连接(仍在监听中)
netstat -ua -n
-u表示UDP协议的连接
- 只列出尚未连接的通道
netstat -l -n
-l表示仍在监听中、尚未连接的通道
- 查看所有TCP未连接的通道
netstat -lt -n
上图可以看到,这部主机针对本机开放了81、25等端口,针对外网开放了80、8066等端口。