网络诊断命令手册

网络诊断命令手册 网络出问题时GUI 工具往往只能告诉你连不上而命令行工具能告诉你为什么连不上。本文从排障角度出发将 Windows 和 Linux 下的常用网络诊断命令按排障场景组织辅以案例列举网络排障方法命令。一、排障思维框架网络排障最忌讳瞎试。推荐遵循OSI 自底向上的排查顺序物理层网线/网卡数据链路层ARP/MAC网络层IP/路由/ICMP传输层TCP/UDP 端口应用层DNS/HTTP/TLS80% 的日常网络问题停留在网络层到应用层之间这也是本文的重点覆盖范围。排障三问每次面对网络问题时先问自己三个问题“我能到达目标吗”→ping/traceroute“我解析对了吗”→nslookup/dig“端口在监听吗”→netstat/ss/telnet二、第一层连通性检查2.1ping协议ICMPInternet Control Message Protocol核心原理向目标发送 ICMP Echo Request等待对方回复 ICMP Echo Reply。通过回复时间和 TTL 判断连通质量和路径长度。# Linux$ping-c4www.baidu.com PING www.a.shifen.com(110.242.68.66)56(84)bytes of data.64bytes from110.242.68.66:icmp_seq1ttl53time38.5ms64bytes from110.242.68.66:icmp_seq2ttl53time37.8ms64bytes from110.242.68.66:icmp_seq3ttl53time38.1ms64bytes from110.242.68.66:icmp_seq4ttl53time37.9ms --- www.baidu.compingstatistics ---4packets transmitted,4received,0% packet loss,time3004ms rtt min/avg/max/mdev37.8/38.1/38.5/0.3 ms# Windows (默认发送 4 个包) ping-n 4 www.baidu.com读懂 ping 结果指标含义异常信号ttl剩余跳数每经过一个路由器减 1TTL 异常低 → 路由迂回time往返时延 (RTT) 200ms → 链路拥塞或跨国路由packet loss丢包率 1% → 链路不稳定需进一步排查快速扫描局域网存活主机# Linux: 扫描 192.168.1.0/24 网段并行 fping$ fping-a-g192.168.1.0/242/dev/null192.168.1.1192.168.1.100192.168.1.101# Windows PowerShell: 扫描局域网1..254|ForEach-Object{$ip192.168.1.$_if(Test-Connection$ip-Count 1-Quiet){Write-Host$ip}}** 常见误区**ping 不通不代表服务不可达。很多服务器禁用了 ICMP 响应防火墙拦截但 TCP 80/443 端口正常。遇到 ping 不通时请继续往下走。2.2telnet/ncping 只能证明 IP 层通端口是否开放需要 telnet / ncnetcat来验证。# 测试 TCP 80 端口是否开放$ telnet www.example.com80Trying93.184.216.34... Connected to www.example.com. Escape character is^].# 出现 Connected → 端口通# 或者用 nc更强⼤$nc-zvwww.example.com80Connection to www.example.com80port[tcp/http]succeeded!$nc-zvwww.example.com443Connection to www.example.com443port[tcp/https]succeeded!# Windows PowerShell 替代 telnetTest-NetConnectionwww.example.com-Port 80 ComputerName : www.example.com RemoteAddress : 93.184.216.34 RemotePort : 80 TcpTestSucceeded : True# ← 关键看这个三、第二层路径追踪3.1traceroute/tracert原理利用 IP 头的 TTLTime To Live字段。每次发送 TTL 递增的数据包途经路由器在 TTL 归零时返回 ICMP Time Exceeded从而逐跳揭示路径。目标主机路由器2路由器1源主机目标主机路由器2路由器1源主机TTL1, 去 D 的包ICMP Time Exceeded (我是 R1)TTL2, 去 D 的包ICMP Time Exceeded (我是 R2)TTL3, 去 D 的包ICMP Echo Reply (到达!)示例# Linux$traceroutewww.github.comtracerouteto github.com(20.205.243.166),30hops max,60byte packets1_gateway(192.168.1.1)1.234ms1.189ms1.156ms210.74.0.1(10.74.0.1)5.432ms5.401ms5.387ms3* * *# ← 该节点不响应 ICMP常见继续看后面4121.14.78.185(121.14.78.185)8.234ms8.211ms8.198ms...1420.205.243.166(20.205.243.166)198.345ms198.332ms198.319ms# Windows (tracert) tracert-d www.github.com# -d 不解析主机名更快看懂* * *现象可能原因中间某跳持续* * *后面恢复该路由器配置了不响应 ICMP运营商常见做法从某跳开始全部* * *该节点之后的链路断开或被防火墙阻断目的地* * *目标主机防火墙丢弃了探测包3.2mtr/pathpingtraceroute只做一次快照mtrMy Traceroute持续采样呈现每跳的丢包率和延迟波动——这才是真正的排障利器。# Linux: mtr 实时模式$mtr-r-c100www.google.com# 发送 100 个包后出报告Start:2026-06-24T10:00:000800 HOST: myhost Loss% Snt Last Avg Best Wrst StDev1. _gateway0.0%1001.21.31.12.10.22.10.74.0.10.0%1005.45.55.18.20.53.121.14.78.1850.0%1008.28.57.912.30.84.202.97.34.12.0%10035.236.134.855.23.2# ← 注意这跳有丢包!5.72.14.237.1302.0%100180.5182.3178.2210.55.5mtr 解读某跳丢包但后续跳不丢包→ 该路由器限制了 ICMP 响应速率不是真丢包。某跳丢包且后续所有跳同样丢包→真丢包该节点是瓶颈。延迟在某跳骤增→ 物理距离跨越如出海光缆或该路由器拥塞。# Windows: pathping类似 mtr但采样时间更长 pathping-n www.google.com3.3 BestTraceWindows 下原生的tracert不够直观BestTrace 提供图形界面自动展示每跳 IP 的地理位置和 AS 归属出海链路一目了然。四、第三层DNS 解析诊断DNS 是网络世界的电话簿很多时候网站打不开其实是号码查不到。4.1nslookup# Linux Windows 通用$nslookupwww.example.com Server:192.168.1.1 Address:192.168.1.1#53Non-authoritative answer: Name: www.example.com Address:93.184.216.34指定 DNS 服务器查询排查是不是运营商 DNS 有问题的神技# 用 Google DNS 查询$nslookupwww.example.com8.8.8.8# 用 Cloudflare DNS 查询$nslookupwww.example.com1.1.1.1查询特定记录类型$nslookup-typeMX google.com# 邮件交换记录$nslookup-typeNS google.com# 域名服务器记录$nslookup-typeTXT google.com# 文本记录SPF/DKIM$nslookup-typeCNAME www.github.com# 别名记录4.2dig—— Linux 下的 DNS 诊断相比nslookupdig的输出更详细且更结构化$digwww.example.com trace# 从根服务器开始追踪整个解析链$digwww.example.com short# 只输出结果 IP$dig-x93.184.216.34# 反向解析IP → 域名trace的价值可以看到 DNS 解析的完整链路根 DNS → .com 顶级域 DNS → example.com 权威 DNS → 最终 A 记录。任何一环出问题都能定位。4.3 DNS 排障 checklist问题现象排查手段域名解析不到nslookup分别用运营商 DNS 和 8.8.8.8 查询对比解析结果不对DNS 劫持nslookup指定多个不同 DNS 对比结果解析很慢dig trace看哪个环节慢本地 DNS 缓存问题Windows:ipconfig /flushdnsLinux:systemd-resolve --flush-caches五、第四层端口与服务状态5.1netstat/ss# Linux: ss 是 netstat 的现代替代更快$ ss-tlnp# 查看所有 TCP 监听端口State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN01280.0.0.0:220.0.0.0:* sshd(pid1024)LISTEN01280.0.0.0:800.0.0.0:* nginx(pid2048)LISTEN0128127.0.0.1:33060.0.0.0:* mysqld(pid3072)$ ss-tan# 查看所有 TCP 连接含 ESTABLISHED$ ss-tlnp|grep:8080# 快速查某端口是否被占用关键状态解读TCP状态含义LISTEN正在监听等待连接ESTABLISHED连接已建立正常通信中TIME_WAIT主动关闭方等待 2MSL约 60s防止旧包干扰新连接CLOSE_WAIT对端已关闭但本端应用层还没调 close()——应用 Bug 信号SYN_SENT正在发起连接可能对端不可达# Windows netstat-ano|findstr LISTENING# 查看监听端口及 PID netstat-ano|findstr :80# 查看 80 端口相关连接 netstat-s# 查看各协议统计TCP 重传率等5.2lsof$lsof-i:8080# 查看 8080 端口被哪个进程占用COMMAND PIDUSERFD TYPE DEVICE SIZE/OFF NODE NAMEjava2048user 45u IPv6123450t0 TCP *:8080(LISTEN)$lsof-itcp:3306# 查看 3306 端口连接六、第五层路由与防火墙6.1route# Linux$ route-n# 查看路由表-n 不解析主机名更快Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0192.168.1.10.0.0.0 UG10000eth0192.168.1.00.0.0.0255.255.255.0 U10000eth0172.17.0.00.0.0.0255.255.0.0 U000docker0添加/删除路由常见于 VPN 分流场景# 添加一条路由访问 10.0.0.0/8 网段走 192.168.1.254 网关$sudoiprouteadd10.0.0.0/8 via192.168.1.254# 删除路由$sudoiproute del10.0.0.0/8# 添加默认网关$sudoiprouteadddefault via192.168.1.1# Windows route print# 显示路由表 route add 10.0.0.0 mask 255.0.0.0 192.168.1.2546.2iptables/nftablesiptables是 Linux 内核 netfilter 框架的用户态工具按表table 链chain 规则rule三层结构组织。数据包流向: ┌──────────┐ │PREROUTING│ ← 刚到达网卡 └────┬─────┘ │ ┌────▼─────┐ │ 路由决策 │ └────┬─────┘ ┌────────┼────────┐ (本地)│ │(转发) ┌───────▼──┐ ┌────▼─────┐ │ INPUT │ │ FORWARD │ └───────┬──┘ └────┬─────┘ │ │ ┌───────▼──┐ ┌────▼─────┐ │ 本地进程 │ │ OUTPUT │ └───────┬──┘ └────┬─────┘ │ │ └────────┬────────┘ │ ┌────▼─────┐ │POSTROUTING│ ← 即将离开网卡 └──────────┘常用场景# 查看当前规则带行号方便删除$sudoiptables-L-n-v--line-numbers# 允许来自 192.168.1.0/24 的 SSH 访问$sudoiptables-AINPUT-ptcp--dport22-s192.168.1.0/24-jACCEPT# 拒绝某个 IP 的所有流量$sudoiptables-AINPUT-s10.0.0.99-jDROP# 端口转发将 8080 端口的流量转发到 80$sudoiptables-tnat-APREROUTING-ptcp--dport8080-jREDIRECT --to-port80# 保存规则重启后保留$sudoiptables-save/etc/iptables/rules.v4现代 Linux 发行版如 Debian 10、Ubuntu 20.04逐渐转向nftables语法更简洁性能更好。但 iptables 仍然广泛使用。6.3netsh# 查看/设置 IP 地址 netsh interface ip show config netsh interface ipsetaddress以太网static 192.168.1.100 255.255.255.0 192.168.1.1# 查看/设置 DNS netsh interface ip show dnsservers netsh interface ipsetdns以太网static 8.8.8.8# Windows 自带端口转发类似 iptables DNAT netsh interface portproxy add v4tov4 listenport8080 connectaddress127.0.0.1 connectport80 netsh interface portproxy show all# 重置网络栈网络乱了之后的终极武器 netsh int ip reset netsh winsock reset七、综合案例案例一网站打不开现象浏览器访问https://api.mycompany.com超时。排查步骤# Step 1: DNS 正常吗$nslookupapi.mycompany.com8.8.8.8 Name: api.mycompany.com Address:10.20.30.40# 解析正常# Step 2: IP 层通吗$ping-c410.20.30.404packets transmitted,0received,100% packet loss# 不通# 但别急可能是禁 ping# Step 3: 端口通吗$nc-zv10.20.30.40443nc: connect to10.20.30.40 port443(tcp)failed: Connection timed out# 超时# Step 4: 路径哪里断了$mtr-r-c3010.20.30.40# 发现在第 8 跳之后全部丢包 → 问题在运营商骨干网或目标侧防火墙# Step 5: 本地防火墙拦截了$sudoiptables-L-n|grep10.20.30.40# 无拦截规则 → 问题不在本地# 结论目标 IP 的 443 端口不可达可能是安全组/防火墙未放行联系目标服务运维。案例二服务启动后端口被占用现象启动 Nginx 报错bind() to 0.0.0.0:80 failed (98: Address already in use)# Step 1: 谁在占 80 端口$sudoss-tlnp|grep:80 LISTEN01280.0.0.0:800.0.0.0:* users:((apache2,pid3456,fd4))# Apache 占着 80 端口# Step 2: 确认进程详情$psaux|grep3456www-data3456... /usr/sbin/apache2-kstart# Step 3: 停掉 Apache启动 Nginx$sudosystemctl stop apache2 $sudosystemctl start nginx案例三跨国访问慢现象国内访问海外服务器延迟很高。# mtr 持续监控 100 个包$mtr-r-c100overseas-server.com# 输出分析# Hop 5 (202.97.x.x): avg 180ms ← 中国电信国际出口延迟跃升# Hop 6 (ae-1.r20): avg 250ms ← 跨太平洋海底光缆再加 70ms# Hop 10 (目标): avg 260ms ← 总延迟 260ms物理极限 ≈ 光速# 结论260ms 跨太平洋已是正常值光速往返约 130ms 路由器处理延迟# 解决方案考虑 CDN 加速或同区域部署。八、常用命令Linux 命令矩阵场景命令关键参数连通性ping-c 计数-i 间隔路径追踪traceroute-n(不解析)-I(ICMP模式)持续路径监控mtr-r(报告)-c(包数)DNS 查询dig/nslookuptrace-typeMX端口检测nc -zv/telnet-z(扫描)-v(详细)连接状态ss-tlnp(监听)-tan(所有)端口占用lsof -i:端口号路由表ip routeadd/del防火墙iptables/nft-L -n -v抓包tcpdump-i eth0 port 80Windows 命令矩阵场景命令关键参数连通性ping-n 计数-t(持续)路径追踪tracert-d(不解析)-h(最大跳数)持续路径pathping-n(不解析)DNS 查询nslookup-typeMX端口检测Test-NetConnection-Port连接状态netstat-ano(含PID)路由表route printadd/del网络配置netshinterface ip/portproxyDNS 缓存ipconfig /flushdns—重置网络netsh int ip reset—