您的位置:首页 > 理论基础 > 计算机网络

错误提示:网络连接问题?试试用netstat监控网络连接!

2019-11-05 17:41 1591 查看

在我们进行系统运维的时候,经常需要对服务器上的网络连接情况进行查看和监控,比如在进行系统的部署过程中某个组件部署失败,而错误提示则指向了网络连接问题,此时我们需要对网络连接进行检查:进程的服务端口是否在侦听?进程的服务端口是否有连接?有哪些IP连接到了这台服务器上?有哪些IP连接到了特定的端口上?……等等等等。


通常我们都是在进行跟网络相关的问题排查时会需要查看服务器上的网络及端口的连接情况,本文就通过最常用的netstat命令来介绍网络连接情况的查看和监控。下面我们以循序渐进的方式来对几个不同的场景进行介绍。



查看本机有哪些端口正在侦听

先从最简单也是最常用的命令参数组合开始:netstat -lntup,通过这个命令可以查看到当前服务器是正在进行侦听的服务端口。通常我们会通过这个命令来确认某个端口是否在侦听,以判断绑定这个端口的服务进程是否在正常运行中。


参数解释:

-l或--listening:显示监听中的服务器的连接情况

-n或--numeric:用数字直接显示IP地址和端口,而不将其解析成域名或进程名

-t或--tcp:显示TCP传输协议的连接情况

-u或--udp:显示UDP传输协议的连接情况

-p或--programs:显示正在使用连接的进程ID和进程名称


示例图如下:

从图中可以看到,TCP 58725端口正在IP 10.100.104.4上侦听(LISTEN)中,有PID为17173的gse_ops进程提供服务


进一步,我们可以通过telnet 10.100.104.4 58725来验证此端口是否能正常接受连接。



筛选出特定的服务端口的状态

使用第一步的命令得到的列表可能是非常长的,不便于我们定位到我们想要查看的某个特定端口的状态,所以我们可以在上述命令的基础上,再使用grep命令来定位我们需要查看的端口:netstat -lntup | grep “:3306 ”。


其中示例命令中的3306是端口后,注意3306前加了个英文冒号:,在后面加了个空格,这样做的原因是避免类似如33061,13306这样的包含了3306的其他端口号的干扰。通过这样的筛选后,我们就将只会看到有关于3306端口的连接情况了。示例图如下:



从图中我们可以看出,TCP 3306的端口正在由mysqld进程在侦听中,但是并没有显示出已连接了3306端口的其他连接情况,所以我们可以改一下netstat的参数,将-l改成-a就可以看到其他状态了,如下图所示:


通过进程名称反查相应的端口

除了可以通过筛选端口方式来定位排查外,我们还可以通过筛选进程名称或者进程ID来反查这个进程的端口及其连接状态:netstat -lntup | grep “mysql”

实例图如下:


从图中可以看出,通过mysql这个进程名称来筛选,可以查到其侦听的是3306这个端口。同理可以通过筛选1040这个进程ID来进行定位。



统计连接状态

利用排序sort和重复计数uniq命令的配合,我们还可以对连接状态的数量进行统计:netstat -ant | awk '{print $6}' | sort | uniq –c | sort -n 示例图如下:


从图中我们可以大致看到这台服务器的连接数量,以此大致评估这台服务器的繁忙程度。其中前面两个数量为1的established和Foreign是从文字描述中截取的内容,可以忽略。


参数解释:

netstat -ant:以数字方式列出所有的TCP连接情况;

awk '{print $6}':以空格为分隔符,将每行的第6个字符串显示出来;如下图所示:


sort或sort -n:进行排序,其中-n是根据字符串的数值进行排序

uniq –c:检查重复出现的行,并将其重复次数显示出来



统计连接IP

基于第四步的连接状态数统计的实现,我们可以进一步对连接到这台服务器的IP进行统计:netstat -ant | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq –c | sort -n示例图如下:


通过连接IP数的统计,我们可以比较明确地看到有哪些IP跟这台服务器进行这网络连接通讯,以此判断连接是否正常,是否有额外的异常连接存在。


参数解释:

awk -F: '{print $1}':以冒号:为分隔符,将第1个字符串显示出来;

awk '{print $5}' | awk -F: '{print $1}':先把结果用空格分隔后的第5个字符串取出,再用冒号分隔后的第1个字符串取出;如下图所示:


以上就通过使用netstat命令来进行日常系统运维较常见的场景来介绍其使用方法,供大家参考。更多的语法命令可通过查询帮助或百度获取。


作者:何立


其他优质话题

如何纳管与定义多云?

DevOps是如何实现效率的提升?

腾讯PaaS Influxdb节点迁移

Oracle数据迁移后归档文件暴增怎么办?


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐