第 9 章 · 排错工具箱
前八章讲的都是"网怎么工作":语言怎么定、地址怎么编、路怎么寻、包怎么传、锁怎么上。这一章面对一个更狼狈也更真实的处境——网坏了。网页转圈、游戏掉线、接口报错、"网络连上了但什么都打不开"。这时候背概念没用,得动手查。网络排错是这么一门手艺:把"网出了问题"这句空话,一层层拆小,拆到某一层能开口说"是我"。这一章六节,就是六件从粗到细的家什:ping 问生死、traceroute 问路径、nslookup 问名字、curl 问对方、netstat 问自己、Wireshark 放录像——合起来,正好把 TCP/IP 的每一层都盘问一遍。读完这一章,你再遇到"上不了网",第一反应将不再是重启路由器,而是掏工具。
物业里干了三十年的赵师傅,腰上永远挂一串工具。徒弟小周跟了他一天,记满了笔记。
上午 302 报"家里没电"——赵师傅没拆任何东西,先拿电笔在门口插座上试了试:"电表那边来的电是通的,问题在屋里。"前后十秒。下午 501 报"水压小"——他顺着一楼到六楼的管线逐层听、逐层试压,最后指着三楼一段管子:"堵在这儿。"傍晚 108 报"网断了"——他先 ping 了一下网关,又 ping 了外网,"楼里通、外面不通,找运营商。"
小周问:"师傅,你怎么不进来就拆?"赵师傅敲了敲腰上的工具串:"先花一分钟的检查,省一小时的拆卸。工具不在多,在于知道先用哪个。"
这一章就是赵师傅那条工具腰带:六件家什各管一层,先便宜的、后昂贵的,先把范围缩小、再动手拆解——网络排错的全部章法,就缝在这条腰带上。
本章要回答什么
说白了,这一章要回答的总问题是:"网络出了问题,怎么科学地找到病根,而不是瞎猜瞎重启?"拆开来是六个小问题,正好对应六节:
- "到底通不通?"——先问生死。一条命令、半秒出结果:通、断、快、慢、丢多少。这是 § 9.1 · ping。
- "断,断在哪一站?"——再问路径。逐跳点名沿途每一台路由器,看包死在第几跳。这是 § 9.2 · traceroute。
- "名字翻成地址,翻对了吗?"——问查号台。域名解析的结果对不对、干净不干净。这是 § 9.3 · nslookup / dig。
- "对面到底回了什么话?"——直接对话。绕过浏览器外壳,亲手发请求、亲眼看原始回执。这是 § 9.4 · curl / wget。
- "我自己这台机器,门开了没?"——回家自查。谁在监听、谁在连接、哪个进程占着端口。这是 § 9.5 · netstat / ss。
- "各说各话、吵不清了怎么办?"——放原始录像。逐包拆解,终审对质。这是 § 9.6 · Wireshark。
网络故障是个说不清症状的病人,被送到这条流水线上,一站一站往里送:
第一站,分诊台(§ 9.1 ping)——先摸脉:有生命体征吗?快慢如何?多数小病到这就看完了:哦,虚惊一场;哦,确实断了。
第二站,影像科(§ 9.2 traceroute)——脉还在但人喊疼?拍张片子看路径:堵在小区门口、城际干道还是对方楼下。
第三站,挂号处复核(§ 9.3 nslookup)——确认没挂错科:名字和门牌对得上吗?查号台给的号是真是假?
第四站,问诊室(§ 9.4 curl)——和"对方"直接对话:把请求原样递过去,把回执原样拿回来,状态码分诊:4xx 查自己,5xx 怨对方,3xx 跟着走。
第五站,查体室(§ 9.5 netstat)——镜头掉转对准病人自己:进程起了没、门开了没、谁在偷偷外联。
第六站,手术室监护仪(§ 9.6 Wireshark)——疑难杂症终极一站:所有原始波形一屏排开,每一次心跳的搏动都记录在案,谁也赖不掉。
流水线的规矩只有两条:由近及远(先查自己,再查世界)、由粗到细(先一分钟的检查,后一小时的解剖)——顺序乱了,就是瞎忙。
本章的行进地图
先看地图再上路。六节不是并列的六个命令,而是一支分工明确的小队——每一节都比上一节看得更细:
| # | 小节 | 解决的问题 | 核心比喻 | 一句话记忆 |
|---|---|---|---|---|
| 1 | § 9.1 ping | 通不通、快不快、丢多少 | 投石问路 / 摸脉 | 先问生死,再问快慢 |
| 2 | § 9.2 traceroute | 包走到哪一站断了 | 查物流轨迹 / 拍片子 | 星号不是死刑,去回不同路 |
| 3 | § 9.3 nslookup / dig | 域名解析对不对、干不干净 | 查号台问址 | 两地对比,劫持现形 |
| 4 | § 9.4 curl / wget | 对方亲口回了什么 | 不穿外壳的浏览器 | 状态码首位定分诊 |
| 5 | § 9.5 netstat / ss | 本机端口与连接状态 | 门卫的登记簿 | TIME_WAIT 是礼貌,CLOSE_WAIT 是事故 |
| 6 | § 9.6 Wireshark | 逐包对质,终审裁决 | 网卡上的摄像机 | 别的工具给怀疑,抓包给判决 |
这张表里藏着一条值得先记住的暗线:六件工具在 TCP/IP 各层上各守一段——本机与端口(netstat)、名字与应用(nslookup、curl)、网络与路径(ping、traceroute)、直到逐字节(Wireshark)。第 2 章说"分层是网络的设计哲学",这一章补上另一半:分层,也是排错的工作编制表。一层一工具,谁的问题谁认领。
本章的六节
ping 与 ICMP
回声协议、RTT 与抖动、丢包率、TTL 倒计数、ping 不通的五种可能、平替与局限。
traceroute 路径追踪
TTL 钓鱼术、逐跳地图、星号三解、非对称路由、绕路与跨境路径的判读。
nslookup / dig
递归与权威、记录类型全解、TTL 与缓存、公共 DNS 盘点、两地对比识劫持。
curl / wget
状态码分诊、-v 回放对话、-w 四段计时、重定向与 POST、脚本化巡检。
netstat / ss
监听与连接状态、0.0.0.0 与 127.0.0.1、端口占用三步破案、TIME_WAIT 大军、巡楼清单。
Wireshark 抓包
三块屏幕、双过滤器、追踪流、HTTPS 时代看信封、四大经典案子、tcpdump 与 pcap。
学之前先记住这一点
这一章命令密度全篇最高,但四条章法撑起了全部内容——记住章法,命令忘了随时能查回来:
- 章法一:先便宜,后昂贵。ping 半秒出结果,Wireshark 分析半小时起。老手不是会用的工具多,而是知道先掏哪件——一块钱的检查先做,CT 留到最后。动手顺序错了,工具再全也是瞎忙。
- 章法二:由近及远。查"上不了网"的正规顺序是:本机进程 → 本机端口 → 名字解析 → 出口路径 → 对方服务器。多数人反着来(先怪运营商、后怪路由器),结果折腾半天发现是自己电脑的防火墙。相当于找人先看家里,再查小区,再报警——顺序本身就是效率。
- 章法三:单一证据不作数。ping 不通 ≠ 网断了(可能 ICMP 被禁),curl 404 ≠ 网站挂了(可能只是这个页面没了)。每个工具都有盲区,交叉验证才是硬道理:ping 加 curl、本地查加异地查、netstat 加抓包——两路证据指向同一结论,才敢下诊断。
- 章法四:工具缩小范围,判断永远靠人。所有工具只输出事实(通、慢、404、TIME_WAIT),把事实连成病因的那一步,永远是你脑子里那张分层地图。本质上就是:背下七个命令只要一天,养成"先想清这病该在哪一层、再选工具去验证"的习惯,才是这一章真正想教的东西。
这一章是网络篇的"动手"章——前八章修路架桥上锁,这一章教你桥断了怎么办。
六节一线:问生死(ping)→ 追路径(traceroute)→ 核名字(nslookup)→ 对对话(curl)→ 查自家(netstat)→ 放录像(Wireshark)。
读完这一章,你应该能做到三件很实用的事:遇到网络故障有一套固定的起手式(先 ping 再逐层缩小);看懂工程师的排查话术("重传""端口没监听""解析被污染"说的是什么);把"重启试试"从第一反应降级为最后一招——重启前后各查一遍,至少知道重启到底修好了什么。