从ping到traceroute:手把手教你用Windows/Linux命令排查网络故障
从ping到traceroute手把手教你用Windows/Linux命令排查网络故障当你的网站突然无法访问或者远程服务器连接中断时作为IT人员的第一反应是什么是立即重启设备还是直接联系网络管理员实际上80%的基础网络问题都可以通过几个简单的命令行工具自行诊断解决。本文将带你从最基础的网络连通性测试开始逐步深入到路由追踪构建一套完整的网络故障排查方法论。1. 网络故障排查的四个黄金层级网络故障排查就像医生诊断病情需要遵循由浅入深的原则。我们将其分为四个关键层级本地网络配置检查确认本机IP、DNS等基础设置是否正确本地网络连通性测试验证本机到网关的通信是否正常远程目标可达性测试检查到目标服务器的网络路径是否畅通应用层服务验证确认具体端口和服务是否可用这种分层方法不仅能快速定位问题所在还能避免在错误的方向上浪费时间。例如如果本地网络配置就有问题直接测试远程服务器显然没有意义。1.1 本地网络配置检查在Windows和Linux系统中查看网络配置的命令有所不同Windows系统ipconfig /allLinux系统ifconfig -a # 或使用更现代的 ip addr show这两个命令会显示所有网络接口的详细信息包括IP地址和子网掩码默认网关DNS服务器地址MAC地址一个常见的错误是看到以169.254开头的IP地址Windows或0.0.0.0Linux这通常表示DHCP获取IP失败。此时需要检查网络连接或尝试手动续订IP:: Windows释放并重新获取IP ipconfig /release ipconfig /renew# Linux重启网络服务 sudo systemctl restart networking2. 基础连通性测试工具2.1 ping网络诊断的听诊器ping是最基础也最常用的网络诊断工具它通过发送ICMP回显请求包来测试两台主机之间的连通性。其工作原理如下源主机向目标发送ICMP Echo Request目标主机收到后返回ICMP Echo Reply源主机计算往返时间(RTT)并统计丢包率基本用法:: Windows/Linux通用格式 ping 目标地址实用技巧-t参数Windows或-i参数Linux实现持续ping测试-l参数Windows或-s参数Linux指定数据包大小-n参数指定发送次数默认4次典型输出解读正在 Ping www.example.com [93.184.216.34] 具有 32 字节的数据: 来自 93.184.216.34 的回复: 字节32 时间12ms TTL57 来自 93.184.216.34 的回复: 字节32 时间11ms TTL57 来自 93.184.216.34 的回复: 字节32 时间13ms TTL57 来自 93.184.216.34 的回复: 字节32 时间12ms TTL57 93.184.216.34 的 Ping 统计信息: 数据包: 已发送 4已接收 4丢失 0 (0% 丢失) 往返行程的估计时间(以毫秒为单位): 最短 11ms最长 13ms平均 12ms注意某些网络环境可能禁用了ICMP响应导致ping不通但实际网络正常。此时需要结合其他工具判断。2.2 进阶ping策略按照网络诊断的由近及远原则建议按以下顺序进行ping测试本地环回测试ping 127.0.0.1- 验证TCP/IP协议栈是否正常本机IP测试ping 本机IP- 验证网卡工作状态网关测试ping 网关IP- 验证局域网连通性DNS测试ping 8.8.8.8- 验证外网连通性域名测试ping www.example.com- 验证DNS解析如果前两步失败问题可能出在本机网络配置第三步失败可能是局域网问题后两步失败则可能是外网或ISP问题。3. DNS问题诊断当你能ping通IP地址但无法通过域名访问时很可能是DNS解析出了问题。nslookup和dig是两个专业的DNS诊断工具。3.1 nslookup基础用法交互模式nslookup server 8.8.8.8 # 指定DNS服务器 www.example.com # 查询域名 exit直接查询nslookup www.example.com 8.8.8.8常见问题排查比较不同DNS服务器的解析结果检查DNS响应时间可能遭遇DNS劫持验证MX、CNAME等特殊记录3.2 DNS缓存管理DNS查询结果会被缓存以提升效率但过期的缓存可能导致问题Windows清理DNS缓存ipconfig /flushdnsLinux清理DNS缓存取决于使用的解析器sudo systemd-resolve --flush-caches # systemd-resolved # 或 sudo /etc/init.d/nscd restart # nscd4. 网络连接与端口检测4.1 netstat连接状态分析netstat可以显示所有活动的网络连接、监听端口和路由表等信息。常用参数组合netstat -ano # Windows显示所有连接和进程IDnetstat -tulnp # Linux显示TCP/UDP监听端口和程序关键字段解释Proto协议类型TCP/UDPLocal Address本地IP和端口Foreign Address远程IP和端口State连接状态ESTABLISHED、TIME_WAIT等PID/Program name使用该连接的进程4.2 telnet测试端口连通性虽然telnet作为远程协议已不安全但它仍是测试TCP端口连通性的好工具telnet www.example.com 80如果连接成功你会看到空白屏幕或服务器标识失败则会显示连接超时或拒绝。安全提示测试完成后应立即关闭telnet服务因为它以明文传输数据。5. 路由追踪技术当网络连通性问题发生在中间节点时traceroute/tracert就派上用场了。它们通过TTL递增的方式揭示数据包经过的每一跳。5.1 traceroute工作原理发送TTL1的探测包第一跳路由器返回ICMP超时发送TTL2的探测包第二跳路由器返回ICMP超时重复直到到达目标或达到最大跳数Windows命令tracert www.example.comLinux命令traceroute www.example.com # 或使用更现代的 tracepath www.example.com5.2 输出解读技巧典型输出示例1 1 ms 1 ms 1 ms 192.168.1.1 2 5 ms 4 ms 5 ms 10.10.10.1 3 * * * 请求超时 4 12 ms 11 ms 13 ms 203.12.160.1 5 15 ms 14 ms 16 ms www.example.com [93.184.216.34]每行代表一跳显示IP和主机名如果可解析三个时间值表示三次探测的往返时间星号(*)表示该跳未响应可能防火墙阻止5.3 高级路由分析对于复杂网络问题可以结合多种工具反向路由追踪从目标回源检查不对称路由多地点测试使用不同位置的服务器测试判断区域性故障MTR工具结合ping和traceroute的实时监控工具# Linux安装mtr sudo apt install mtr-tiny # 使用示例 mtr -rwc 10 www.example.com6. 实战典型故障排查流程让我们通过一个实际案例演示完整的排查流程问题现象开发人员报告无法访问公司内部Git服务器(git.example.com)但可以访问其他网站。6.1 第一步基础连通性测试ping git.example.com结果请求超时ping 10.10.1.100 # Git服务器已知IP结果正常响应结论DNS解析可能有问题6.2 第二步DNS验证nslookup git.example.com返回非公司内网DNS服务器解析出错误的公网IP解决方案:: 使用正确的内网DNS服务器 nslookup git.example.com 10.10.1.53成功解析出10.10.1.1006.3 第三步端口服务检测telnet 10.10.1.100 22 # Git使用的SSH端口结果连接被拒绝netstat -ano | findstr 10.10.1.100显示有连接尝试但被拒绝6.4 第四步路由分析tracert 10.10.1.100显示路径正确无异常跳数6.5 最终诊断综合以上信息DNS解析错误导致指向错误IP即使使用正确IPSSH服务也未响应可能原因Git服务器SSH服务宕机或防火墙规则变更联系服务器管理员后确认最近安全更新后防火墙规则被修改阻止了来自该子网的SSH访问。