网络工具 / 命令文档

Linux netstat 命令

$ netstat 17 个章节 Linux 命令详解

概述

网络连接诊断与监控的必备工具之一

基础概念与含义

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 进程ID

2. 连接数过多

# 统计当前连接数
                    netstat -tan | grep ESTABLISHED | wc -l
                    # 查看连接最多的IP
                    netstat -ant | grep ESTABLISHED | awk '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -rn

3. 网络延迟排查

# 检查路由表
                    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的配合使用
                        了解网络协议栈的工作原理
                        学习网络性能调优相关知识

同分类 · 其他命令文档