Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

网络故障诊断

复习

  • DNS 查询与缓存:域名需要被解析为地址
  • 路由器与逐跳转发:数据包被一跳一跳接力
  • ICMP:ping 与 traceroute 建立在它之上

TL;DR

  • 诊断要从底层往上层逐层排查
  • 先看地址配置,再看能否连通,最后看名字解析与服务
  • ping 测连通,traceroute 看路径,查解析看域名
  • 分层排查能让问题范围迅速缩小

正文

  “上不了网”是件让人抓狂的事。可网络是一层层搭起来的,问题可能出在任何一层。怎么高效地找出它?

  办法和网络本身一样:分层排查,自下而上。

一层层往上问

  面对“连不上”,一个很自然的排查顺序是:

  1. 我有没有可用地址? 检查本机是否拿到了 IP、网关等配置(DHCP 是否成功)
  2. 能不能通到网关? 这是离开本机后的第一跳
  3. 能不能通到外部 IP? 比如直接 ping 一个公网地址。能通,说明路由和链路大致没问题
  4. 名字解析对不对? 如果 IP 能通、域名不行,那问题多半在 DNS
  5. 服务端口通不通? 地址、解析都正常,再看目标服务的端口是否可达

  每往上走一步,就把可能的故障范围缩小一层。这正好是分层思想在排障上的应用:先确认底层没问题,再怀疑上层。

几个顺手的工具

  几个常用工具对应着不同的层:

  • ping:测试能不能通,以及往返时间
  • traceroute:看数据经过哪些跳,卡在哪一段
  • 查 DNS:看域名解析出的地址对不对

  比如,你能 ping 通一个 IP,却打不开网页,那多半不是链路问题,而要往上看——很可能是 DNS 解析失败,或者目标服务本身出了问题。能 ping 通 IP 却打不开网页,这个现象本身,就已经给出了重要线索。

分层的又一次回报

  你会发现,网络排障之所以能这么“有条理”,正是因为网络被设计成了分明的层次。

  如果没有分层,而是一团乱麻,那么一出问题,就只能在茫茫多的可能性里瞎猜。分层不仅让网络更容易构建,也让网络更容易理解和修复。 这是抽象带来的又一重好处:不仅好造,而且好修。

思考题 1

  为什么网络排障适合“自下而上”逐层进行?

思考题 2

  能 ping 通 IP 却打不开网页,问题可能出在哪一层?

小结

知识点

  • 排障遵循自下而上的分层顺序
  • 依次检查地址、网关、连通性、解析与服务
  • ping、traceroute、DNS 查询是常用工具
  • 分层让问题范围能迅速缩小

参考资料

  1. Wikipedia(zh):ping:测试网络连通的工具
  2. Wikipedia(zh):traceroute:探测数据包传输路径的工具

思考题答案(仅供参考)

思考题 1

  因为网络是分层的,每一层依赖下一层。从底层查起,一旦某一层不通,就能立刻把问题锁定在那附近,不必在更上层的众多可能里瞎找。逐层确认可以把故障范围迅速缩小。

思考题 2

  问题多半不在链路和路由(因为 IP 能通),而在更上层——很可能是域名解析(DNS)失败,或者网页服务本身不可用(端口未开、服务宕机等)。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪