调试 ETIMEDOUT 错误

调试 ETIMEDOUT 错误

我正在尝试调试从我们的 Linux 服务器执行 HTTP GET 请求时频繁出现的 api.facebook.com (31.13.95.8) ETIMEDOUT 错误。为了确定这是我们服务器的问题还是 Facebook 端的问题,我运行了以下命令:

$ mtr -r -c 10 --report-wide 31.13.95.8 -P 443
Start: Fri Mar 24 15:18:54 2017
HOST: lothlorien                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 108.170.241.35                      0.0%    10   12.3  12.4  12.3  12.8   0.0
  2.|-- 32934.hkg.equinix.com               0.0%    10   13.6  13.7  13.6  14.0   0.0
  3.|-- po102.psw02.hkg3.tfbnw.net          0.0%    10   13.1  13.1  13.0  13.3   0.0
  4.|-- 173.252.67.87                       0.0%    10   13.2  13.2  13.1  13.4   0.0
  5.|-- edge-star-shv-01-hkg3.facebook.com  0.0%    10   13.2  13.2  13.1  13.4   0.0

但是,当我运行此命令时(请注意,额外的 -T 发送 TCP SYN 而不是 ICMP ECHO 数据包),我们看到大量的数据包丢失:

$ mtr -r -c 10 -T --report-wide 31.13.95.8 -P 443
Start: Fri Mar 24 15:20:51 2017
HOST: lothlorien                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 108.170.241.67                      0.0%    10   12.5  15.3  12.5  37.5   7.8
  2.|-- 32934.hkg.equinix.com               0.0%    10   14.5  14.4  13.8  15.7   0.3
  3.|-- po102.psw03.hkg3.tfbnw.net          0.0%    10   13.8  13.9  13.4  14.6   0.0
  4.|-- 173.252.67.5                        0.0%    10   14.0  14.2  13.7  14.7   0.0
  5.|-- edge-star-shv-01-hkg3.facebook.com 90.0%    10  250.7 250.7 250.7 250.7   0.0

为什么第二个命令显示大量数据包丢失,而第一个命令却没有?有什么原因吗?

答案1

您是否对 API 使用连接池?SYN 数据包可能会受到限制,以防止 SYNflood 式攻击。

相关内容