一个良好的基础设施故障排除者与一个重启服务和希望的人之间的区别是一个精神模型.
当"HTTPs times out"在收件箱中降落时,你不会猜到——你确切知道要先询问哪个层,顺序是什么.
网络是一个堆栈,所以把它当作一个 每一个请求通过相同的层,上到下: 应用程序 → TLS → Port → DNS → Gateway → Route → 接口 这就是依赖命令——如果端口被关闭,TLS无法工作,如果DNS解决了错误的主机,端口就毫无意义了,如果您的接口没有IP,则这些都无关紧要.
所以从平起平起就按倒起的顺序进行校验:Interface-IP-route-Gateway-DNS-Port-TLS-应用程序起步于下起步,因为下层断开后会产生比较高的混乱症状.
在攀登前确认每一层都是健康的 一层倒闭的那一刻,你已经发现了你的问题——上面的一切都是红色的 her.
出道:"HTTPS to api.example.com times out"
1.
接口——我们是否有链接和地址?
搜索您的主界面( 说) 状态与行类似 。
没有吗?
DHCP失败或链接已下线——停止这里,上面任何内容都行不通.
如果地址是存在的 正常的,爬。
2.
路线——有通往目的地的道路吗?
这显示了内核会选择的确切路线,包括源IP和网关().
如果你得到"网络是无法到达的"或者没有默认的路径,你已经找到了.
这也是经典错误"无路由主机"背后的签名.
3.
网关——我们能到达第一跳吗? ; 显示ARP表。
一个带有MAC地址的网关条目表示L2是罚款.
或意味着网关没有回答ARP——一个VLAN,电缆或防火墙问题.
注意许多主机放弃了ICMP,所以把失败当作是暗示,而不是判决——信任邻国.
4.
DNS——名字是否解决了?
来自 DNS 的空答案或“ 无法解析主机” 表示为您的层 。
将返回的IP与你所期望的比较——成功解析到一个被打乱的地址是一个微妙的失败,看起来像一个应用程序错误.
添加( 无) 以查看行并确认哪个解析器已回答 。
5.
港口 -- -- 服务是否实际上可以监听/获取?
三出结果 三出不同的含义——这是最有诊断性的一步:"成功"/"开"——TCP握手完成,向上移动到TLS. "连接拒绝"——你到达了主机,但是没有在443(服务中断,或错误的端口)上听.
主持人以RST快速回答.
超时 / hangs —— 一个防火墙或安全组默地投放包.
签名是等待,而不是立即错误 。
被拒绝 vs.
超时是网络调试中唯一最有价值的区分:被拒绝 = 到达主机,超时 = 有东西吃了数据包.
在服务器上,确认进程绑定在正确的地址上(一个服务上不会接受外部流量).
6.
TLS——握手是否完成和证书验证?
读取下部.
表示链条有效.
过期的证书,错误的主机名,或缺失的中间件在此显示为非零码(例如无法验证第一个证书)——早在应用程序日志中指责某事模糊之前.
旗下发送SNI,它对于服务多个证书的共享主机很重要.
7.
应用——现在,最后,应用程序只有在下面的一切都是绿色时,才会发生一个应用层错误(HTTP 500,401,慢后端),这实际上是指应用程序.
输出重放整个攀登过程——DNS,接通,TLS握手,请求,响应头——因此,这也是一次出色的一发智能检查,以确认你的分层结论.
为什么这比起猜测每个指令目标精确的一层,每个失败都有不同的签名:没有一条路由主机(路由),无法解决(DNS),连接被拒绝(端口,服务倒下),超时(端口,防火墙倒下),验证返回代码!=0(TLS).
学习签名后直接跳到断层,而不是随机重启。
我铺满了床