十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

网络工程师必备:10个高频排障命令详解与实战技巧

网络工程师必备:10个高频排障命令详解与实战技巧 网络工程师这个行当干久了你会发现一个很有意思的现象真正拉开排障效率差距的往往不是谁背的命令多而是谁能在最短时间内用最少的命令定位到问题边界。我做了十多年一线运维处理过的故障从家庭宽带到数据中心核心链路都有回头复盘时发现日常排障中真正高频使用的命令其实就那么十来个。这篇文章就把这10个命令掰开揉碎讲清楚包括它们背后的原理、实际排障时怎么组合使用、以及我踩过的那些坑。1. 排障思路与命令选型逻辑1.1 为什么是这10个命令网络排障本质上是一个逐层缩小故障域的过程。OSI七层模型也好TCP/IP四层模型也好核心思路都是一样的先确认物理层和链路层是否正常再确认网络层可达性然后看传输层端口是否开放最后才排查应用层问题。这10个命令之所以高频是因为它们恰好覆盖了这个排查链条上的关键节点ping网络层连通性测试最基础的通不通判断tracert/traceroute路径追踪定位故障发生在哪一跳ipconfig/ifconfig本机网络配置查看确认自己的身份信息nslookup/digDNS解析验证排查域名相关问题netstat/ss连接状态和端口监听查看telnet/nc端口连通性测试arp局域网内IP与MAC映射排查route路由表查看确认数据包走向curl应用层协议验证tcpdump/抓包工具终极手段看数据包到底长什么样你可能会问为什么没有nmap、mtr这些它们确实好用但要么需要额外安装要么在特定场景才用得上。我选的是默认系统就自带、不需要额外安装、跨平台通用性最强的那一批。毕竟到了客户现场你不可能先花十分钟装工具。1.2 排障的黄金顺序很多人拿到故障就一顿pingping不通就懵了。我的习惯是严格按照下面的顺序来先看自己ipconfig/ifconfig确认本机IP、网关、DNS配置是否正确再ping网关确认到本地网关是否可达ping公网IP比如223.5.5.5确认外网连通性ping域名确认DNS解析是否正常tracert定位如果ping不通用tracert看断在哪一跳端口测试网络通了但服务访问不了用telnet/nc测端口抓包分析以上都正常但问题依旧抓包看细节这个顺序的核心逻辑是从近到远、从简到繁。每一步都在缩小范围避免盲目操作。注意不要跳过第1步直接ping外网。我见过太多案例折腾半天发现是本机IP配置错了或者网卡被禁用了。2. 基础连通性三剑客ping、tracert、ipconfig2.1 ping命令不只是通不通ping是使用频率最高的命令没有之一。但很多人对它的理解停留在能ping通就是好的这就太浅了。ping的底层是ICMP协议发送的是ICMP Echo Request报文对方回ICMP Echo Reply。它工作在网络层不涉及端口所以ping通不代表服务可用ping不通也不代表服务不可用很多服务器禁ping但服务正常。先看基本用法# Windows ping www.baidu.com ping -n 10 192.168.1.1 # 发送10个包 ping -l 1472 192.168.1.1 # 指定数据包大小 ping -t 192.168.1.1 # 持续pingCtrlC停止 ping -a 192.168.1.1 # 解析主机名 ping -S 192.168.1.100 8.8.8.8 # 指定源地址ping # Linux ping -c 10 www.baidu.com # 发送10个包 ping -i 0.5 192.168.1.1 # 间隔0.5秒 ping -s 1472 192.168.1.1 # 指定包大小 ping -I eth0 8.8.8.8 # 指定出口网卡 ping -f 192.168.1.1 # 洪水ping需要root关键参数解读-l 1472这个大小不是随便定的。以太网MTU是1500字节减去IP头20字节和ICMP头8字节剩下1472字节是ICMP数据部分的最大值。如果你ping 1472能通但ping 1473不通说明路径MTU就是1500中间没有额外的隧道封装。这个技巧在排查MTU不匹配导致的大包不通问题时特别有用。-S指定源地址这个参数在多网卡服务器上排查问题时是救命稻草。我遇到过一台服务器有内网和外网两块网卡默认路由走外网但访问内网某服务时源地址选错了导致对方防火墙拦截。用-S指定内网源地址一测就定位了。ping结果怎么看正在 Ping www.baidu.com [110.242.68.66] 具有 32 字节的数据: 来自 110.242.68.66 的回复: 字节32 时间8ms TTL54 来自 110.242.68.66 的回复: 字节32 时间9ms TTL54 来自 110.242.68.66 的回复: 字节32 时间8ms TTL54 来自 110.242.68.66 的回复: 字节32 时间7ms TTL54 110.242.68.66 的 Ping 统计信息: 数据包: 已发送 4已接收 4丢失 0 (0% 丢失) 往返行程的估计时间(以毫秒为单位): 最短 7ms最长 9ms平均 8ms时间反映RTT往返时延突然变大说明链路拥塞或路由变化TTL可以粗略判断对方操作系统和对端距离。Windows默认128Linux默认64每经过一个路由器减1。TTL54说明经过了大约10跳64-5410假设对方是Linux丢包率偶发丢包可能是链路质量问题持续丢包说明链路故障常见异常及含义报错信息含义排查方向Request timed out请求超时对方禁ping、防火墙拦截、链路不通Destination host unreachable目标主机不可达路由问题、网关配置错误TTL expired in transitTTL过期路由环路Ping 请求找不到主机DNS解析失败DNS配置问题一般故障Windows特有报错防火墙、网卡驱动、协议栈问题dup!重复回复网络中存在环路或ARP冲突关于dup!这个现象热词里也有人问到。出现大量dup说明你收到了重复的ICMP回复通常是因为网络中存在二层环路或者多路径路由。如果是环路广播风暴会很快把网络拖垮必须立即排查STP配置。如果是多路径可能是路由配置问题需要检查路由表。2.2 tracert/traceroute定位故障在哪一跳ping只能告诉你通或不通tracert能告诉你在哪断的。原理很简单发送TTL从1开始递增的ICMP报文Linux下默认用UDPWindows用ICMP每经过一个路由器TTL减1减到0时路由器回一个ICMP Time Exceeded消息这样就能逐跳发现路径。# Windows tracert www.baidu.com tracert -d www.baidu.com # 不解析主机名速度快 tracert -h 5 www.baidu.com # 最大5跳 tracert -w 1000 www.baidu.com # 超时1秒 # Linux traceroute www.baidu.com traceroute -n www.baidu.com # 不解析 traceroute -T www.baidu.com # 用TCP SYN代替UDP traceroute -I www.baidu.com # 用ICMP traceroute -m 5 www.baidu.com # 最大5跳输出解读traceroute to www.baidu.com (110.242.68.66), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 1.234 ms 1.123 ms 1.089 ms 2 10.0.0.1 (10.0.0.1) 5.678 ms 5.432 ms 5.321 ms 3 * * * 4 110.242.68.66 (110.242.68.66) 8.901 ms 8.765 ms 8.654 ms每一行代表一跳三个时间值是三次探测的RTT。出现* * *表示该跳没有响应可能是路由器禁用了ICMP回复也可能是真的丢包。注意中间跳出现星号不一定代表故障很多核心路由器为了安全会限制ICMP响应只要最终能到达目标就没问题。tracert的实战技巧如果中间某跳开始持续超时且最终也到不了说明故障就在那一跳附近如果中间跳超时但最终能到通常是该路由器禁ICMP不影响业务用-T参数走TCP可以绕过某些对ICMP的限制热词里提到的go语言实现tracert核心就是构造不同TTL的包并监听ICMP响应用golang的golang.org/x/net/icmp库就能实现2.3 ipconfig/ifconfig先搞清楚自己的身份排障第一步永远是确认本机配置。Windows用ipconfigLinux用ifconfig新系统推荐ip addr。# Windows ipconfig # 基本信息 ipconfig /all # 详细信息包括MAC、DNS、DHCP ipconfig /release # 释放DHCP ipconfig /renew # 重新获取 ipconfig /flushdns # 刷新DNS缓存 ipconfig /displaydns # 查看DNS缓存 # Linux ifconfig # 基本信息 ifconfig eth0 # 指定网卡 ip addr show # 推荐用法 ip -s link show eth0 # 查看统计信息重点看什么IP地址是否在预期网段有没有拿到169.254.x.xAPIPA地址说明DHCP失败子网掩码决定本地广播域范围默认网关跨网段通信的出口DNS服务器域名解析依赖MAC地址二层通信的标识热词里提到的ipconfig中看到的隧道适配器这是Windows上一些虚拟化软件如Hyper-V、某些安全软件创建的虚拟网卡。正常情况下不影响使用但如果隧道适配器获取了错误的IP或路由可能导致流量走错路径。排查时如果发现异常路由可以临时禁用这些适配器。ipconfig媒体已断开连接这个报错说明网卡物理层没连通。检查网线、交换机端口、网卡驱动。如果是无线网卡检查是否连上了WiFi。Linux下如果提示ifconfig: command not found比如openSUSE最小化安装需要安装net-tools包# openSUSE zypper install net-tools # CentOS 7 yum install net-tools # Ubuntu apt install net-tools不过现在更推荐用ip addr和ip link功能更强且默认安装。3. 进阶排查命令DNS、端口、连接状态3.1 nslookup/digDNS问题一查便知热词里有个典型报错ping: www.baidu.com: temporary failure in name resolution。这就是DNS解析失败ping命令连域名都解析不了自然没法发包。# Windows nslookup www.baidu.com nslookup www.baidu.com 8.8.8.8 # 指定DNS服务器 nslookup -typemx example.com # 查MX记录 nslookup -typens example.com # 查NS记录 # Linux dig www.baidu.com dig 8.8.8.8 www.baidu.com # 指定DNS dig short www.baidu.com # 简洁输出 dig -x 110.242.68.66 # 反向解析 dig trace www.baidu.com # 追踪解析过程排查思路先确认本机DNS配置ipconfig /all看DNS服务器用nslookup指定公共DNS测试如果公共DNS能解析说明本地DNS有问题用dig trace看解析在哪个环节断了检查/etc/resolv.confLinux或网络适配器DNS设置Windowsdig trace的输出会显示从根域名服务器开始的完整解析链路能精确定位是哪个层级的DNS出了问题。这个在排查企业内网DNS故障时特别好用。3.2 netstat/ss看连接和端口网络通了但服务访问不了下一步就是看端口。# Windows netstat -ano # 所有连接进程ID netstat -ano | findstr :80 # 过滤80端口 netstat -an | findstr LISTENING # 只看监听状态 # Linux netstat -tulnp # TCPUDP监听端口进程 ss -tulnp # 推荐比netstat快 ss -s # 连接统计摘要 ss -tn state established # 只看已建立连接关键状态解读状态含义正常与否LISTEN端口在监听正常服务已启动ESTABLISHED连接已建立正常正在通信TIME_WAIT连接主动关闭后的等待大量出现需关注CLOSE_WAIT被动关闭未完成大量出现说明程序有bugSYN_SENT发起连接等待响应大量出现说明目标不可达TIME_WAIT和CLOSE_WAIT的数量是判断服务健康度的重要指标。TIME_WAIT过多通常是短连接频繁创建销毁导致可以通过调整内核参数优化。CLOSE_WAIT过多则是应用程序没有正确关闭连接属于代码层面的问题。3.3 telnet/nc端口连通性测试ping通只说明网络层可达端口是否开放要单独测。# Windows需要先启用telnet客户端 telnet 192.168.1.100 80 # Linux telnet 192.168.1.100 80 nc -zv 192.168.1.100 80 # 推荐-z扫描模式 -v详细 nc -zv 192.168.1.100 20-30 # 扫描端口范围 nc -zvw3 192.168.1.100 80 # 超时3秒telnet连上后如果显示空白或服务banner说明端口开放。如果提示Connection refused说明端口没监听或被拒绝。如果一直卡住说明被防火墙DROP了。nc比telnet更好用支持批量扫描和超时控制。热词里电脑如何用cmd去ping某个端口严格来说ping不能测端口但可以用Test-NetConnectionPowerShellTest-NetConnection -ComputerName 192.168.1.100 -Port 80这个命令会同时测试ICMP和TCP端口输出很直观。4. 深度排查路由、ARP、抓包4.1 route确认数据包走向多网卡或复杂网络环境下路由表决定了数据包从哪个网卡出去。# Windows route print # 查看路由表 route print -4 # 只看IPv4 route add 10.0.0.0 mask 255.0.0.0 192.168.1.1 # 添加路由 route delete 10.0.0.0 # 删除路由 # Linux route -n # 查看路由表 ip route show # 推荐 ip route add 10.0.0.0/8 via 192.168.1.1 ip route del 10.0.0.0/8路由表解读Kernel IP routing table Destination Gateway Genmask Flags Metric Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 eth00.0.0.0是默认路由所有不匹配其他路由的流量都走这里Flags中U表示路由可用G表示走网关H表示主机路由Metric是优先级越小越优先排查时重点看默认路由是否正确、有没有冲突的路由条目、多网卡时流量是否走了预期的网卡。4.2 arp局域网通信的桥梁同网段通信靠MAC地址ARP负责IP到MAC的解析。# Windows arp -a # 查看ARP缓存 arp -d # 清空缓存 arp -s 192.168.1.1 aa-bb-cc-dd-ee-ff # 静态绑定 # Linux arp -a ip neigh show # 推荐 ip neigh flush all # 清空常见问题ARP冲突两台设备用了同一个IP会导致网络时通时断。用arp -a看是否有多个MAC对应同一IPARP欺骗恶意设备伪造ARP响应导致流量被劫持。企业网络建议开启DAI动态ARP检测ARP缓存错误更换了网卡但ARP缓存还是旧的清空缓存即可4.3 tcpdump/抓包终极手段前面所有命令都排查不出问题时就该抓包了。# Linux tcpdump tcpdump -i eth0 # 抓eth0所有包 tcpdump -i eth0 port 80 # 抓80端口 tcpdump -i eth0 host 192.168.1.100 # 抓指定主机 tcpdump -i eth0 -w capture.pcap # 保存到文件 tcpdump -i eth0 -c 100 # 抓100个包后停止 tcpdump -i eth0 tcp[tcpflags] tcp-syn ! 0 # 只抓SYN包Windows下可以用Wireshark图形化抓包或者用pktmonWin10自带。抓包分析的核心是看三次握手是否完成客户端发SYN服务端回SYN-ACK客户端回ACK如果只看到SYN没有SYN-ACK说明服务端没响应或被防火墙拦截。如果看到SYN-ACK但客户端没回ACK说明客户端侧有问题。如果看到RST说明端口没监听或被主动拒绝。5. 常见故障场景与排查实录5.1 场景一能ping通IP但ping不通域名这是最经典的DNS问题。排查步骤ipconfig /all确认DNS服务器配置nslookup www.baidu.com测试解析如果本地DNS解析失败换nslookup www.baidu.com 223.5.5.5测试公共DNS公共DNS能解析说明本地DNS服务器有问题检查DNS服务状态都解析不了说明网络出口有问题检查防火墙是否拦截了UDP 53端口热词里centos7无法ping通百度和虚拟机ping不通百度大概率就是这个原因。虚拟机还要额外检查NAT模式下的DNS继承设置。5.2 场景二ping时断时续这种间歇性故障最难排查。常见原因网线接触不良换根网线试试无线信号干扰换信道或改用有线ARP冲突arp -a看是否有重复环路导致广播风暴看交换机CPU和端口流量MTU不匹配用ping -l 1472和ping -l 1473对比测试网卡节能设置关闭网卡的节能模式热词里w5500正常工作几天后连不上ping时候断断续续W5500是硬件TCP/IP芯片这种情况通常是芯片过热或看门狗复位检查供电和散热。5.3 场景三SSH连接超时但ping通热词里ssh 用户名公网IP timed out ping通这个场景很典型。ping通说明网络层没问题SSH超时说明22端口不通。排查telnet 公网IP 22或nc -zv 公网IP 22测试端口端口不通检查防火墙规则、安全组、SSH服务是否启动端口通但SSH超时检查SSH配置的AllowUsers、MaxStartups等参数检查是否有fail2ban等工具封了你的IP5.4 场景四Windows 11 ping 127.0.0.1报一般故障这个报错通常是TCP/IP协议栈损坏或hosts文件异常。解决方法检查C:\Windows\System32\drivers\etc\hosts文件确保127.0.0.1那行没被改重置协议栈netsh int ip reset然后重启重置Winsocknetsh winsock reset检查网卡驱动更新到最新版如果最近装了安全软件尝试临时禁用热词里windows11已关闭Windows Defender IP地址无法ping通关闭Defender后反而ping不通可能是关闭过程中防火墙规则残留。用netsh advfirewall reset重置防火墙规则。5.5 常见问题速查表现象可能原因排查命令ping不通网关网线/网卡/IP配置ipconfig、arp -aping通网关不通外网路由/防火墙route print、tracertping通IP不通域名DNS问题nslookup、digping通端口不通服务未启动/防火墙telnet、nc、netstat丢包严重链路质量/环路ping -t、tracert延迟忽高忽低拥塞/路由抖动ping、mtr连接被拒绝端口未监听netstat、ss连接超时防火墙DROPtelnet、tcpdump6. 实操心得与避坑指南6.1 命令组合使用的艺术单个命令能力有限组合起来才能发挥最大威力。我常用的几个组合快速定位故障域ipconfig ping 网关 ping 223.5.5.5 ping www.baidu.com一条命令串起来从本机到外网逐层测试哪一步断了立刻知道。端口服务双重验证nc -zv 目标IP 端口 curl -v http://目标IP:端口先确认端口通再确认服务能正常响应。持续监控链路质量ping -n 1000 目标IP ping_log.txt长时间ping记录事后分析丢包规律。Linux下可以用ping -D加时间戳。6.2 那些年我踩过的坑坑一ping通不代表服务正常。有次客户说网站打不开我ping服务器通就以为是应用问题。结果折腾半天发现是80端口被防火墙拦了。从此养成习惯ping通后必须测端口。坑二tracert中间跳超时不一定是故障。很多路由器限制ICMP速率tracert时中间跳大量星号但最终能到达。判断标准是最终目标是否可达而不是中间跳是否响应。坑三DNS缓存导致误判。改了DNS记录后本地还是解析到旧IP用ipconfig /flushdns清缓存。Linux下systemd-resolved需要resolvectl flush-caches。坑四多网卡源地址选择。服务器有多块网卡时ping默认走默认路由的源地址。如果目标只允许特定源地址访问必须用-S指定。这个坑我在做双线机房时踩过无数次。坑五MTU问题隐蔽性强。小包能通大包不通表现为能ping通但传文件卡死、SSH能连但执行命令卡住。用ping -l 1472 -f测试-f表示不分片。6.3 效率提升技巧**Windows下用PowerShell的Test-NetConnection**替代pingtelnet组合一个命令搞定**Linux下用mtr**替代tracert实时刷新且结合了ping和tracert的功能用ss替代netstat在连接数多时速度快很多抓包时先用过滤器不然几个G的包分析起来很痛苦把常用命令做成别名或脚本比如我有个netcheck脚本一键完成从本机到外网的完整检查6.4 关于工具选择的建议Windows平台系统自带的命令够用配合PowerShell更强大。抓包用Wireshark端口扫描用Test-NetConnection。Linux平台iproute2套件ip、ss替代老的net-toolsifconfig、netstat。抓包用tcpdump分析用Wireshark。mtr和nc是必备。跨平台curl和dig在各大平台都有建议熟练掌握。最后分享一个我个人习惯每次排障完把用到的命令和排查过程简单记一笔。时间长了你会发现大部分故障就那么几类有了积累后排查速度会快很多。网络排障这件事经验比理论重要但理论能让你在遇到新问题时知道往哪个方向想。这10个命令就是你的工具箱用熟了大部分问题都能在几分钟内定位。
返回列表