网络排障沿本机配置、网关、路由、DNS 和服务端口逐层进行。Windows 与 Linux 的命令形态不同,用途一一对应。本文先讲解 Windows 端的五个核心诊断命令,再给出 Linux 对等的工具、命令对照表与故障定位思路。它们都具备查看配置、测试连通性、追踪路由、解析域名和查看端口这五项能力,掌握后可以跨系统完成排查。
打开命令窗口:进入网络诊断控制台
一切从打开命令提示符开始:
- 按下
Win + R键,打开“运行”对话框; - 输入
cmd; - 按回车或点击“确定”。
建议:右键“开始”菜单,选择“Windows 终端(管理员)”或“命令提示符(管理员)”,可避免权限不足导致部分命令(如
ipconfig /release)无法执行。
Windows 核心诊断命令
ping:连通性与延迟
功能:测试目标主机是否可达,测量网络延迟和稳定性。
ping www.baidu.com # 测试外网连通性
ping 192.168.1.1 # 测试本地网关
ping -t baidu.com # 持续ping(Ctrl+C 停止)
ping -n 10 8.8.8.8 # 发送10个包
ping -l 1500 1.1.1.1 # 发送1500字节大包(测试MTU)关键输出解读:
- 时间=xxms:延迟,越小越好(<50ms 优秀,>200ms 可能卡顿)
- TTL=xx:数据包生存时间,可粗略判断操作系统类型
- 丢包率:若>0%,说明网络不稳定或被防火墙拦截
典型使用场景:
- 网页打不开?先
ping一下看是网络不通还是服务挂了。 - 游戏卡顿?用
ping -t长时间监控延迟波动。 - 公司内网访问慢?对比
ping网关 和ping外网,判断瓶颈位置。
ipconfig:本机网络配置
功能:显示和管理本机网络接口配置。
ipconfig # 基础IP信息(IP、子网掩码、网关)
ipconfig /all # 完整信息(含MAC、DHCP、DNS等)
ipconfig /release # 释放当前IP(需管理员)
ipconfig /renew # 重新获取IP
ipconfig /flushdns # 清除DNS缓存(解决“域名解析失败”)
ipconfig /displaydns # 查看当前DNS缓存内容关键信息:
- IPv4 地址:你的设备在网络中的唯一标识
- 默认网关:数据包“出口”,通常是路由器IP
- DNS 服务器:负责将域名解析为 IP
典型使用场景:
- 无法上网?先
ipconfig看是否有有效IP(169.254.x.x 是自动分配失败)。 - 网站打不开但IP能访问?很可能是DNS问题,尝试
ipconfig /flushdns。 - 配置静态IP后无法联网?检查子网掩码和网关是否正确。
netstat:连接与端口
功能:显示当前所有网络连接、监听端口及关联进程。
netstat -a # 所有连接和监听端口
netstat -n # 用IP和端口号显示(更快)
netstat -ano # 显示PID(进程ID),便于排查
netstat -b # 显示创建连接的程序名(需管理员)关键字段:
-
状态(State):
LISTENING:服务正在监听(如Web服务器)ESTABLISHED:活跃连接(如你正在浏览网页)TIME_WAIT:连接刚关闭,等待清理
-
本地地址:端口:你的设备和使用的端口
-
外部地址:端口:对方服务器和端口(如
220.181.38.148:443)
典型使用场景:
- 怀疑电脑被木马控制?用
netstat -ano找异常外连,再通过任务管理器查PID。 - 端口被占用无法启动服务?
netstat -ano | findstr :8080快速定位。 - 想知道微信/钉钉是否在后台联网?
netstat -b直接显示程序名。
tracert:路径追踪
功能:追踪数据包从你电脑到目标服务器经过的每一跳路由。
tracert www.google.com # 跟踪到谷歌的路径
tracert -d baidu.com # 不解析主机名(更快)
tracert -h 20 1.1.1.1 # 最多20跳(默认30)输出理解:
- 每一行代表一个路由器(跳点)
- 三列时间是三次探测的延迟(单位ms)
* * *表示该路由器不响应ICMP(常见于运营商设备)
典型使用场景:
- 访问国外网站慢?用
tracert看在哪一跳开始延迟飙升。 - 公司访问某云服务失败?检查是否在某个中间节点中断。
- 网络时通时断?对比多次
tracert结果,看是否某跳不稳定。
小技巧:访问 https://ping.pe 可全球多地
ping和traceroute,辅助判断是本地还是目标端问题。
nslookup:DNS 查询
功能:手动查询DNS记录,诊断域名解析问题。
nslookup www.taobao.com # 查询A记录(IP)
nslookup -type=MX gmail.com # 查询邮件服务器
nslookup -type=NS baidu.com # 查询负责解析的DNS服务器交互模式更强大:
nslookup
> server 8.8.8.8 # 切换到Google DNS
> set type=ANY # 查询所有记录
> github.com # 执行查询
> exit典型使用场景:
- 网站打不开但其他人可以?用
nslookup看你本地DNS是否返回错误IP。 - 邮件发不出去?查
MX记录确认邮件服务器地址。 - 刚修改了域名解析?用不同DNS(如114.114.114.114 vs 8.8.8.8)验证生效情况。
分层诊断流程
五个命令组合起来,可以逐层缩小常见网络问题的范围:
1 ping 127.0.0.1 → 本机TCP/IP协议栈是否正常?
2 ping 本机IP → 网卡驱动和配置是否正常?
3 ping 网关(如192.168.1.1)→ 本地网络是否连通?
4 ping 8.8.8.8 → 是否能上外网?
├─ 能通 → DNS问题 → 用 nslookup 检查
└─ 不通 → 路由或出口问题 → 用 tracert 分析
5 ipconfig /all → 检查IP、DNS、网关配置
6 netstat -ano → 检查是否有异常连接或端口占用经验判断:
- 如果
pingIP 能通但ping域名不通 → DNS故障 - 如果
tracert在某跳后全部超时 → 防火墙拦截 或 路由黑洞 - 如果
netstat发现大量SYN_SENT→ 可能遭受SYN Flood攻击
Linux 对等命令
命令对照总表
| 用途 | Windows | Linux |
|---|---|---|
| 连通性测试 | ping |
ping |
| 查看网络配置 | ipconfig /all |
ip addr(旧:ifconfig) |
| 查看连接与端口 | netstat -ano |
ss -lntp(旧:netstat -lntp) |
| 路径追踪 | tracert |
traceroute / mtr |
| DNS 查询 | nslookup |
dig / nslookup / getent |
| 清除 DNS 缓存 | ipconfig /flushdns |
resolvectl flush-caches(旧版本为 systemd-resolve --flush-caches) |
| 路由表 | route print |
ip route |
| 端口测试 | Test-NetConnection |
nc |
| 端口扫描 | nmap(需安装) |
nmap |
| 抓包分析 | Wireshark / netsh trace |
tcpdump / Wireshark |
Linux 网络诊断的核心并不在于命令本身,而在于按用途选对工具。下面按 6 类展开。
诊断类:ping
最基础的联通性测试,能 ping 通至少证明网络层(ICMP)是通的:
ping example.com
ping -c 4 example.com # 只发 4 个包
ping -i 0.2 -c 20 example.com # 0.2 秒间隔
ping -s 1400 example.com # 测试大包是否分片丢失ping 不通并不等于服务不可用,很多服务器会禁 ICMP,但 80/443 照常工作。
DNS 类:dig / nslookup / getent
三个工具定位不同:
| 工具 | 走系统解析? | 输出详细度 | 适合场景 |
|---|---|---|---|
nslookup |
否(直接问 DNS) | 简略 | 快速查记录 |
dig |
否(直接问 DNS) | 完整(含 TTL、authority) | 排查 DNS 问题首选 |
getent |
是(走 NSS) | 简略 | 验证 /etc/hosts 是否生效 |
dig:DNS 排查首选
# 查 A 记录
dig example.com
# 查 AAAA(IPv6)
dig example.com AAAA
# 查 MX
dig example.com MX
# 指定 DNS 服务器
dig @8.8.8.8 example.com
# 简洁模式(只输出结果)
dig +short example.com
# 完整跟踪(从根 DNS 开始)
dig +trace example.comnslookup:随手快查
nslookup example.com
nslookup example.com 8.8.8.8getent:验证 hosts 文件 / NSS
getent hosts example.com
getent ahosts example.com经典场景:dig 查出一个 IP,但浏览器访问另一个 IP——多半是 /etc/hosts 有覆盖,用 getent 才能看到操作系统真正使用的解析结果。
路由类:traceroute / mtr / ip
traceroute / mtr:包走哪条路
# traceroute(每跳测一次)
traceroute example.com
# mtr(动态、持续刷新)
mtr example.com
mtr -r -c 50 example.com # report 模式,跑 50 个包后给报告mtr 能直接看到每跳的丢包率,测线路比 traceroute 更直观。
ip:现代化网络配置
ifconfig / route 已被 ip 取代,新发行版默认都不装 ifconfig:
# 查所有网卡
ip addr
ip a # 缩写
# 查路由表
ip route
ip r # 缩写
# 查默认网关
ip route show default
# 临时加 IP
sudo ip addr add 192.168.1.100/24 dev eth0
# 临时加路由
sudo ip route add 10.0.0.0/24 via 192.168.1.1
# 看网卡状态
ip link
ip link set eth0 up
ip link set eth0 down连接类:ss / netstat / curl / nc
ss:看谁连了谁
ss 是 netstat 的现代替代,速度快几个数量级,新服务器通常只装 ss:
# 看所有 TCP 监听端口(带进程)
sudo ss -lntp
# 看所有 UDP 监听
sudo ss -lnup
# 看所有连接
ss -tan
# 看某个端口在监听什么
sudo ss -lntp | grep :443
# 统计 TCP 连接状态
ss -snetstat 等价命令:
sudo netstat -lntp
sudo netstat -lnup| 参数 | 含义 |
|---|---|
-l |
listen 状态 |
-n |
不解析端口名/IP(更快) |
-t |
TCP |
-u |
UDP |
-p |
显示进程 |
-a |
全部连接 |
curl:HTTP 排查
# 看响应头
curl -I https://example.com
# 看完整请求/响应(详细模式)
curl -v https://example.com
# 强制 HTTP/2
curl --http2 -I https://example.com
# 指定 DNS(绕过本机 DNS)
curl --resolve example.com:443:1.2.3.4 https://example.com
# 通过代理
curl -x http://127.0.0.1:7890 https://www.google.com
# 测速度(只关心耗时)
curl -o /dev/null -s -w "DNS:%{time_namelookup} 连接:%{time_connect} 总:%{time_total}\n" https://example.comnc(netcat):快速验证端口可达
# 测 TCP 端口
nc -zv example.com 443
# 测 UDP 端口
nc -zvu example.com 53
# 监听端口(调试用,模拟服务)
nc -l 9999
# 当临时聊天室(A 监听,B 连接)
# A 机器:nc -l 9999
# B 机器:nc <A_IP> 9999扫描类:nmap
主动扫描目标主机的开放端口:
# 扫常见端口
nmap example.com
# 扫指定端口
nmap -p 22,80,443 example.com
# 扫整个段
nmap -p 22 192.168.1.0/24
# 系统识别 + 服务识别
sudo nmap -sV -O example.com
# 快速 SYN 扫描(需 root)
sudo nmap -sS example.com注意:nmap 扫描非授权目标在很多国家属违法行为,只对自有服务器或明确授权的目标使用。
抓包类:tcpdump
查找链路层问题的深入工具,能直接观察网络上实际流动的字节:
# 抓某个网卡所有流量
sudo tcpdump -i eth0
# 抓特定端口
sudo tcpdump -i eth0 port 443
# 抓特定主机
sudo tcpdump -i eth0 host 1.2.3.4
# 组合:抓某主机的某端口
sudo tcpdump -i eth0 host 1.2.3.4 and port 443
# 不解析 IP/端口(更快)
sudo tcpdump -nn -i eth0 port 443
# 保存到文件(Wireshark 打开分析)
sudo tcpdump -i eth0 -w /tmp/capture.pcap port 443
# 读取文件
tcpdump -r /tmp/capture.pcap| 参数 | 含义 |
|---|---|
-i |
指定网卡 |
-n |
不解析 IP |
-nn |
不解析 IP 也不解析端口 |
-w file |
保存为 pcap |
-r file |
读取 pcap |
-c N |
抓 N 个包就停 |
-A |
用 ASCII 显示包内容 |
-X |
用十六进制 + ASCII |
按故障类型快速定位
| 故障表现 | 用哪个命令 |
|---|---|
| 完全不通 | ping → traceroute/mtr |
| 域名解析有问题 | dig → getent → 查 /etc/resolv.conf |
| 解析对了但访问慢 | mtr 看路由跳数和丢包 |
| HTTP 返回错(502/504) | curl -v 看响应头 |
| 服务起了端口不通 | ss -lntp 看是否真的在监听 |
| 端口监听了但外网不通 | 防火墙 / 云厂商安全组 |
| 抓不到包定位不了 | tcpdump 看链路层到底有没有包 |
| 想知道目标开了哪些端口 | nmap |
进阶方向
- 多动手:在真实网络问题中主动使用这些命令,印象更深刻。
- 记笔记:建立自己的命令速查表和常见问题解决方案。
- 理解原理:知道“为什么”比“怎么做”更重要(如TTL、三次握手)。
- 掌握 Wireshark 抓包分析,从数据包层面理解通信过程。
- 学习
arp -a/ip neigh(查看 ARP 缓存)、route print/ip route(查看路由表)。 - 尝试 PowerShell 网络命令,如
Test-NetConnection可作为ping的补充,探测指定端口。
实用经验
ss -lntp是 Linux 上查端口的轻量命令,记住它一个就够。mtr -r -c 100是 VPS 测线路的标准姿势,跑完 100 个包再下判断。curl -v比wget更适合排查 HTTPS 问题,能看到握手细节、跳转和证书。tcpdump抓包写文件用 Wireshark 分析,命令行肉眼盯包效率低。dig +short适合写脚本,直接拿 IP,不用解析多行输出。
把网络探测与应用可用性分开
ping 成功只说明相应 ICMP 路径可达,目标服务仍可能没有监听或被不同规则限制。Windows 上可以用 Test-NetConnection -ComputerName example.com -Port 443 补充 TCP 端口检查,Linux 上用 nc -zv example.com 443,再用真实 HTTP 请求验证应用。tracert 中间跳不响应可能来自限速或过滤,只有结合后续跳与目标结果才能判断链路中断。
排查记录保留本机地址、网关、DNS 服务器、目标地址及时间。对照域名请求与指定 IP 请求时,还需保留 TLS SNI 和 HTTP Host,避免把虚拟主机不匹配误判为网络失败。
← 返回文章