网络故障诊断
复习
- DNS 查询与缓存:域名需要被解析为地址
- 路由器与逐跳转发:数据包被一跳一跳接力
- ICMP:ping 与 traceroute 建立在它之上
TL;DR
- 诊断要从底层往上层逐层排查
- 先看地址配置,再看能否连通,最后看名字解析与服务
- ping 测连通,traceroute 看路径,查解析看域名
- 分层排查能让问题范围迅速缩小
正文
“上不了网”是件让人抓狂的事。可网络是一层层搭起来的,问题可能出在任何一层。怎么高效地找出它?
办法和网络本身一样:分层排查,自下而上。
一层层往上问
面对“连不上”,一个很自然的排查顺序是:
- 我有没有可用地址? 检查本机是否拿到了 IP、网关等配置(DHCP 是否成功)
- 能不能通到网关? 这是离开本机后的第一跳
- 能不能通到外部 IP? 比如直接 ping 一个公网地址。能通,说明路由和链路大致没问题
- 名字解析对不对? 如果 IP 能通、域名不行,那问题多半在 DNS
- 服务端口通不通? 地址、解析都正常,再看目标服务的端口是否可达
每往上走一步,就把可能的故障范围缩小一层。这正好是分层思想在排障上的应用:先确认底层没问题,再怀疑上层。
几个顺手的工具
几个常用工具对应着不同的层:
- ping:测试能不能通,以及往返时间
- traceroute:看数据经过哪些跳,卡在哪一段
- 查 DNS:看域名解析出的地址对不对
比如,你能 ping 通一个 IP,却打不开网页,那多半不是链路问题,而要往上看——很可能是 DNS 解析失败,或者目标服务本身出了问题。能 ping 通 IP 却打不开网页,这个现象本身,就已经给出了重要线索。
分层的又一次回报
你会发现,网络排障之所以能这么“有条理”,正是因为网络被设计成了分明的层次。
如果没有分层,而是一团乱麻,那么一出问题,就只能在茫茫多的可能性里瞎猜。分层不仅让网络更容易构建,也让网络更容易理解和修复。 这是抽象带来的又一重好处:不仅好造,而且好修。
思考题 1
为什么网络排障适合“自下而上”逐层进行?
思考题 2
能 ping 通 IP 却打不开网页,问题可能出在哪一层?
小结
知识点
- 排障遵循自下而上的分层顺序
- 依次检查地址、网关、连通性、解析与服务
- ping、traceroute、DNS 查询是常用工具
- 分层让问题范围能迅速缩小
参考资料
- Wikipedia(zh):ping:测试网络连通的工具
- Wikipedia(zh):traceroute:探测数据包传输路径的工具
思考题答案(仅供参考)
思考题 1
因为网络是分层的,每一层依赖下一层。从底层查起,一旦某一层不通,就能立刻把问题锁定在那附近,不必在更上层的众多可能里瞎找。逐层确认可以把故障范围迅速缩小。
思考题 2
问题多半不在链路和路由(因为 IP 能通),而在更上层——很可能是域名解析(DNS)失败,或者网页服务本身不可用(端口未开、服务宕机等)。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪