飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 基础入门

    • Linux 命令概述与环境准备
    • 文件与目录操作(上):ls、cd、pwd
    • 文件与目录操作(下):cat、touch、mkdir、rm、cp、mv
    • 获取帮助与基础工具:man、help、clear、exit、sudo
  • 文件权限

    • 文件权限管理:chmod、chown
  • 系统与监控

    • 进程管理与系统监控:ps、top、kill、df、du、free
    • 用户与环境:whoami、id、env、echo、history
  • 网络命令

    • 网络诊断(上):ping、curl、wget
    • 网络诊断(下):netstat、ss、ip
    • 网络抓包与高级工具:traceroute、tcpdump、nc
    • DNS 与防火墙:nslookup、dig、iptables
  • 文本处理

    • 文本搜索:grep
    • 文本处理(上):awk
    • 文本处理(下):sed
    • 文本排序与统计:sort、uniq、wc
    • 文件查看与查找:head、tail、cut、find
    • 归档压缩与管道组合:tar、gzip、xargs
  • 开发工具

    • 开发工具链(上):gcc、make
    • 开发工具链(下):gdb、time
    • 版本控制:git
    • 远程操作:ssh、scp
    • 编辑器:vim、nano
  • Shell 编程

    • Shell 编程基础(上):变量、管道、重定向
    • Shell 编程基础(下):条件、循环、函数
  • 综合实战

    • 综合实战:日志分析

网络诊断(下):netstat、ss、ip

netstat:网络连接统计(传统工具)

netstat(Network Statistics)显示网络连接、路由表、接口统计等信息。

# 显示所有连接(-a all)
netstat -a

# 显示 TCP 连接(-t tcp)
netstat -at

# 显示 UDP 连接(-u udp)
netstat -au

# 显示监听端口(-l listening)
netstat -tl

# 显示进程名(-p program,需要 sudo)
sudo netstat -tlp

# 显示数字地址(-n numeric,不解析域名)
netstat -tn

# 最常用组合:显示所有 TCP/UDP 监听端口和进程
sudo netstat -tunlp

netstat -tunlp 输出解读

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5678/mysqld
tcp6       0      0 :::80                   :::*                    LISTEN      9012/nginx
tcp6       0      0 :::443                  :::*                    LISTEN      9012/nginx
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1000/dhclient
字段含义
Proto协议(tcp/tcp6/udp/udp6)
Recv-Q接收队列中未被读取的字节数
Send-Q发送队列中未被确认的字节数
Local Address本地地址和端口
Foreign Address远程地址和端口
State连接状态(LISTEN/ESTABLISHED/TIME_WAIT)
PID/Program进程 ID 和程序名

ss:netstat 的现代替代品

ss(Socket Statistics)是 netstat 的替代工具,更快更详细,直接从内核获取信息。

# 显示所有 TCP 连接
ss -t -a

# 显示所有 UDP 连接
ss -u -a

# 显示监听端口
ss -t -l

# 显示进程名(-p)
sudo ss -t -lp

# 显示数字地址(-n)
ss -t -n

# 最常用组合(对应 netstat -tunlp)
sudo ss -tunlp

# 显示连接统计摘要
ss -s

# 显示详细信息(含 TCP 内部参数)
ss -ti

ss 的优势

特性netstatss
速度慢(读取 /proc)快(直接从内核获取)
信息详细度基础可显示 cwnd、rtt、ssthresh
现代系统支持逐渐弃用默认安装,推荐
过滤能力弱强(支持状态过滤)
# ss 过滤示例
ss -t state established          # 只显示 ESTABLISHED 连接
ss -t state time-wait              # 只显示 TIME_WAIT 连接
ss -t dst 192.168.1.1              # 只显示目标地址为 192.168.1.1 的连接
ss -t sport = :80                  # 只显示本地端口 80 的连接

ip:现代网络配置工具

ip 是 ifconfig、route、arp 的现代替代品,功能更强大,输出更清晰。

ip addr:查看 IP 地址

# 查看所有接口的 IP 地址
ip addr
# 简写
ip a

# 查看特定接口
ip addr show eth0

ip link:查看网络接口状态

# 查看所有网络接口
ip link

# 查看特定接口
ip link show eth0

# 启用/禁用接口
sudo ip link set eth0 up
sudo ip link set eth0 down

ip route:查看路由表

# 查看路由表
ip route
# 简写
ip r

# 输出示例:
# default via 192.168.1.1 dev eth0 proto dhcp metric 100
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
字段含义
default默认路由(0.0.0.0/0)
via 192.168.1.1下一跳网关
dev eth0出接口
proto dhcp路由来源(DHCP 获取)
src 192.168.1.100源地址

ip neigh:查看 ARP/邻居表

# 查看 ARP 表(替代 arp -a)
ip neigh

# 输出示例:
# 192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE

综合排障场景

场景:服务无法访问

# 1. 确认服务是否在监听
sudo ss -tunlp | grep :80
# 或
sudo netstat -tunlp | grep :80

# 2. 确认本机 IP 地址
ip addr

# 3. 确认路由是否正确
ip route

# 4. 测试连通性
ping <目标IP>

# 5. 测试端口连通性
curl http://<目标IP>:80
# 或
nc -vz <目标IP> 80

本篇小结

  • netstat -tunlp:查看 TCP/UDP 监听端口和进程(传统工具,逐渐弃用)
  • ss -tunlp:netstat 的现代替代,更快更详细,ss -ti 显示 TCP 内部参数
  • ss -s:连接统计摘要;ss -t state established:状态过滤
  • ip addr(ip a):查看 IP 地址,替代 ifconfig
  • ip link:查看网络接口状态,可启用/禁用接口
  • ip route(ip r):查看路由表,替代 route
  • ip neigh:查看 ARP 表,替代 arp -a

动手实践

  1. 查看本机所有监听端口:

    sudo ss -tunlp
    # 对比 sudo netstat -tunlp,观察输出差异
    
  2. 查看连接统计:

    ss -s
    
  3. 查看 TCP 内部参数:

    ss -ti | head -20
    # 观察 cwnd、rtt、ssthresh 等参数
    
  4. 查看网络配置:

    ip addr
    ip link
    ip route
    ip neigh
    
  5. 过滤特定状态连接:

    ss -t state time-wait | wc -l
    ss -t state established | wc -l
    
  6. 思考:为什么 ss 比 netstat 更快?ss 直接从内核获取信息,而 netstat 读取 /proc 文件系统,这个区别在连接数很多时(如 10 万并发)会有什么影响?

上一页
网络诊断(上):ping、curl、wget
下一页
网络抓包与高级工具:traceroute、tcpdump、nc