我正在尝试调试从我们的 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 式攻击。