网络工具 / 命令文档
Linux netstat 命令
概述
网络连接诊断与监控的必备工具之一
基础概念与含义
netstat(network statistics)是Linux/Unix系统中用于显示网络连接、路由表、接口统计、伪连接和组播成员的命令行工具。
核心功能:
显示活动的网络连接
查看监听端口
显示路由表信息
显示网络接口统计
显示网络协议统计提示: netstat在现代Linux发行版中可能需要安装net-tools包,推荐同时学习ss命令作为替代。
基本语法结构
netstat [选项] [地址族]
常用选项说明:
| 选项 | 含义 | 示例 |
|---|---|---|
| -a | 显示所有连接和监听端口 | netstat -a |
| -t | 仅显示TCP连接 | netstat -t |
| -u | 仅显示UDP连接 | netstat -u |
| -l | 仅显示监听状态的端口 | netstat -l |
| -n | 以数字形式显示地址和端口 | netstat -n |
| -p | 显示进程ID和名称 | netstat -p |
| -r | 显示路由表 | netstat -r |
| -i | 显示网络接口信息 | netstat -i |
| -s | 显示协议统计信息 | netstat -s |
典型输出格式:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 192.168.1.10:80 192.168.1.20:4567 ESTABLISHED 5678/nginx字段含义:
Proto:协议类型(tcp、udp、raw等)
Recv-Q:接收队列中的字节数
Send-Q:发送队列中的字节数
Local Address:本地地址:端口
Foreign Address:远程地址:端口
State:连接状态
PID/Program:进程ID/程序名
TCP连接状态说明:
LISTEN - 监听状态
ESTABLISHED - 已建立连接
TIME_WAIT - 连接关闭,等待远程确认
CLOSE_WAIT - 等待本地用户关闭连接
SYN_SENT - 已发送连接请求
SYN_RECV - 已接收连接请求场景1:检查服务是否正常启动
需求:检查Web服务器(端口80)是否正常监听
# 检查80端口是否被监听
netstat -tln | grep :80
# 查看具体进程
netstat -tlnp | grep :80
# 输出示例
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13602/nginx: master场景2:诊断网络连接问题
需求:检查外部连接和连接状态分布
# 查看所有已建立的连接
netstat -tan | grep ESTABLISHED
# 统计各种连接状态的数量
netstat -tan | awk '{print $6}' | sort | uniq -c | sort -rn
# 输出示例
45 ESTABLISHED
23 TIME_WAIT
8 LISTEN场景3:查找端口占用
需求:某个端口被占用,需要找出占用进程
# 查找8080端口的占用情况
netstat -tlnp | grep :8080
# 或者查看所有Java应用的网络连接
netstat -tlnp | grep java
# 输出示例
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 9876/java场景4:监控网络性能
需求:检查网络接口状态和流量统计
# 查看网络接口统计
netstat -i
# 查看详细的协议统计
netstat -s | grep -A 10 "Tcp:"
# 实时监控连接变化
watch -n 1 'netstat -tan | grep :80 | wc -l'故障排查手册
常见问题解决方案
1. 服务无法启动
# 检查端口是否被占用
netstat -tlnp | grep :端口号
# 如果被占用,找出进程并处理
kill -9 进程ID2. 连接数过多
# 统计当前连接数
netstat -tan | grep ESTABLISHED | wc -l
# 查看连接最多的IP
netstat -ant | grep ESTABLISHED | awk '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -rn3. 网络延迟排查
# 检查路由表
netstat -rn
# 查看网络接口错误
netstat -i结合ps命令可以更详细地分析进程
使用watch命令可以实时监控变化
配合grep、awk等工具进行数据处理
在生产环境中建议使用ss命令替代netstat
性能优化建议:
在大型系统中,netstat可能较慢,推荐使用ss命令
使用-n选项避免DNS解析,提高执行速度
结合具体选项精确查询,避免输出过多信息
安全注意事项:
定期检查异常的监听端口 关注外部连接的来源和数量 监控TIME_WAIT状态的连接数量 注意识别可疑的网络连接
运维脚本示例:
#!/bin/bash
# 网络连接监控脚本
echo "=== 端口监听状态 ==="
netstat -tln
echo "=== 连接状态统计 ==="
netstat -tan | awk '{print $6}' | sort | uniq -c
echo "=== 连接数最多的IP ==="
netstat -tan | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10进阶学习建议:
学习ss命令作为现代替代方案
掌握与iptables、firewall的配合使用
了解网络协议栈的工作原理
学习网络性能调优相关知识