连通性检查

连不上未必是服务坏了,先确认你在检查哪一层回显、路径、应用层,三种手段各管一段

同一个目标,三种检查经常给出三种结论。原因在于它们走的协议不同,被中间设备对待的方式也不同。把每一类检查能证明什么、不能证明什么分清楚,排查就不会在原地打转。

回显请求路径跟踪端口探测解析记录
先探端口握手能否建立比回显更能说明问题
再看路径逐跳对比能定位变差的那一段
最后查解析域名与地址要分别确认
记下时间不同时段结论可能相反

动手之前先确定三件事

条件没固定下来,几次结果之间就没有可比性

目标是域名还是地址前者多一层解析环节,排查时要把它单独拿出来看
用哪种方式探测回显走的是控制报文,端口探测走的是连接握手,别混着比较
出口有没有转发经过代理或隧道时,中途换了出口,结论会整体失效
检查的时间点把时刻写下来,高峰期与空闲期的差别可能很大
是否具备足够权限部分探测方式需要较高权限才能发出原始报文
结果怎么留存单次数据说明不了趋势,连续记录才看得出规律

按这个顺序走,四步之内能定位

先解析,再端口,后路径,最后做一次应用层验证

  1. 先确认目标解析出来的地址对不对

    把域名解析结果与预期对照。解析到就近节点属正常,但如果结果本身落在内部区间,先处理解析配置,后面的检查都不用做。

  2. 再探目标端口是否有应答

    对目标端口发起一次连接。能建立说明路径与服务进程都在工作;被明确拒绝说明路径通但没人监听;一直无响应则连路径是否通都无法确定。

  3. 接着看路径上从哪一跳开始变差

    逐跳查看响应时间与丢包情况。只在某一跳之后持续变差,问题多半在那段链路;从第一跳就差,更可能是本地出口或接入设备。

  4. 最后用一次应用层请求做验证

    发一个只取响应头的请求,看状态码与耗时。状态码正常而内容异常,说明是应用侧的问题,与链路无关,方向可以立刻转过来。

只做回显检查,会漏掉什么

单靠回显的局限

不少主机与防护设备默认不回应这类请求
不回应不等于端口没开、服务没起
结果只有通与不通,没有分层信息
耗时值受应答优先级影响,波动偏大
同一目标换个时段结论可能相反

应用层探测多出来的信息

能确认目标端口是否处于监听状态
能拿到状态码,区分服务层与链路层故障
可以带自定义请求头,验证是不是被拦截
耗时更贴近真实访问时的感受
失败原因能细分到拒绝、超时与重置

域名解析和地址是两回事

域名先解析出地址,客户端再拿这个地址去连接,是两个独立的环节。解析出错时,无论怎么探测目标端口都不会有结果,因为连接的对象从一开始就是错的。

一个域名可以同时挂着多条解析记录,分别指向不同地址。解析服务会根据发起查询的线路返回其中一条,这就是同一个域名在不同网络下解析到不同机房的原因。

缓存是另一个变量。系统、浏览器与中间的解析服务都可能把上次的结果留一段时间,记录改了而本地还按旧地址连接,表现就是时好时坏。先清一次本地缓存再查,通常就能看出分界。

还有一种常见情形:解析出来的地址归属地显示在某个机房,而那只是内容分发节点的位置,不是数据真正存放的地方。节点只负责就近响应,源数据可能远在别处。

容易误判的几种情况

五条,都是排查时最常见的弯路

把三类检查当成三个不同的问题记住:能不能到达、服务是否在听、应用是否正常应答。顺序固定下来之后,任何一条结果都能对上号,排查不必再靠猜。

检查过程中的疑问

多数和结论的可靠程度有关

回显请求超时,是不是目标一定不可达?

不一定。很多主机与中间设备会主动忽略这类请求,而同一目标的网页访问完全正常。换端口探测或应用层请求再确认一次。

端口连不上和被明确拒绝有什么区别?

被拒绝意味着对方回了消息,说明路径通、主机在线,只是那个端口没有服务在听;一直等到超时则连主机是否在线都无法确定。

改了域名解析记录,多久能生效?

取决于各处的缓存保留时长,短则几分钟,长则按小时计。先找一台没查过的机器验证,能排除本机缓存的干扰。

同一域名解析出多个地址,该测哪一个?

按顺序各测一次,或直接测域名本身让程序自己挑。只测其中一个地址,得到的结论无法代表全部节点。

路径跟踪中间几跳没有回应正常吗?

正常。部分设备不返回超时消息,只要后面的跳数还能继续显示,路径就是通的,中间的空缺不影响判断。

同批其它站点入口