您的位置:首页 > 路由器知识路由器知识

2023超全Linuxnetstat命令详解:小白也能看懂的网络诊断神器(含10个实战技巧+避坑指南)

2026-03-04人已围观

2023超全Linux netstat命令详解:小白也能看懂的网络诊断神器(含10个实战技巧+避坑指南)

一、3分钟搞懂netstat:网络世界的"体检报告"

想象你家的网络是一个热闹的集市,各种数据像小贩和顾客一样在里面穿梭。那谁来管理这个集市的秩序,告诉我们有多少摊位(端口)在营业,哪些顾客(IP地址)在和摊主(服务)交易呢?netstat就是干这个的!它就像集市入口的保安队长,手里拿着一本登记册,能把所有进出的人和事都给你报得清清楚楚。

简单说,netstat(network statistics) 是Linux系统里查看网络状态的"瑞士军刀",不管你是想知道谁在偷偷连接你的电脑,还是检查自己开的服务是否正常运行,甚至排查为什么网页打不开,它都能帮上忙。比如你用QQ和朋友聊天,netstat就能显示出这个聊天连接的IP地址、用的哪个端口,甚至哪个程序在处理这个连接——就像医院的X光机,能把网络里看不见的连接都照得明明白白。

二、零基础入门:netstat基础参数"说明书"

1. 最常用的5个"入门级"参数

-a:把所有"摊位"都亮出来

就像集市保安把所有营业中和空置的摊位都列出来,`netstat -a`会显示所有网络连接,包括正在监听(等顾客)和已经建立连接(正在交易)的。比如你会看到类似`LISTEN`(等待连接)、`ESTABLISHED`(已连接)这样的状态,相当于摊位招牌上写着"营业中"还是"招租中"。

-n:用数字说话,拒绝"花名"

默认情况下,netstat会把IP地址显示成域名(比如把`114.114.114.114`显示成`public1.114dns.com`),端口号显示成服务名(比如把80端口显示成`http`)。但有时候我们需要看"真面目",就像查快递时要看快递单号而不是物品名称,`netstat -n`就能直接显示IP地址和端口号的数字形式,避免解析域名的延迟。

-t/-u:分别查看TCP和UDP连接

网络数据传输主要有两种"运输方式":TCP就像快递,需要收件人确认收到(可靠但慢);UDP就像平信,寄出去就不管了(快但可能丢件)。`netstat -t`只看TCP连接(比如浏览网页、微信聊天),`netstat -u`只看UDP连接(比如视频通话、在线游戏)。如果想同时看两种,就用`netstat -tu`。

-p:揪出"幕后老板"

有时候发现一个陌生连接,想知道是哪个程序干的?`netstat -p`(需要root权限,记得加`sudo`)就像侦探查户口,能显示每个连接对应的进程ID(PID)和程序名称。比如看到`/usr/bin/sshd`,就知道是SSH服务在工作;看到`/usr/lib/firefox/firefox`,就明白是浏览器在联网。

-r:查看"交通地图"——路由表

如果把网络比作城市交通网,路由表就是导航地图,告诉数据该走哪条路。`netstat -r`会显示系统的路由信息,包括目标网络(要去的地方)、网关(必经之路的收费站)、子网掩码(区域划分)等。比如默认网关`0.0.0.0`就像城市的主干道入口,所有不知道怎么走的数据都会从这里出发。

2. 进阶组合拳:参数搭配使用效果翻倍

新手最常用的组合是 `netstat -tunlp`(记得加`sudo`),这串"密码"能一次性显示:

- t:TCP连接

- u:UDP连接

- n:数字形式显示IP和端口

- l:只看正在监听的连接(`LISTEN`状态)

- p:显示进程信息

执行后你会看到类似这样的结果:

```

tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 1234/sshd

udp 0 0 192.168.1.100:123 0.0.0.0: 5678/ntpd

```

翻译成人话就是:"有个叫sshd的程序(PID 1234)在所有IP的22端口监听TCP连接;有个叫ntpd的程序(PID 5678)在192.168.1.100的123端口运行UDP服务。"

三、手把手教程:从安装到实战配置

1. 安装netstat:简单两步走

现在很多Linux系统(比如Ubuntu 20.04+、CentOS 8+)默认没装netstat,因为它属于`net-tools`工具包。安装方法超简单:

Debian/Ubuntu系统:

打开终端,输入`sudo apt update && sudo apt install net-tools`,回车后输入密码,等2分钟就装好了。

CentOS/RHEL系统:

输入`sudo yum install net-tools`或`sudo dnf install net-tools`,同样输入密码确认即可。

装完后输入`netstat -v`,如果看到版本信息,就说明安装成功了,就像新买的工具拆箱后试一下能不能用。

2. 基础网络配置检查:3个必用命令

检查哪些端口在"营业":

`sudo netstat -tunlp`——这是排查服务是否启动的第一步。比如你装了Nginx想确认80端口是否监听,执行后如果看到`0.0.0.0:80`那一行,就说明Web服务正常启动了;如果没有,就得去检查Nginx配置文件是不是写错了。

查看谁在连接你的电脑:

`netstat -nt`(只看TCP已连接状态)能列出所有和你建立连接的外部IP和端口。比如看到`183.xx.xx.xx:443`,可能是你正在浏览的HTTPS网站;如果发现陌生IP,特别是来自国外的,就得留个心眼——当然也可能是正常的广告或CDN服务,别慌着拔网线。

诊断网络延迟问题:

`netstat -i`会显示网卡的流量统计,包括接收(RX)和发送(TX)的数据包数量、错误数(errors)、丢包数(dropped)。如果`errors`或`dropped`数字一直在增加,就像水管漏水一样,可能是网线接触不良、网卡故障,或者网络带宽被占满了。

3. 特殊场景配置:游戏玩家和服务器管理员必看

游戏玩家:找出占用带宽的"元凶"

如果你打游戏时突然卡顿,怀疑有程序在偷偷下载,可以用`netstat -tunp | grep ESTABLISHED`(`ESTABLISHED`表示已建立的连接),按流量大小排序(配合`sort`命令):`sudo netstat -tunp | grep ESTABLISHED | sort -k 2 -n`,流量大的程序会排在后面,一眼就能揪出"带宽小偷"。

服务器管理员:监控端口连接数

如果网站突然变慢,可能是连接数太多撑不住了。用`netstat -nt | grep :80 | wc -l`可以统计80端口的TCP连接数量(把80换成443就是HTTPS)。正常网站连接数一般在几百到几千,如果突然涨到几万,可能是被DDoS攻击了,赶紧用防火墙封禁异常IP。

四、避坑+优化:让netstat更好用的15个技巧

新手避坑清单(5个最容易踩的雷)

1. 忘了加sudo:用`-p`参数时必须有root权限,否则会显示`-`而不是进程名,就像没带钥匙进不了门。

2. 分不清LISTEN和ESTABLISHED:`LISTEN`是"等人连接",`ESTABLISHED`是"正在聊天",别把前者当成异常连接。

3. 被本地连接吓到:`127.0.0.1`(localhost)是本地回环地址,很多程序会自己跟自己通信(比如数据库和Web服务),这是正常的,不是中病毒。

4. 端口号记混:80(HTTP)、443(HTTPS)、22(SSH)、3306(MySQL)这些常见端口要记住,看到陌生端口先查一下用途(比如`grep 端口号 /etc/services`),别瞎紧张。

5. 用错参数组合:比如`-i`(显示网卡)和`-t`(TCP)不能一起用,就像同时用洗衣机洗鞋子和羽绒服,会出问题。

5个常见问题解决

问题1:执行netstat提示"command not found"?

答:没装`net-tools`包,按前面的安装教程装一下就行。

问题2:为什么有的连接显示`0.0.0.0:端口`?

答:`0.0.0.0`表示监听所有网卡的该端口,比如服务器的80端口需要接收来自互联网的连接,所以会显示`0.0.0.0:80`,正常现象。

问题3:如何查看某个端口被哪个程序占用?

答:`sudo netstat -tunlp | grep 端口号`,比如`sudo netstat -tunlp | grep 8080`,就能找到占用8080端口的程序。

问题4:netstat输出太多看不过来怎么办?

答:用管道符`|`配合`grep`过滤,比如只看ESTABLISHED状态:`netstat -nt | grep ESTABLISHED`;或者输出到文件慢慢看:`netstat -tunlp > netstat.log`。

问题5:为什么有些进程名显示"unknown"?

答:两种可能:要么你没加sudo(权限不够),要么那个进程已经退出了但连接还没断开(就像顾客走了但摊位还没来得及撤)。

10个实用小技巧(从入门到高手)

1. 实时监控连接变化:`netstat -tunlp -c`(`-c`表示持续刷新,按Ctrl+C停止),就像监控摄像头实时画面,适合观察连接动态。

2. 按端口号排序:`netstat -tun | sort -k 4`(按本地端口排序)或`sort -k 5`(按远程端口排序),方便找特定端口。

3. 只看IPv4连接:`netstat -4`(默认可能显示IPv6,加`-4`更清爽)。

4. 统计协议使用情况:`netstat -s`会显示TCP/UDP等协议的统计数据,比如"主动打开连接数"、"重传数据包数",能帮你分析网络是否健康。

5. 查看以太网统计:`netstat -e`显示网卡的收发字节数,配合`-i`用:`netstat -ie`,能看到更详细的网卡流量。

6. 找出最多连接的IP:`netstat -nt | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr`——这条命令能统计每个IP的连接数,按从多到少排序,找攻击源超有用。

7. 排除本地连接:`netstat -nt | grep -v 127.0.0.1`,过滤掉本地回环地址,只看外部连接。

8. 保存结果到文件:`netstat -tunlp > /tmp/netstat_$(date +%F_%H%M).log`,自动生成带日期的日志文件,方便以后分析。

9. 配合watch命令持续监控:`watch -n 2 'netstat -tunlp'`(每2秒刷新一次),比`-c`参数更灵活,还能放大看。

10. 检查DNS是否生效:`netstat -an | grep 53`(53是DNS端口),如果有`127.0.0.53:53`的监听,说明系统在用本地DNS缓存,正常。

五、长期使用体验:netstat的"优缺点"和替代方案

用了5年netstat,我总结出它的"脾气":优点是简单直接,参数少好记,适合快速查看;缺点是功能比较基础,统计和过滤能力弱,而且在高并发服务器上执行速度会变慢(就像超市排队结账,人多了就慢)。

现在很多Linux发行版推荐用`ss`命令替代netstat(`ss`是`socket statistics`的缩写),它更快更强大。比如`ss -tunlp`和`netstat -tunlp`效果一样,但在有10万个连接的服务器上,`ss`能秒出结果,而netstat可能要等好几秒。不过新手入门还是从netstat开始学更好,因为它的输出更直观,就像学开车先开手动挡,基础打牢了再开自动挡(ss)就容易多了。

话说回来,不管是netstat还是ss,核心都是帮我们"看清"网络。就像医生的听诊器,工具本身不重要,重要的是你能不能通过它发现问题。记住这些基础命令,下次遇到网络问题时,就不会只会重启路由器了——你可以像个真正的工程师一样,打开终端,敲下`netstat -tunlp`,自信地说:"让我看看是谁在搞鬼!"

随机图文