基础网络诊断命令
📡 ping
全平台
基础
网络连通性测试
用途:测试网络连通性和延迟,通过发送ICMP Echo Request包并等待回复来检测主机是否可达。
- 测试网络延迟(RTT - Round Trip Time)
- 检测数据包丢失率
- 验证主机可达性
- 简单的网络质量评估
💻 基础用法
# 基本ping测试
ping www.example.com
# 指定发送次数
ping -c 10 www.example.com
# 设置包大小(1000字节)
ping -s 1000 www.example.com
# 设置超时时间(秒)
ping -W 2 www.example.com
# 快速ping(缩短间隔到0.2秒)
ping -i 0.2 www.example.com
示例输出解读
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=15.2 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=14.8 ms
--- www.example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 14.8/15.0/15.2/0.2 ms
关键指标:
• time: 往返延迟(越小越好,<50ms优秀)
• packet loss: 丢包率(0%最佳)
• mdev: 延迟抖动(越小越稳定)
• time: 往返延迟(越小越好,<50ms优秀)
• packet loss: 丢包率(0%最佳)
• mdev: 延迟抖动(越小越稳定)
🛣️ traceroute / tracert
Linux/macOS
Windows
基础
网络路径追踪
用途:追踪数据包从源主机到目标主机经过的路由路径,显示每一跳的延迟和IP地址。
- 显示完整的网络路径
- 定位网络延迟发生的具体位置
- 发现路由环路或异常路径
- 诊断网络连接问题
💻 基础用法
# Linux/macOS - 使用ICMP
traceroute www.example.com
# 使用UDP(默认)
traceroute -U www.example.com
# 使用TCP
traceroute -T -p 80 www.example.com
# 设置最大跳数
traceroute -m 20 www.example.com
# Windows - tracert命令
tracert www.example.com
# 不解析主机名(加快速度)
tracert -d www.example.com
示例输出解读
traceroute to www.example.com (93.184.216.34), 30 hops max
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.123 ms 1.087 ms
2 10.0.0.1 (10.0.0.1) 5.678 ms 5.432 ms 5.234 ms
3 * * * # 该节点不响应
4 93.184.216.34 (93.184.216.34) 15.234 ms 15.123 ms 15.087 ms
分析要点:
• 每行代表一跳路由器
• 三个时间值表示三次探测的延迟
• *** 表示该节点阻止了ICMP响应(不一定是故障)
• 延迟突然增大的跳数可能是网络瓶颈
• 每行代表一跳路由器
• 三个时间值表示三次探测的延迟
• *** 表示该节点阻止了ICMP响应(不一定是故障)
• 延迟突然增大的跳数可能是网络瓶颈
🔌 netstat
全平台
基础
网络连接状态查看
用途:显示网络连接、路由表、接口统计、伪装连接和多播成员等信息。
- 查看当前网络连接状态
- 显示监听端口和服务
- 查看网络接口统计信息
- 显示路由表信息
💻 常用命令
# 显示所有连接和监听端口
netstat -a
# 显示TCP连接
netstat -t
# 显示监听端口
netstat -l
# 显示进程信息(需要root权限)
netstat -p
# 显示网络接口统计
netstat -i
# 组合使用:显示所有TCP监听端口及进程
netstat -tlnp
# 持续监控网络状态(每2秒刷新)
netstat -c 2
常见应用场景
1. 查找占用特定端口的进程:
2. 统计各种连接状态数量:
3. 查看网络流量统计:
netstat -tlnp | grep :80802. 统计各种连接状态数量:
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'3. 查看网络流量统计:
netstat -s
🔍 nslookup / dig
全平台
基础
DNS查询工具
用途:查询DNS域名解析信息,诊断DNS相关问题。dig功能更强大,是DNS管理员的首选工具。
- 查询域名对应的IP地址
- 反向DNS查询(IP到域名)
- 查询特定类型的DNS记录(A、AAAA、MX、NS等)
- 指定DNS服务器进行查询
💻 nslookup用法
# 基本查询
nslookup www.example.com
# 指定DNS服务器查询
nslookup www.example.com 8.8.8.8
# 查询特定记录类型
nslookup -type=MX example.com
nslookup -type=NS example.com
💻 dig用法(更强大)
# 基本查询
dig www.example.com
# 简洁输出(只显示IP)
dig www.example.com +short
# 查询特定记录类型
dig example.com MX
dig example.com NS
dig example.com TXT
# 反向DNS查询
dig -x 8.8.8.8
# 追踪DNS解析路径
dig +trace www.example.com
# 指定DNS服务器
dig @8.8.8.8 www.example.com
dig输出解读
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 3600 IN A 93.184.216.34
;; Query time: 15 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
关键信息:
• 3600: TTL(缓存时间,秒)
• A记录: IPv4地址
• Query time: DNS查询耗时
• 3600: TTL(缓存时间,秒)
• A记录: IPv4地址
• Query time: DNS查询耗时
🌐 curl
全平台
进阶
HTTP性能测试
用途:强大的HTTP客户端工具,可以测试HTTP性能、查看请求详情、模拟各种HTTP场景。
- 测试HTTP请求各阶段耗时
- 查看HTTP响应头和状态码
- 支持各种HTTP方法(GET、POST、PUT等)
- 模拟不同User-Agent和Header
💻 性能测试用法
# 显示详细的时间统计
curl -w "\nDNS解析时间: %{time_namelookup}s\nTCP连接时间: %{time_connect}s\nSSL握手时间: %{time_appconnect}s\n服务器处理时间: %{time_starttransfer}s\n总时间: %{time_total}s\n" \
-o /dev/null -s https://www.example.com
# 只显示HTTP状态码
curl -o /dev/null -s -w "%{http_code}\n" https://www.example.com
# 显示响应头
curl -I https://www.example.com
# 跟踪重定向
curl -L https://www.example.com
# 设置超时时间
curl --connect-timeout 5 --max-time 10 https://www.example.com
# POST请求
curl -X POST -d "param1=value1" https://api.example.com
# 设置自定义Header
curl -H "User-Agent: MyApp/1.0" https://www.example.com
时间统计输出示例
DNS解析时间: 0.015s
TCP连接时间: 0.045s
SSL握手时间: 0.125s
服务器处理时间: 0.156s
总时间: 0.234s
性能分析:
• DNS解析15ms - 正常
• TCP连接30ms (45-15) - 网络延迟
• SSL握手80ms (125-45) - 较慢,考虑优化
• 服务器处理31ms (156-125) - 良好
• 下载时间78ms (234-156) - 取决于内容大小
• DNS解析15ms - 正常
• TCP连接30ms (45-15) - 网络延迟
• SSL握手80ms (125-45) - 较慢,考虑优化
• 服务器处理31ms (156-125) - 良好
• 下载时间78ms (234-156) - 取决于内容大小
📞 telnet
全平台
基础
端口连通性测试
用途:测试特定端口的连通性,验证服务是否正常监听,进行简单的协议交互。
- 测试TCP端口是否开放
- 验证服务是否正常运行
- 手动发送协议命令进行调试
- 排查防火墙和网络策略问题
💻 基础用法
# 测试HTTP端口(80)
telnet www.example.com 80
# 测试HTTPS端口(443)
telnet www.example.com 443
# 测试邮件服务器(25)
telnet smtp.example.com 25
# 测试数据库端口(3306)
telnet db.example.com 3306
# 退出telnet
Ctrl+] 然后输入 quit
连接成功示例
Trying 93.184.216.34...
Connected to www.example.com.
Escape character is '^]'.
# 此时可以输入HTTP命令
GET / HTTP/1.1
Host: www.example.com
状态说明:
• "Connected" - 端口开放,服务正常
• "Connection refused" - 端口关闭或服务未启动
• "No route to host" - 网络不可达
• 超时 - 可能被防火墙阻止
• "Connected" - 端口开放,服务正常
• "Connection refused" - 端口关闭或服务未启动
• "No route to host" - 网络不可达
• 超时 - 可能被防火墙阻止
高级网络分析工具
📦 tcpdump
Linux/macOS
专业
命令行抓包工具
用途:强大的命令行网络抓包工具,可以捕获和分析网络数据包,是网络问题诊断的必备工具。
- 实时捕获网络数据包
- 支持多种过滤表达式
- 保存抓包文件供后续分析
- 分析协议和数据流
💻 常用命令
# 抓取指定网卡的所有包
tcpdump -i eth0
# 抓取特定主机的包
tcpdump host 192.168.1.100
# 抓取特定端口的包
tcpdump port 80
# 抓取HTTP流量
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
# 保存到文件
tcpdump -i eth0 -w capture.pcap
# 读取抓包文件
tcpdump -r capture.pcap
# 显示详细信息(包括十六进制)
tcpdump -i eth0 -XX
# 抓取指定数量的包
tcpdump -i eth0 -c 100
# 组合过滤:抓取来自特定IP的HTTP流量
tcpdump -i eth0 'src host 192.168.1.100 and tcp port 80'
常用过滤表达式
协议过滤:
方向过滤:
逻辑组合:
tcp, udp, icmp, ip, ip6方向过滤:
src host 1.1.1.1 - 来源dst host 1.1.1.1 - 目标逻辑组合:
and, or, not
🦈 Wireshark / tshark
全平台
专业
图形化抓包分析
用途:业界最强大的网络协议分析工具,提供图形界面和命令行版本(tshark),支持数百种协议解析。
- 深度协议解析和分析
- 强大的过滤和搜索功能
- 流量统计和图表展示
- 支持插件扩展
💻 tshark命令行用法
# 列出所有网络接口
tshark -D
# 抓包并显示
tshark -i eth0
# 保存到文件
tshark -i eth0 -w capture.pcapng
# 使用显示过滤器
tshark -i eth0 -Y "http.request"
# 只显示特定字段
tshark -i eth0 -T fields -e ip.src -e ip.dst -e tcp.port
# 读取文件并分析
tshark -r capture.pcapng -Y "tcp.analysis.retransmission"
# 统计分析
tshark -r capture.pcapng -q -z io,stat,1
# HTTP统计
tshark -r capture.pcapng -q -z http,tree
Wireshark常用显示过滤器
HTTP相关:
TCP问题诊断:
性能分析:
http.request.method == "GET"http.response.code == 404TCP问题诊断:
tcp.analysis.retransmission - 重传tcp.analysis.duplicate_ack - 重复ACKtcp.analysis.lost_segment - 丢包性能分析:
tcp.time_delta > 1 - 延迟超过1秒的包
⚡ iperf3
全平台
进阶
网络带宽测试
用途:专业的网络性能测试工具,可以测试TCP/UDP带宽、吞吐量、抖动和丢包率。
- 测试网络带宽和吞吐量
- 支持TCP和UDP协议
- 双向同时测试
- 生成详细的性能报告
💻 使用方法
# 服务端启动(监听模式)
iperf3 -s
# 客户端测试(默认TCP,10秒)
iperf3 -c server_ip
# 指定测试时长(60秒)
iperf3 -c server_ip -t 60
# 反向测试(下载带宽)
iperf3 -c server_ip -R
# 双向同时测试
iperf3 -c server_ip --bidir
# UDP测试(指定带宽100M)
iperf3 -c server_ip -u -b 100M
# 并行连接测试(10个并发流)
iperf3 -c server_ip -P 10
# 输出JSON格式结果
iperf3 -c server_ip -J
# 指定端口
iperf3 -c server_ip -p 5201
输出结果示例
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.10 GBytes 945 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec receiver
关键指标:
• Transfer: 传输数据量
• Bitrate: 实际带宽(接近理论值说明网络良好)
• Retr: 重传次数(0最佳,>100需关注)
• Transfer: 传输数据量
• Bitrate: 实际带宽(接近理论值说明网络良好)
• Retr: 重传次数(0最佳,>100需关注)
🎯 mtr
Linux/macOS
进阶
综合网络诊断
用途:结合了ping和traceroute的功能,提供实时的网络路径诊断,持续监控每一跳的延迟和丢包。
- 实时显示路由路径
- 每一跳的延迟统计
- 丢包率实时监控
- 可视化展示网络状态
💻 基础用法
# 基本使用
mtr www.example.com
# 报告模式(发送10个包后退出)
mtr -r -c 10 www.example.com
# 不解析主机名(加快速度)
mtr -n www.example.com
# 同时显示主机名和IP
mtr -b www.example.com
# 使用TCP协议(80端口)
mtr -T -P 80 www.example.com
# 使用UDP协议
mtr -u www.example.com
# 输出为CSV格式
mtr -C www.example.com
# 设置包大小
mtr -s 1000 www.example.com
输出示例解读
Host Loss% Snt Last Avg Best Wrst StDev
1. 192.168.1.1 0.0% 10 1.2 1.3 1.1 1.5 0.1
2. 10.0.0.1 0.0% 10 5.4 5.6 5.2 6.1 0.3
3. ??? 100.0% 10 0.0 0.0 0.0 0.0 0.0
4. 93.184.216.34 0.0% 10 15.2 15.4 15.0 16.2 0.4
列说明:
• Loss%: 丢包率(0%最佳)
• Snt: 发送的包数量
• Last/Avg/Best/Wrst: 最近/平均/最好/最差延迟
• StDev: 标准差(网络稳定性,越小越好)
• ???表示该跳不响应(不一定是问题)
• Loss%: 丢包率(0%最佳)
• Snt: 发送的包数量
• Last/Avg/Best/Wrst: 最近/平均/最好/最差延迟
• StDev: 标准差(网络稳定性,越小越好)
• ???表示该跳不响应(不一定是问题)
🔗 ss
Linux
进阶
Socket统计工具
用途:netstat的现代替代品,速度更快,提供更详细的socket信息和TCP统计数据。
- 比netstat快10倍以上
- 显示详细的TCP状态信息
- 支持过滤表达式
- 显示内存使用情况
💻 常用命令
# 显示所有TCP连接
ss -t
# 显示所有监听端口
ss -l
# 显示进程信息
ss -p
# 显示详细信息
ss -e
# 显示内存使用
ss -m
# 组合:显示所有TCP监听及进程
ss -tlnp
# 显示TCP连接的定时器信息
ss -to
# 统计各状态连接数
ss -s
# 过滤特定端口
ss -nt sport = :80
# 显示特定状态的连接
ss -t state established
# 显示连接到特定IP的socket
ss dst 192.168.1.100
TCP状态过滤
ss -t state established - 已建立连接ss -t state time-wait - TIME_WAIT状态ss -t state syn-sent - SYN已发送ss -t state close-wait - CLOSE_WAIT状态
🗺️ nmap
全平台
专业
网络扫描与安全审计
用途:强大的网络探测和安全扫描工具,可以发现主机、服务、操作系统等信息。
- 主机发现和端口扫描
- 服务版本检测
- 操作系统识别
- 网络拓扑发现
💻 常用扫描命令
# 扫描单个主机
nmap 192.168.1.100
# 扫描整个网段
nmap 192.168.1.0/24
# 快速扫描(只扫描最常见的100个端口)
nmap -F 192.168.1.100
# 扫描指定端口
nmap -p 80,443,8080 192.168.1.100
# 扫描端口范围
nmap -p 1-1000 192.168.1.100
# 服务版本检测
nmap -sV 192.168.1.100
# 操作系统检测
nmap -O 192.168.1.100
# 全面扫描(慢但详细)
nmap -A 192.168.1.100
# TCP SYN扫描(隐蔽扫描,需root)
nmap -sS 192.168.1.100
# 主机发现(不进行端口扫描)
nmap -sn 192.168.1.0/24
# 输出到文件
nmap -oN scan_result.txt 192.168.1.100
⚠️ 使用注意事项
重要:
• 仅在授权范围内使用nmap
• 扫描他人网络可能违法
• 生产环境使用时要小心,避免影响服务
• 建议先使用-Pn(跳过ping)避免被防火墙拦截
• 仅在授权范围内使用nmap
• 扫描他人网络可能违法
• 生产环境使用时要小心,避免影响服务
• 建议先使用-Pn(跳过ping)避免被防火墙拦截
工具对比与选择指南
| 工具 | 主要用途 | 难度 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|
| ping | 连通性测试 | ⭐ | 快速检查网络是否可达 | 简单快速,所有系统内置 | 功能单一,信息有限 |
| traceroute | 路径追踪 | ⭐⭐ | 定位网络延迟节点 | 显示完整路径,易于理解 | 可能被防火墙阻止 |
| mtr | 综合诊断 | ⭐⭐ | 持续监控网络路径 | 结合ping和traceroute优点 | 需要额外安装 |
| netstat | 连接状态 | ⭐⭐ | 查看当前网络连接 | 系统内置,功能全面 | 速度较慢,已过时 |
| ss | Socket统计 | ⭐⭐ | 快速查看连接信息 | 速度快,信息详细 | 仅Linux系统 |
| tcpdump | 抓包分析 | ⭐⭐⭐⭐ | 深度网络问题诊断 | 功能强大,灵活过滤 | 学习曲线陡峭 |
| Wireshark | 可视化抓包 | ⭐⭐⭐ | 详细协议分析 | 图形界面友好,协议支持全 | 资源占用较大 |
| curl | HTTP测试 | ⭐⭐ | API和Web性能测试 | 灵活强大,支持多协议 | 仅限应用层 |
| iperf3 | 带宽测试 | ⭐⭐ | 网络性能基准测试 | 准确可靠,报告详细 | 需要服务端配合 |
| nmap | 网络扫描 | ⭐⭐⭐⭐ | 安全审计,拓扑发现 | 功能极其强大 | 需谨慎使用,可能违规 |
💡 选择建议:
初学者:从ping、traceroute、curl开始,掌握基础概念
运维工程师:熟练使用ss、mtr、tcpdump进行日常诊断
网络工程师:精通Wireshark、iperf、nmap进行深度分析
开发人员:重点掌握curl、telnet进行应用层调试
初学者:从ping、traceroute、curl开始,掌握基础概念
运维工程师:熟练使用ss、mtr、tcpdump进行日常诊断
网络工程师:精通Wireshark、iperf、nmap进行深度分析
开发人员:重点掌握curl、telnet进行应用层调试
网络问题诊断流程
第一步:确认连通性
ping 目标主机• 如果不通,检查本地网络配置
• 如果通但丢包,继续后续诊断
第二步:追踪网络路径
mtr -r -c 100 目标主机• 找出丢包或高延迟的跳数
• 判断问题在内网还是外网
第三步:检查DNS解析
dig 域名• 检查DNS解析时间
• 验证解析结果是否正确
第四步:测试端口连通性
telnet 主机 端口• 验证目标端口是否开放
• 排查防火墙配置问题
第五步:分析应用层
curl -w "时间统计..." URL• 测试HTTP各阶段耗时
• 分析是否服务端问题
第六步:深度抓包分析
tcpdump -i eth0 -w capture.pcap• 捕获网络数据包
• 使用Wireshark详细分析
